40 lines
2.5 KiB
TypeScript
40 lines
2.5 KiB
TypeScript
import { expect, gotoWorkbench, saveScreenshot, test } from "../fixtures/test";
|
|
import { selectors, sessionTab } from "../fixtures/selectors";
|
|
|
|
test("TraceTimeline renders readable rows and hides backend noise", async ({ page }, testInfo) => {
|
|
await gotoWorkbench(page, "/workbench/sessions/ses_completed");
|
|
await expect(page.locator(sessionTab("ses_completed"))).toHaveAttribute("data-active", "true");
|
|
const trace = page.locator(`${selectors.traceTimeline}[data-status="completed"]`);
|
|
await expect(trace).toBeVisible();
|
|
await trace.locator("summary.trace-disclosure-summary").click();
|
|
await expect(page.locator(`${selectors.traceRow}[data-row-kind="tool"]`)).toContainText("commandExecution");
|
|
await expect(page.locator(`${selectors.traceRow}[data-terminal="true"]`)).toContainText("构建和 Trace 渲染检查完成");
|
|
await expect(page.locator(selectors.conversationList)).not.toContainText("token_count");
|
|
await page.locator(".message-detail-button").first().click();
|
|
await expect(page.locator(selectors.messageDetailDialog)).toContainText("trc_completed");
|
|
await expect(page.locator(selectors.messageDetailDialog)).toContainText("ses_completed");
|
|
await saveScreenshot(page, testInfo, "trace-rendering-detail");
|
|
});
|
|
|
|
test("failed trace exposes readable failure row", async ({ page }, testInfo) => {
|
|
await gotoWorkbench(page, "/workbench/sessions/ses_failed");
|
|
const trace = page.locator(`${selectors.traceTimeline}[data-status="failed"]`);
|
|
await expect(trace).toBeVisible();
|
|
await trace.locator("summary.trace-disclosure-summary").click();
|
|
await expect(page.locator(`${selectors.traceRow}[data-event-status="blocked"][data-row-kind="tool"]`)).toContainText("missing controlled dependency");
|
|
await expect(page.locator(`${selectors.messageCard}[data-status="failed"]`)).toContainText("缺少受控依赖");
|
|
await saveScreenshot(page, testInfo, "trace-rendering-failed");
|
|
});
|
|
|
|
test.describe("terminal empty trace copy", () => {
|
|
test.use({ scenarioId: "terminal-empty-trace" });
|
|
|
|
test("completed message details do not retain thinking placeholder", async ({ page }) => {
|
|
await gotoWorkbench(page, "/workbench/sessions/ses_terminal_empty");
|
|
const card = page.locator(`${selectors.messageCard}[data-status="completed"]`).last();
|
|
await expect(card).toContainText("终态空 Trace 已完成。");
|
|
await expect(card.locator(".trace-empty")).toContainText("运行已完成,暂无可读 Trace");
|
|
expect((await card.textContent()) ?? "").not.toContain("思考中");
|
|
});
|
|
});
|