fix(workbench): expose code agent timing metadata
This commit is contained in:
+8
-8
@@ -41,7 +41,7 @@
|
||||
"firstUserMessagePreview": "运行中的板级验证",
|
||||
"messages": [
|
||||
{ "id": "msg_running_user", "messageId": "msg_running_user", "role": "user", "title": "用户", "text": "运行中的板级验证", "status": "sent", "createdAt": "2026-06-17T09:39:40.000Z", "sessionId": "ses_running", "threadId": "thr_running", "turnId": "turn_running" },
|
||||
{ "id": "msg_running_agent", "messageId": "msg_running_agent", "role": "agent", "title": "Code Agent", "text": "", "status": "running", "createdAt": "2026-06-17T09:39:41.000Z", "sessionId": "ses_running", "threadId": "thr_running", "traceId": "trc_running", "turnId": "turn_running", "runnerTrace": { "traceId": "trc_running", "status": "running", "sessionId": "ses_running", "threadId": "thr_running", "events": [{ "seq": 1, "createdAt": "2026-06-17T09:39:42.000Z", "label": "agentrun:assistant:message", "type": "assistant_message", "status": "running", "message": "正在检查测试工程。" }], "eventCount": 1, "fullTraceLoaded": false, "hasMore": false } }
|
||||
{ "id": "msg_running_agent", "messageId": "msg_running_agent", "role": "agent", "title": "Code Agent", "text": "", "status": "running", "createdAt": "2026-06-17T09:39:41.000Z", "sessionId": "ses_running", "threadId": "thr_running", "traceId": "trc_running", "turnId": "turn_running", "timing": { "startedAt": "2026-06-17T09:39:41.000Z", "lastEventAt": "2026-06-17T09:39:45.000Z", "finishedAt": null, "durationMs": 4000, "valuesRedacted": true }, "startedAt": "2026-06-17T09:39:41.000Z", "lastEventAt": "2026-06-17T09:39:45.000Z", "finishedAt": null, "durationMs": 4000, "runnerTrace": { "traceId": "trc_running", "status": "running", "sessionId": "ses_running", "threadId": "thr_running", "timing": { "startedAt": "2026-06-17T09:39:41.000Z", "lastEventAt": "2026-06-17T09:39:45.000Z", "finishedAt": null, "durationMs": 4000, "valuesRedacted": true }, "startedAt": "2026-06-17T09:39:41.000Z", "lastEventAt": "2026-06-17T09:39:45.000Z", "finishedAt": null, "durationMs": 4000, "events": [{ "seq": 1, "createdAt": "2026-06-17T09:39:42.000Z", "label": "agentrun:assistant:message", "type": "assistant_message", "status": "running", "message": "正在检查测试工程。" }], "eventCount": 1, "fullTraceLoaded": false, "hasMore": false } }
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -54,7 +54,7 @@
|
||||
"firstUserMessagePreview": "完成态 Trace 渲染验证",
|
||||
"messages": [
|
||||
{ "id": "msg_completed_user", "messageId": "msg_completed_user", "role": "user", "title": "用户", "text": "完成态 Trace 渲染验证", "status": "sent", "createdAt": "2026-06-17T09:37:00.000Z", "sessionId": "ses_completed", "threadId": "thr_completed", "turnId": "turn_completed" },
|
||||
{ "id": "msg_completed_agent", "messageId": "msg_completed_agent", "role": "agent", "title": "Code Agent", "text": "构建和 Trace 渲染检查完成。", "status": "completed", "createdAt": "2026-06-17T09:37:02.000Z", "sessionId": "ses_completed", "threadId": "thr_completed", "traceId": "trc_completed", "turnId": "turn_completed", "runnerTrace": { "traceId": "trc_completed", "status": "completed", "sessionId": "ses_completed", "threadId": "thr_completed", "events": [], "eventCount": 5, "fullTraceLoaded": true, "hasMore": false, "finalResponse": { "text": "构建和 Trace 渲染检查完成。" } } }
|
||||
{ "id": "msg_completed_agent", "messageId": "msg_completed_agent", "role": "agent", "title": "Code Agent", "text": "构建和 Trace 渲染检查完成。", "status": "completed", "createdAt": "2026-06-17T09:37:02.000Z", "sessionId": "ses_completed", "threadId": "thr_completed", "traceId": "trc_completed", "turnId": "turn_completed", "timing": { "startedAt": "2026-06-17T09:37:02.000Z", "lastEventAt": "2026-06-17T09:37:08.000Z", "finishedAt": "2026-06-17T09:37:08.000Z", "durationMs": 6000, "valuesRedacted": true }, "startedAt": "2026-06-17T09:37:02.000Z", "lastEventAt": "2026-06-17T09:37:08.000Z", "finishedAt": "2026-06-17T09:37:08.000Z", "durationMs": 6000, "runnerTrace": { "traceId": "trc_completed", "status": "completed", "sessionId": "ses_completed", "threadId": "thr_completed", "timing": { "startedAt": "2026-06-17T09:37:02.000Z", "lastEventAt": "2026-06-17T09:37:08.000Z", "finishedAt": "2026-06-17T09:37:08.000Z", "durationMs": 6000, "valuesRedacted": true }, "startedAt": "2026-06-17T09:37:02.000Z", "lastEventAt": "2026-06-17T09:37:08.000Z", "finishedAt": "2026-06-17T09:37:08.000Z", "durationMs": 6000, "events": [], "eventCount": 5, "fullTraceLoaded": true, "hasMore": false, "finalResponse": { "text": "构建和 Trace 渲染检查完成。" } } }
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -67,7 +67,7 @@
|
||||
"firstUserMessagePreview": "失败态 Trace 诊断",
|
||||
"messages": [
|
||||
{ "id": "msg_failed_user", "messageId": "msg_failed_user", "role": "user", "title": "用户", "text": "失败态 Trace 诊断", "status": "sent", "createdAt": "2026-06-17T09:35:00.000Z", "sessionId": "ses_failed", "threadId": "thr_failed", "turnId": "turn_failed" },
|
||||
{ "id": "msg_failed_agent", "messageId": "msg_failed_agent", "role": "agent", "title": "Code Agent", "text": "测试工程编译失败:缺少受控依赖。", "status": "failed", "createdAt": "2026-06-17T09:35:03.000Z", "sessionId": "ses_failed", "threadId": "thr_failed", "traceId": "trc_failed", "turnId": "turn_failed", "error": { "code": "controlled_dependency_missing", "message": "测试工程编译失败:缺少受控依赖。" }, "runnerTrace": { "traceId": "trc_failed", "status": "failed", "sessionId": "ses_failed", "threadId": "thr_failed", "events": [], "eventCount": 4, "fullTraceLoaded": true, "hasMore": false, "error": { "code": "controlled_dependency_missing", "message": "测试工程编译失败:缺少受控依赖。" } } }
|
||||
{ "id": "msg_failed_agent", "messageId": "msg_failed_agent", "role": "agent", "title": "Code Agent", "text": "测试工程编译失败:缺少受控依赖。", "status": "failed", "createdAt": "2026-06-17T09:35:03.000Z", "sessionId": "ses_failed", "threadId": "thr_failed", "traceId": "trc_failed", "turnId": "turn_failed", "timing": { "startedAt": "2026-06-17T09:35:03.000Z", "lastEventAt": "2026-06-17T09:35:05.000Z", "finishedAt": "2026-06-17T09:35:05.000Z", "durationMs": 2000, "valuesRedacted": true }, "startedAt": "2026-06-17T09:35:03.000Z", "lastEventAt": "2026-06-17T09:35:05.000Z", "finishedAt": "2026-06-17T09:35:05.000Z", "durationMs": 2000, "error": { "code": "controlled_dependency_missing", "message": "测试工程编译失败:缺少受控依赖。" }, "runnerTrace": { "traceId": "trc_failed", "status": "failed", "sessionId": "ses_failed", "threadId": "thr_failed", "timing": { "startedAt": "2026-06-17T09:35:03.000Z", "lastEventAt": "2026-06-17T09:35:05.000Z", "finishedAt": "2026-06-17T09:35:05.000Z", "durationMs": 2000, "valuesRedacted": true }, "startedAt": "2026-06-17T09:35:03.000Z", "lastEventAt": "2026-06-17T09:35:05.000Z", "finishedAt": "2026-06-17T09:35:05.000Z", "durationMs": 2000, "events": [], "eventCount": 4, "fullTraceLoaded": true, "hasMore": false, "error": { "code": "controlled_dependency_missing", "message": "测试工程编译失败:缺少受控依赖。" } } }
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -80,15 +80,15 @@
|
||||
"firstUserMessagePreview": "取消态验证",
|
||||
"messages": [
|
||||
{ "id": "msg_canceled_user", "messageId": "msg_canceled_user", "role": "user", "title": "用户", "text": "取消态验证", "status": "sent", "createdAt": "2026-06-17T09:33:00.000Z", "sessionId": "ses_canceled", "threadId": "thr_canceled", "turnId": "turn_canceled" },
|
||||
{ "id": "msg_canceled_agent", "messageId": "msg_canceled_agent", "role": "agent", "title": "Code Agent", "text": "运行已取消。", "status": "canceled", "createdAt": "2026-06-17T09:33:02.000Z", "sessionId": "ses_canceled", "threadId": "thr_canceled", "traceId": "trc_canceled", "turnId": "turn_canceled", "runnerTrace": { "traceId": "trc_canceled", "status": "canceled", "sessionId": "ses_canceled", "threadId": "thr_canceled", "events": [{ "seq": 1, "createdAt": "2026-06-17T09:33:02.000Z", "label": "agentrun:terminal:canceled", "status": "canceled", "message": "用户取消运行。", "terminal": true }], "eventCount": 1, "fullTraceLoaded": true, "hasMore": false } }
|
||||
{ "id": "msg_canceled_agent", "messageId": "msg_canceled_agent", "role": "agent", "title": "Code Agent", "text": "运行已取消。", "status": "canceled", "createdAt": "2026-06-17T09:33:02.000Z", "sessionId": "ses_canceled", "threadId": "thr_canceled", "traceId": "trc_canceled", "turnId": "turn_canceled", "timing": { "startedAt": "2026-06-17T09:33:02.000Z", "lastEventAt": "2026-06-17T09:33:02.000Z", "finishedAt": "2026-06-17T09:33:02.000Z", "durationMs": 0, "valuesRedacted": true }, "startedAt": "2026-06-17T09:33:02.000Z", "lastEventAt": "2026-06-17T09:33:02.000Z", "finishedAt": "2026-06-17T09:33:02.000Z", "durationMs": 0, "runnerTrace": { "traceId": "trc_canceled", "status": "canceled", "sessionId": "ses_canceled", "threadId": "thr_canceled", "timing": { "startedAt": "2026-06-17T09:33:02.000Z", "lastEventAt": "2026-06-17T09:33:02.000Z", "finishedAt": "2026-06-17T09:33:02.000Z", "durationMs": 0, "valuesRedacted": true }, "startedAt": "2026-06-17T09:33:02.000Z", "lastEventAt": "2026-06-17T09:33:02.000Z", "finishedAt": "2026-06-17T09:33:02.000Z", "durationMs": 0, "events": [{ "seq": 1, "createdAt": "2026-06-17T09:33:02.000Z", "label": "agentrun:terminal:canceled", "status": "canceled", "message": "用户取消运行。", "terminal": true }], "eventCount": 1, "fullTraceLoaded": true, "hasMore": false } }
|
||||
]
|
||||
}
|
||||
],
|
||||
"traces": {
|
||||
"trc_running": { "traceId": "trc_running", "status": "running", "sessionId": "ses_running", "threadId": "thr_running", "turnId": "turn_running", "events": [{ "seq": 1, "createdAt": "2026-06-17T09:39:42.000Z", "label": "agentrun:assistant:message", "type": "assistant_message", "status": "running", "message": "正在检查测试工程。" }, { "seq": 2, "createdAt": "2026-06-17T09:39:45.000Z", "label": "agentrun:tool:commandExecution:started", "type": "tool_call", "status": "running", "itemId": "tool_running_check", "toolName": "commandExecution", "command": "bun run check:tsc" }], "eventCount": 2, "fullTraceLoaded": false, "hasMore": false, "agentRun": { "adapter": "agentrun-v02", "runId": "run_running", "commandId": "cmd_running", "runnerId": "runner_d601", "namespace": "hwlab-v03", "backendProfile": "codex-api", "status": "running", "valuesPrinted": false } },
|
||||
"trc_completed": { "traceId": "trc_completed", "status": "completed", "sessionId": "ses_completed", "threadId": "thr_completed", "turnId": "turn_completed", "events": [{ "seq": 1, "createdAt": "2026-06-17T09:37:03.000Z", "label": "agentrun:backend:token_count", "type": "event", "status": "completed" }, { "seq": 2, "createdAt": "2026-06-17T09:37:04.000Z", "label": "agentrun:tool:commandExecution:completed", "type": "tool_call", "status": "completed", "itemId": "tool_completed_build", "toolName": "commandExecution", "command": "bun run build", "stdoutSummary": "build completed", "exitCode": 0 }, { "seq": 3, "createdAt": "2026-06-17T09:37:07.000Z", "label": "agentrun:assistant:message", "type": "assistant_message", "status": "completed", "replyAuthority": true, "final": true, "message": "构建和 Trace 渲染检查完成。" }, { "seq": 4, "createdAt": "2026-06-17T09:37:08.000Z", "label": "agentrun:terminal:completed", "status": "completed", "terminal": true }], "eventCount": 4, "fullTraceLoaded": true, "hasMore": false, "finalResponse": { "text": "构建和 Trace 渲染检查完成。" }, "assistantText": "构建和 Trace 渲染检查完成。", "agentRun": { "adapter": "agentrun-v02", "runId": "run_completed", "commandId": "cmd_completed", "runnerId": "runner_d601", "namespace": "hwlab-v03", "backendProfile": "codex-api", "status": "completed", "valuesPrinted": false } },
|
||||
"trc_failed": { "traceId": "trc_failed", "status": "failed", "sessionId": "ses_failed", "threadId": "thr_failed", "turnId": "turn_failed", "events": [{ "seq": 1, "createdAt": "2026-06-17T09:35:04.000Z", "label": "agentrun:tool:commandExecution:completed", "type": "tool_call", "status": "blocked", "itemId": "tool_failed_build", "toolName": "commandExecution", "command": "bun run build", "stderrSummary": "missing controlled dependency", "exitCode": 1 }, { "seq": 2, "createdAt": "2026-06-17T09:35:05.000Z", "label": "agentrun:terminal:failed", "status": "failed", "message": "测试工程编译失败:缺少受控依赖。", "terminal": true, "errorCode": "controlled_dependency_missing" }], "eventCount": 2, "fullTraceLoaded": true, "hasMore": false, "assistantText": "测试工程编译失败:缺少受控依赖。", "error": { "code": "controlled_dependency_missing", "message": "测试工程编译失败:缺少受控依赖。" }, "agentRun": { "adapter": "agentrun-v02", "runId": "run_failed", "commandId": "cmd_failed", "runnerId": "runner_d601", "namespace": "hwlab-v03", "backendProfile": "codex-api", "status": "failed", "valuesPrinted": false } },
|
||||
"trc_canceled": { "traceId": "trc_canceled", "status": "canceled", "sessionId": "ses_canceled", "threadId": "thr_canceled", "turnId": "turn_canceled", "events": [{ "seq": 1, "createdAt": "2026-06-17T09:33:02.000Z", "label": "agentrun:terminal:canceled", "status": "canceled", "message": "用户取消运行。", "terminal": true }], "eventCount": 1, "fullTraceLoaded": true, "hasMore": false, "assistantText": "运行已取消。", "agentRun": { "adapter": "agentrun-v02", "runId": "run_canceled", "commandId": "cmd_canceled", "runnerId": "runner_d601", "namespace": "hwlab-v03", "backendProfile": "codex-api", "status": "canceled", "valuesPrinted": false } }
|
||||
"trc_running": { "traceId": "trc_running", "status": "running", "sessionId": "ses_running", "threadId": "thr_running", "turnId": "turn_running", "timing": { "startedAt": "2026-06-17T09:39:41.000Z", "lastEventAt": "2026-06-17T09:39:45.000Z", "finishedAt": null, "durationMs": 4000, "valuesRedacted": true }, "startedAt": "2026-06-17T09:39:41.000Z", "lastEventAt": "2026-06-17T09:39:45.000Z", "finishedAt": null, "durationMs": 4000, "events": [{ "seq": 1, "createdAt": "2026-06-17T09:39:42.000Z", "label": "agentrun:assistant:message", "type": "assistant_message", "status": "running", "message": "正在检查测试工程。" }, { "seq": 2, "createdAt": "2026-06-17T09:39:45.000Z", "label": "agentrun:tool:commandExecution:started", "type": "tool_call", "status": "running", "itemId": "tool_running_check", "toolName": "commandExecution", "command": "bun run check:tsc" }], "eventCount": 2, "fullTraceLoaded": false, "hasMore": false, "agentRun": { "adapter": "agentrun-v02", "runId": "run_running", "commandId": "cmd_running", "runnerId": "runner_d601", "namespace": "hwlab-v03", "backendProfile": "codex-api", "status": "running", "valuesPrinted": false } },
|
||||
"trc_completed": { "traceId": "trc_completed", "status": "completed", "sessionId": "ses_completed", "threadId": "thr_completed", "turnId": "turn_completed", "timing": { "startedAt": "2026-06-17T09:37:02.000Z", "lastEventAt": "2026-06-17T09:37:08.000Z", "finishedAt": "2026-06-17T09:37:08.000Z", "durationMs": 6000, "valuesRedacted": true }, "startedAt": "2026-06-17T09:37:02.000Z", "lastEventAt": "2026-06-17T09:37:08.000Z", "finishedAt": "2026-06-17T09:37:08.000Z", "durationMs": 6000, "events": [{ "seq": 1, "createdAt": "2026-06-17T09:37:03.000Z", "label": "agentrun:backend:token_count", "type": "event", "status": "completed" }, { "seq": 2, "createdAt": "2026-06-17T09:37:04.000Z", "label": "agentrun:tool:commandExecution:completed", "type": "tool_call", "status": "completed", "itemId": "tool_completed_build", "toolName": "commandExecution", "command": "bun run build", "stdoutSummary": "build completed", "exitCode": 0 }, { "seq": 3, "createdAt": "2026-06-17T09:37:07.000Z", "label": "agentrun:assistant:message", "type": "assistant_message", "status": "completed", "replyAuthority": true, "final": true, "message": "构建和 Trace 渲染检查完成。" }, { "seq": 4, "createdAt": "2026-06-17T09:37:08.000Z", "label": "agentrun:terminal:completed", "status": "completed", "terminal": true }], "eventCount": 4, "fullTraceLoaded": true, "hasMore": false, "finalResponse": { "text": "构建和 Trace 渲染检查完成。" }, "assistantText": "构建和 Trace 渲染检查完成。", "agentRun": { "adapter": "agentrun-v02", "runId": "run_completed", "commandId": "cmd_completed", "runnerId": "runner_d601", "namespace": "hwlab-v03", "backendProfile": "codex-api", "status": "completed", "valuesPrinted": false } },
|
||||
"trc_failed": { "traceId": "trc_failed", "status": "failed", "sessionId": "ses_failed", "threadId": "thr_failed", "turnId": "turn_failed", "timing": { "startedAt": "2026-06-17T09:35:03.000Z", "lastEventAt": "2026-06-17T09:35:05.000Z", "finishedAt": "2026-06-17T09:35:05.000Z", "durationMs": 2000, "valuesRedacted": true }, "startedAt": "2026-06-17T09:35:03.000Z", "lastEventAt": "2026-06-17T09:35:05.000Z", "finishedAt": "2026-06-17T09:35:05.000Z", "durationMs": 2000, "events": [{ "seq": 1, "createdAt": "2026-06-17T09:35:04.000Z", "label": "agentrun:tool:commandExecution:completed", "type": "tool_call", "status": "blocked", "itemId": "tool_failed_build", "toolName": "commandExecution", "command": "bun run build", "stderrSummary": "missing controlled dependency", "exitCode": 1 }, { "seq": 2, "createdAt": "2026-06-17T09:35:05.000Z", "label": "agentrun:terminal:failed", "status": "failed", "message": "测试工程编译失败:缺少受控依赖。", "terminal": true, "errorCode": "controlled_dependency_missing" }], "eventCount": 2, "fullTraceLoaded": true, "hasMore": false, "assistantText": "测试工程编译失败:缺少受控依赖。", "error": { "code": "controlled_dependency_missing", "message": "测试工程编译失败:缺少受控依赖。" }, "agentRun": { "adapter": "agentrun-v02", "runId": "run_failed", "commandId": "cmd_failed", "runnerId": "runner_d601", "namespace": "hwlab-v03", "backendProfile": "codex-api", "status": "failed", "valuesPrinted": false } },
|
||||
"trc_canceled": { "traceId": "trc_canceled", "status": "canceled", "sessionId": "ses_canceled", "threadId": "thr_canceled", "turnId": "turn_canceled", "timing": { "startedAt": "2026-06-17T09:33:02.000Z", "lastEventAt": "2026-06-17T09:33:02.000Z", "finishedAt": "2026-06-17T09:33:02.000Z", "durationMs": 0, "valuesRedacted": true }, "startedAt": "2026-06-17T09:33:02.000Z", "lastEventAt": "2026-06-17T09:33:02.000Z", "finishedAt": "2026-06-17T09:33:02.000Z", "durationMs": 0, "events": [{ "seq": 1, "createdAt": "2026-06-17T09:33:02.000Z", "label": "agentrun:terminal:canceled", "status": "canceled", "message": "用户取消运行。", "terminal": true }], "eventCount": 1, "fullTraceLoaded": true, "hasMore": false, "assistantText": "运行已取消。", "agentRun": { "adapter": "agentrun-v02", "runId": "run_canceled", "commandId": "cmd_canceled", "runnerId": "runner_d601", "namespace": "hwlab-v03", "backendProfile": "codex-api", "status": "canceled", "valuesPrinted": false } }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ export const selectors = {
|
||||
commandSend: "#command-send",
|
||||
conversationList: "#conversation-list",
|
||||
messageCard: ".message-card",
|
||||
messageTimingMeta: ".message-timing-meta",
|
||||
traceTimeline: ".trace-timeline",
|
||||
traceRow: ".trace-render-row",
|
||||
messageDetailDialog: "#message-detail-dialog"
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
import { expect, gotoWorkbench, saveScreenshot, test } from "../fixtures/test";
|
||||
import { selectors, sessionTab } from "../fixtures/selectors";
|
||||
|
||||
test("Code Agent message headers render canonical timing metadata", async ({ page }, testInfo) => {
|
||||
await gotoWorkbench(page, "/workbench/sessions/ses_running");
|
||||
|
||||
const running = page.locator(`${selectors.messageCard}[data-role="agent"][data-status="running"]`).first();
|
||||
await expect(running.locator(selectors.messageTimingMeta)).toContainText(/最近\s+.+前/u);
|
||||
await expect(running.locator(selectors.messageTimingMeta)).toContainText("耗时 4 秒");
|
||||
await expect(running.locator(selectors.messageTimingMeta)).toHaveAttribute("aria-label", /最近事件:.+前;总耗时:4 秒/u);
|
||||
|
||||
await page.locator(sessionTab("ses_completed")).click();
|
||||
const completed = page.locator(`${selectors.messageCard}[data-role="agent"][data-status="completed"]`).first();
|
||||
await expect(completed.locator(selectors.messageTimingMeta)).toContainText("耗时 6 秒");
|
||||
await expect(completed.locator(selectors.messageTimingMeta)).not.toContainText("最近");
|
||||
|
||||
await page.locator(sessionTab("ses_failed")).click();
|
||||
const failed = page.locator(`${selectors.messageCard}[data-role="agent"][data-status="failed"]`).first();
|
||||
await expect(failed.locator(selectors.messageTimingMeta)).toContainText("耗时 2 秒");
|
||||
await expect(failed.locator(selectors.messageTimingMeta)).not.toContainText("最近");
|
||||
|
||||
await page.locator(sessionTab("ses_canceled")).click();
|
||||
const canceled = page.locator(`${selectors.messageCard}[data-role="agent"][data-status="canceled"]`).first();
|
||||
await expect(canceled.locator(selectors.messageTimingMeta)).toContainText("耗时 0 秒");
|
||||
await expect(canceled.locator(selectors.messageTimingMeta)).not.toContainText("最近");
|
||||
|
||||
await expect(page.locator(`${selectors.messageCard}[data-role="user"] ${selectors.messageTimingMeta}`)).toHaveCount(0);
|
||||
await saveScreenshot(page, testInfo, "message-timing-headers");
|
||||
});
|
||||
Reference in New Issue
Block a user