{ "config": { "configFile": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\playwright.config.ts", "rootDir": "G:/ZClaw_openfang/desktop/tests/e2e/specs", "forbidOnly": false, "fullyParallel": true, "globalSetup": null, "globalTeardown": null, "globalTimeout": 0, "grep": {}, "grepInvert": null, "maxFailures": 0, "metadata": { "actualWorkers": 8 }, "preserveOutput": "always", "projects": [ { "outputDir": "G:/ZClaw_openfang/desktop/tests/e2e/test-results/artifacts", "repeatEach": 1, "retries": 0, "metadata": { "actualWorkers": 8 }, "id": "chromium", "name": "chromium", "testDir": "G:/ZClaw_openfang/desktop/tests/e2e/specs", "testIgnore": [], "testMatch": [ "**/*.@(spec|test).?(c|m)[jt]s?(x)" ], "timeout": 120000 }, { "outputDir": "G:/ZClaw_openfang/desktop/tests/e2e/test-results/artifacts", "repeatEach": 1, "retries": 0, "metadata": { "actualWorkers": 8 }, "id": "data-flow", "name": "data-flow", "testDir": "G:/ZClaw_openfang/desktop/tests/e2e/specs", "testIgnore": [], "testMatch": [ "/data-flow\\.spec\\.ts/" ], "timeout": 120000 }, { "outputDir": "G:/ZClaw_openfang/desktop/tests/e2e/test-results/artifacts", "repeatEach": 1, "retries": 0, "metadata": { "actualWorkers": 8 }, "id": "store-state", "name": "store-state", "testDir": "G:/ZClaw_openfang/desktop/tests/e2e/specs", "testIgnore": [], "testMatch": [ "/store-state\\.spec\\.ts/" ], "timeout": 120000 }, { "outputDir": "G:/ZClaw_openfang/desktop/tests/e2e/test-results/artifacts", "repeatEach": 1, "retries": 0, "metadata": { "actualWorkers": 8 }, "id": "edge-cases", "name": "edge-cases", "testDir": "G:/ZClaw_openfang/desktop/tests/e2e/specs", "testIgnore": [], "testMatch": [ "/edge-cases\\.spec\\.ts/" ], "timeout": 180000 } ], "quiet": false, "reporter": [ [ "html", { "outputFolder": "test-results/html-report" } ], [ "json", { "outputFile": "test-results/results.json" } ], [ "list", null ] ], "reportSlowTests": { "max": 5, "threshold": 300000 }, "runAgents": "none", "shard": null, "tags": [], "updateSnapshots": "missing", "updateSourceMethod": "patch", "version": "1.58.2", "workers": 8, "webServer": { "command": "pnpm dev", "url": "http://localhost:1420", "reuseExistingServer": true, "timeout": 120000, "stdout": "pipe", "stderr": "pipe" } }, "suites": [ { "title": "app-verification.spec.ts", "file": "app-verification.spec.ts", "column": 0, "line": 0, "specs": [], "suites": [ { "title": "ZCLAW 前端功能验证", "file": "app-verification.spec.ts", "line": 27, "column": 6, "specs": [], "suites": [ { "title": "1. 应用基础渲染", "file": "app-verification.spec.ts", "line": 33, "column": 8, "specs": [ { "title": "应用容器正确渲染", "ok": false, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 0, "parallelIndex": 0, "status": "failed", "duration": 14265, "error": { "message": "TimeoutError: page.waitForSelector: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('.h-screen') to be visible\u001b[22m\n", "stack": "TimeoutError: page.waitForSelector: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('.h-screen') to be visible\u001b[22m\n\n at waitForAppReady (G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts:16:14)\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts:30:5", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts", "column": 14, "line": 16 }, "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForLoadState(\u001b[32m'networkidle'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[90m// 等待主应用容器出现\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForSelector(\u001b[32m'.h-screen'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m10000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m }\n \u001b[90m 18 |\u001b[39m\n \u001b[90m 19 |\u001b[39m \u001b[90m// 辅助函数:截图并保存\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts", "column": 14, "line": 16 }, "message": "TimeoutError: page.waitForSelector: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('.h-screen') to be visible\u001b[22m\n\n\n 14 | await page.waitForLoadState('networkidle');\n 15 | // 等待主应用容器出现\n> 16 | await page.waitForSelector('.h-screen', { timeout: 10000 });\n | ^\n 17 | }\n 18 |\n 19 | // 辅助函数:截图并保存\n at waitForAppReady (G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts:16:14)\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts:30:5" } ], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:18.861Z", "annotations": [], "attachments": [ { "name": "screenshot", "contentType": "image/png", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\app-verification-ZCLAW-前端功能验证-1-应用基础渲染-应用容器正确渲染-chromium\\test-failed-1.png" }, { "name": "video", "contentType": "video/webm", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\app-verification-ZCLAW-前端功能验证-1-应用基础渲染-应用容器正确渲染-chromium\\video.webm" }, { "name": "error-context", "contentType": "text/markdown", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\app-verification-ZCLAW-前端功能验证-1-应用基础渲染-应用容器正确渲染-chromium\\error-context.md" } ], "errorLocation": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts", "column": 14, "line": 16 } } ], "status": "unexpected" } ], "id": "91fd37acece20ae22b70-49dd5c3740cccbc8289a", "file": "app-verification.spec.ts", "line": 34, "column": 5 }, { "title": "页面标题正确", "ok": false, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 1, "parallelIndex": 1, "status": "failed", "duration": 14296, "error": { "message": "TimeoutError: page.waitForSelector: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('.h-screen') to be visible\u001b[22m\n", "stack": "TimeoutError: page.waitForSelector: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('.h-screen') to be visible\u001b[22m\n\n at waitForAppReady (G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts:16:14)\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts:30:5", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts", "column": 14, "line": 16 }, "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForLoadState(\u001b[32m'networkidle'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[90m// 等待主应用容器出现\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForSelector(\u001b[32m'.h-screen'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m10000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m }\n \u001b[90m 18 |\u001b[39m\n \u001b[90m 19 |\u001b[39m \u001b[90m// 辅助函数:截图并保存\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts", "column": 14, "line": 16 }, "message": "TimeoutError: page.waitForSelector: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('.h-screen') to be visible\u001b[22m\n\n\n 14 | await page.waitForLoadState('networkidle');\n 15 | // 等待主应用容器出现\n> 16 | await page.waitForSelector('.h-screen', { timeout: 10000 });\n | ^\n 17 | }\n 18 |\n 19 | // 辅助函数:截图并保存\n at waitForAppReady (G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts:16:14)\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts:30:5" } ], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:18.814Z", "annotations": [], "attachments": [ { "name": "screenshot", "contentType": "image/png", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\app-verification-ZCLAW-前端功能验证-1-应用基础渲染-页面标题正确-chromium\\test-failed-1.png" }, { "name": "video", "contentType": "video/webm", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\app-verification-ZCLAW-前端功能验证-1-应用基础渲染-页面标题正确-chromium\\video.webm" }, { "name": "error-context", "contentType": "text/markdown", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\app-verification-ZCLAW-前端功能验证-1-应用基础渲染-页面标题正确-chromium\\error-context.md" } ], "errorLocation": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts", "column": 14, "line": 16 } } ], "status": "unexpected" } ], "id": "91fd37acece20ae22b70-abf1781b0710d17c3f2a", "file": "app-verification.spec.ts", "line": 50, "column": 5 } ] }, { "title": "2. Sidebar 侧边栏导航", "file": "app-verification.spec.ts", "line": 55, "column": 8, "specs": [ { "title": "侧边栏可见并包含导航项", "ok": false, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 2, "parallelIndex": 2, "status": "failed", "duration": 13897, "error": { "message": "TimeoutError: page.waitForSelector: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('.h-screen') to be visible\u001b[22m\n", "stack": "TimeoutError: page.waitForSelector: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('.h-screen') to be visible\u001b[22m\n\n at waitForAppReady (G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts:16:14)\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts:30:5", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts", "column": 14, "line": 16 }, "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForLoadState(\u001b[32m'networkidle'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[90m// 等待主应用容器出现\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForSelector(\u001b[32m'.h-screen'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m10000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m }\n \u001b[90m 18 |\u001b[39m\n \u001b[90m 19 |\u001b[39m \u001b[90m// 辅助函数:截图并保存\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts", "column": 14, "line": 16 }, "message": "TimeoutError: page.waitForSelector: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('.h-screen') to be visible\u001b[22m\n\n\n 14 | await page.waitForLoadState('networkidle');\n 15 | // 等待主应用容器出现\n> 16 | await page.waitForSelector('.h-screen', { timeout: 10000 });\n | ^\n 17 | }\n 18 |\n 19 | // 辅助函数:截图并保存\n at waitForAppReady (G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts:16:14)\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts:30:5" } ], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:18.874Z", "annotations": [], "attachments": [ { "name": "screenshot", "contentType": "image/png", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\app-verification-ZCLAW-前端功能验证-2-Sidebar-侧边栏导航-侧边栏可见并包含导航项-chromium\\test-failed-1.png" }, { "name": "video", "contentType": "video/webm", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\app-verification-ZCLAW-前端功能验证-2-Sidebar-侧边栏导航-侧边栏可见并包含导航项-chromium\\video.webm" }, { "name": "error-context", "contentType": "text/markdown", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\app-verification-ZCLAW-前端功能验证-2-Sidebar-侧边栏导航-侧边栏可见并包含导航项-chromium\\error-context.md" } ], "errorLocation": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts", "column": 14, "line": 16 } } ], "status": "unexpected" } ], "id": "91fd37acece20ae22b70-775813656fed780e4865", "file": "app-verification.spec.ts", "line": 56, "column": 5 }, { "title": "导航切换功能", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 3, "parallelIndex": 3, "status": "passed", "duration": 3340, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:18.769Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-60dd9042a3729ef757d6", "file": "app-verification.spec.ts", "line": 78, "column": 5 }, { "title": "设置按钮可用", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 4, "parallelIndex": 4, "status": "passed", "duration": 3406, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:18.778Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-9ceb05ab3b71b34808d3", "file": "app-verification.spec.ts", "line": 94, "column": 5 } ] }, { "title": "3. ChatArea 聊天功能", "file": "app-verification.spec.ts", "line": 107, "column": 8, "specs": [ { "title": "聊天区域渲染", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 5, "parallelIndex": 5, "status": "passed", "duration": 3048, "errors": [], "stdout": [ { "text": "Chat input found: true\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:18.785Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-b7108a2c388d349a1c85", "file": "app-verification.spec.ts", "line": 108, "column": 5 }, { "title": "消息发送功能", "ok": false, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 6, "parallelIndex": 6, "status": "failed", "duration": 14043, "error": { "message": "TimeoutError: page.waitForSelector: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('.h-screen') to be visible\u001b[22m\n", "stack": "TimeoutError: page.waitForSelector: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('.h-screen') to be visible\u001b[22m\n\n at waitForAppReady (G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts:16:14)\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts:30:5", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts", "column": 14, "line": 16 }, "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForLoadState(\u001b[32m'networkidle'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[90m// 等待主应用容器出现\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForSelector(\u001b[32m'.h-screen'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m10000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m }\n \u001b[90m 18 |\u001b[39m\n \u001b[90m 19 |\u001b[39m \u001b[90m// 辅助函数:截图并保存\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts", "column": 14, "line": 16 }, "message": "TimeoutError: page.waitForSelector: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('.h-screen') to be visible\u001b[22m\n\n\n 14 | await page.waitForLoadState('networkidle');\n 15 | // 等待主应用容器出现\n> 16 | await page.waitForSelector('.h-screen', { timeout: 10000 });\n | ^\n 17 | }\n 18 |\n 19 | // 辅助函数:截图并保存\n at waitForAppReady (G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts:16:14)\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts:30:5" } ], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:18.848Z", "annotations": [], "attachments": [ { "name": "screenshot", "contentType": "image/png", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\app-verification-ZCLAW-前端功能验证-3-ChatArea-聊天功能-消息发送功能-chromium\\test-failed-1.png" }, { "name": "video", "contentType": "video/webm", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\app-verification-ZCLAW-前端功能验证-3-ChatArea-聊天功能-消息发送功能-chromium\\video.webm" }, { "name": "error-context", "contentType": "text/markdown", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\app-verification-ZCLAW-前端功能验证-3-ChatArea-聊天功能-消息发送功能-chromium\\error-context.md" } ], "errorLocation": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts", "column": 14, "line": 16 } } ], "status": "unexpected" } ], "id": "91fd37acece20ae22b70-3e0629d374dfd7c691dd", "file": "app-verification.spec.ts", "line": 128, "column": 5 }, { "title": "会话列表渲染", "ok": false, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 7, "parallelIndex": 7, "status": "failed", "duration": 14275, "error": { "message": "TimeoutError: page.waitForSelector: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('.h-screen') to be visible\u001b[22m\n", "stack": "TimeoutError: page.waitForSelector: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('.h-screen') to be visible\u001b[22m\n\n at waitForAppReady (G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts:16:14)\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts:30:5", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts", "column": 14, "line": 16 }, "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForLoadState(\u001b[32m'networkidle'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[90m// 等待主应用容器出现\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForSelector(\u001b[32m'.h-screen'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m10000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m }\n \u001b[90m 18 |\u001b[39m\n \u001b[90m 19 |\u001b[39m \u001b[90m// 辅助函数:截图并保存\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts", "column": 14, "line": 16 }, "message": "TimeoutError: page.waitForSelector: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('.h-screen') to be visible\u001b[22m\n\n\n 14 | await page.waitForLoadState('networkidle');\n 15 | // 等待主应用容器出现\n> 16 | await page.waitForSelector('.h-screen', { timeout: 10000 });\n | ^\n 17 | }\n 18 |\n 19 | // 辅助函数:截图并保存\n at waitForAppReady (G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts:16:14)\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts:30:5" } ], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:18.760Z", "annotations": [], "attachments": [ { "name": "screenshot", "contentType": "image/png", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\app-verification-ZCLAW-前端功能验证-3-ChatArea-聊天功能-会话列表渲染-chromium\\test-failed-1.png" }, { "name": "video", "contentType": "video/webm", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\app-verification-ZCLAW-前端功能验证-3-ChatArea-聊天功能-会话列表渲染-chromium\\video.webm" }, { "name": "error-context", "contentType": "text/markdown", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\app-verification-ZCLAW-前端功能验证-3-ChatArea-聊天功能-会话列表渲染-chromium\\error-context.md" } ], "errorLocation": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\app-verification.spec.ts", "column": 14, "line": 16 } } ], "status": "unexpected" } ], "id": "91fd37acece20ae22b70-b7e0ddad7ed0b67656b6", "file": "app-verification.spec.ts", "line": 148, "column": 5 } ] }, { "title": "4. Hands 系统UI", "file": "app-verification.spec.ts", "line": 159, "column": 8, "specs": [ { "title": "Hands 列表渲染", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 5, "parallelIndex": 5, "status": "passed", "duration": 1272, "errors": [], "stdout": [ { "text": "Found 0 hand cards\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:22.166Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-64da3b28dc87e3b848e6", "file": "app-verification.spec.ts", "line": 170, "column": 5 }, { "title": "Hand 触发按钮", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 4, "parallelIndex": 4, "status": "passed", "duration": 1321, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:22.501Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-af912f60ef3aeff1e1b2", "file": "app-verification.spec.ts", "line": 186, "column": 5 } ] }, { "title": "5. Workflow/Scheduler 面板", "file": "app-verification.spec.ts", "line": 195, "column": 8, "specs": [ { "title": "Scheduler 面板渲染", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 3, "parallelIndex": 3, "status": "passed", "duration": 1363, "errors": [], "stdout": [ { "text": "Task list found: true\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:22.501Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-52aa3250313818874a82", "file": "app-verification.spec.ts", "line": 205, "column": 5 }, { "title": "工作流编辑器", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 5, "parallelIndex": 5, "status": "passed", "duration": 1145, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:23.449Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-e1f19602ad96fbc849c6", "file": "app-verification.spec.ts", "line": 218, "column": 5 } ] }, { "title": "6. Team 协作视图", "file": "app-verification.spec.ts", "line": 229, "column": 8, "specs": [ { "title": "Team 列表和创建", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 4, "parallelIndex": 4, "status": "passed", "duration": 1821, "errors": [], "stdout": [ { "text": "Team create button available\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:23.836Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-1452ff4ab40fcd49ecce", "file": "app-verification.spec.ts", "line": 239, "column": 5 }, { "title": "团队成员显示", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 3, "parallelIndex": 3, "status": "passed", "duration": 1787, "errors": [], "stdout": [ { "text": "Found 0 team members\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:23.879Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-596b39d154685026834e", "file": "app-verification.spec.ts", "line": 253, "column": 5 } ] }, { "title": "7. Swarm Dashboard", "file": "app-verification.spec.ts", "line": 263, "column": 8, "specs": [ { "title": "Swarm 仪表板渲染", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 5, "parallelIndex": 5, "status": "passed", "duration": 1734, "errors": [], "stdout": [ { "text": "Found 0 status indicators\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:24.607Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-b2efd263accb42e6075c", "file": "app-verification.spec.ts", "line": 273, "column": 5 } ] }, { "title": "8. Settings 设置页面", "file": "app-verification.spec.ts", "line": 287, "column": 8, "specs": [ { "title": "设置页面渲染", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 4, "parallelIndex": 4, "status": "passed", "duration": 1877, "errors": [], "stdout": [ { "text": "Found 4 settings tabs\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:25.670Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-6539c4f8acc905308f4e", "file": "app-verification.spec.ts", "line": 297, "column": 5 }, { "title": "通用设置", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 3, "parallelIndex": 3, "status": "passed", "duration": 1883, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:25.681Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-b59f8c7727d96f4d0071", "file": "app-verification.spec.ts", "line": 313, "column": 5 }, { "title": "模型配置", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 5, "parallelIndex": 5, "status": "passed", "duration": 1874, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:26.354Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-c9c23bc778366882e8cf", "file": "app-verification.spec.ts", "line": 323, "column": 5 } ] }, { "title": "9. RightPanel 右侧面板", "file": "app-verification.spec.ts", "line": 340, "column": 8, "specs": [ { "title": "右侧面板渲染", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 4, "parallelIndex": 4, "status": "passed", "duration": 1320, "errors": [], "stdout": [ { "text": "Right panel content found: false\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:27.563Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-69d1bc2adb5ea221871b", "file": "app-verification.spec.ts", "line": 341, "column": 5 } ] }, { "title": "10. 错误处理和边界情况", "file": "app-verification.spec.ts", "line": 357, "column": 8, "specs": [ { "title": "网络错误处理", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 3, "parallelIndex": 3, "status": "passed", "duration": 2316, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:27.580Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-ec5f579ba123087cc4c7", "file": "app-verification.spec.ts", "line": 358, "column": 5 }, { "title": "空状态显示", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 5, "parallelIndex": 5, "status": "passed", "duration": 1189, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:28.241Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-e9f8f57e30b52efca2f9", "file": "app-verification.spec.ts", "line": 374, "column": 5 } ] }, { "title": "11. 响应式布局", "file": "app-verification.spec.ts", "line": 386, "column": 8, "specs": [ { "title": "移动端布局", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 4, "parallelIndex": 4, "status": "passed", "duration": 1695, "errors": [], "stdout": [ { "text": "Mobile menu found: false\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:28.906Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-f2357bc0901f77bab9ef", "file": "app-verification.spec.ts", "line": 387, "column": 5 }, { "title": "平板布局", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 5, "parallelIndex": 5, "status": "passed", "duration": 1729, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:29.443Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-8e6a16c4860f0b9a5b63", "file": "app-verification.spec.ts", "line": 401, "column": 5 }, { "title": "桌面布局", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 3, "parallelIndex": 3, "status": "passed", "duration": 1822, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:29.914Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-f0ba28f74ca7e0386514", "file": "app-verification.spec.ts", "line": 408, "column": 5 } ] }, { "title": "12. 性能检查", "file": "app-verification.spec.ts", "line": 416, "column": 8, "specs": [ { "title": "页面加载性能", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 4, "parallelIndex": 4, "status": "passed", "duration": 2149, "errors": [], "stdout": [ { "text": "Page load time: 916ms\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:30.613Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-1e1038838eee5799028e", "file": "app-verification.spec.ts", "line": 417, "column": 5 }, { "title": "内存使用检查", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 5, "parallelIndex": 5, "status": "passed", "duration": 1263, "errors": [], "stdout": [ { "text": "DOM nodes: 147\n" }, { "text": "Memory used: 23MB\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:31.186Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-2f6f9c2908ad357789e9", "file": "app-verification.spec.ts", "line": 429, "column": 5 } ] } ] }, { "title": "13. 控制台错误检查", "file": "app-verification.spec.ts", "line": 444, "column": 6, "specs": [ { "title": "无 JavaScript 错误", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 3, "parallelIndex": 3, "status": "passed", "duration": 2644, "errors": [], "stdout": [ { "text": "Console errors: 0\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:31.752Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-ed5f146e53d036f87939", "file": "app-verification.spec.ts", "line": 445, "column": 3 }, { "title": "无网络请求失败", "ok": true, "tags": [], "tests": [ { "timeout": 60000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 5, "parallelIndex": 5, "status": "passed", "duration": 3992, "errors": [], "stdout": [ { "text": "Failed requests: 2\n" }, { "text": " - http://localhost:1420/api/health\n" }, { "text": " - http://localhost:1420/api/health\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:32.479Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "91fd37acece20ae22b70-c472ba049aef47c81802", "file": "app-verification.spec.ts", "line": 473, "column": 3 } ] } ] }, { "title": "core-features.spec.ts", "file": "core-features.spec.ts", "column": 0, "line": 0, "specs": [], "suites": [ { "title": "Gateway Connection Tests", "file": "core-features.spec.ts", "line": 27, "column": 6, "specs": [ { "title": "GW-CONN-01: Health check returns correct status", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 8, "parallelIndex": 2, "status": "passed", "duration": 6543, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:34.856Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "4c7e6ccba74c38082eff-00a98b529e56571a16d7", "file": "core-features.spec.ts", "line": 31, "column": 3 }, { "title": "GW-CONN-02: Connection state updates correctly", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 8, "parallelIndex": 2, "status": "passed", "duration": 7005, "errors": [], "stdout": [ { "text": "Connection state: null\n" }, { "text": "\n========================================\n" }, { "text": "ZCLAW Core Feature E2E Tests Complete\n" }, { "text": "========================================\n" }, { "text": "Test Time: 2026-03-25T23:53:48.581Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:41.561Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "4c7e6ccba74c38082eff-56247416f4d62470d667", "file": "core-features.spec.ts", "line": 58, "column": 3 }, { "title": "GW-CONN-03: Models list loads correctly", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 9, "parallelIndex": 6, "status": "passed", "duration": 4530, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:34.910Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "4c7e6ccba74c38082eff-7be69bc6041cefb8bbbd", "file": "core-features.spec.ts", "line": 85, "column": 3 }, { "title": "GW-CONN-04: Agents list loads correctly", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 9, "parallelIndex": 6, "status": "passed", "duration": 4104, "errors": [], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW Core Feature E2E Tests Complete\n" }, { "text": "========================================\n" }, { "text": "Test Time: 2026-03-25T23:53:43.740Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:39.612Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "4c7e6ccba74c38082eff-e538b000706cdbb625f7", "file": "core-features.spec.ts", "line": 112, "column": 3 }, { "title": "GW-CONN-05: Error handling for failed health check", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 10, "parallelIndex": 7, "status": "passed", "duration": 4642, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:34.986Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "4c7e6ccba74c38082eff-2c3bbb4d42ab66aad25a", "file": "core-features.spec.ts", "line": 140, "column": 3 } ] }, { "title": "Chat Message Tests", "file": "core-features.spec.ts", "line": 167, "column": 6, "specs": [ { "title": "CHAT-MSG-01: Send message and receive response", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 10, "parallelIndex": 7, "status": "passed", "duration": 6224, "errors": [], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW Core Feature E2E Tests Complete\n" }, { "text": "========================================\n" }, { "text": "Test Time: 2026-03-25T23:53:46.103Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:39.859Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "4c7e6ccba74c38082eff-bc33e6122e21203b1f7b", "file": "core-features.spec.ts", "line": 171, "column": 3 }, { "title": "CHAT-MSG-02: Message updates store state", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 11, "parallelIndex": 0, "status": "passed", "duration": 8426, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:35.056Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "4c7e6ccba74c38082eff-428751c1a27c810d25bc", "file": "core-features.spec.ts", "line": 211, "column": 3 }, { "title": "CHAT-MSG-03: Streaming response indicator", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 11, "parallelIndex": 0, "status": "passed", "duration": 7821, "errors": [], "stdout": [ { "text": "Is streaming: false\n" }, { "text": "\n========================================\n" }, { "text": "ZCLAW Core Feature E2E Tests Complete\n" }, { "text": "========================================\n" }, { "text": "Test Time: 2026-03-25T23:53:51.690Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:43.852Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "4c7e6ccba74c38082eff-e8eb267dbe5d6b944c33", "file": "core-features.spec.ts", "line": 246, "column": 3 }, { "title": "CHAT-MSG-04: Error handling for failed message", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 12, "parallelIndex": 1, "status": "passed", "duration": 7798, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:35.080Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "4c7e6ccba74c38082eff-1e63c4d4b91978536fc3", "file": "core-features.spec.ts", "line": 280, "column": 3 }, { "title": "CHAT-MSG-05: Multiple messages in sequence", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 12, "parallelIndex": 1, "status": "passed", "duration": 9248, "errors": [], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW Core Feature E2E Tests Complete\n" }, { "text": "========================================\n" }, { "text": "Test Time: 2026-03-25T23:53:52.498Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:43.234Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "4c7e6ccba74c38082eff-5a47c30a876dee9d7f6a", "file": "core-features.spec.ts", "line": 300, "column": 3 } ] }, { "title": "Hands Trigger Tests", "file": "core-features.spec.ts", "line": 335, "column": 6, "specs": [ { "title": "HAND-TRIG-01: Hands list loads correctly", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 4, "parallelIndex": 4, "status": "passed", "duration": 5693, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:32.833Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "4c7e6ccba74c38082eff-6f4fd4a6b4a65bb03f38", "file": "core-features.spec.ts", "line": 348, "column": 3 }, { "title": "HAND-TRIG-02: Activate Hand returns run ID", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 4, "parallelIndex": 4, "status": "passed", "duration": 5463, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:38.547Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "4c7e6ccba74c38082eff-dd671a3ea1ef94931622", "file": "core-features.spec.ts", "line": 373, "column": 3 }, { "title": "HAND-TRIG-03: Hand status transitions", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 4, "parallelIndex": 4, "status": "passed", "duration": 5517, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:44.030Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "4c7e6ccba74c38082eff-de3df0e8a962fced09e7", "file": "core-features.spec.ts", "line": 394, "column": 3 }, { "title": "HAND-TRIG-04: Hand requirements check", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 4, "parallelIndex": 4, "status": "passed", "duration": 5409, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:49.562Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "4c7e6ccba74c38082eff-eb52a71ba9d575f23b87", "file": "core-features.spec.ts", "line": 436, "column": 3 }, { "title": "HAND-TRIG-05: Hand run history", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 4, "parallelIndex": 4, "status": "passed", "duration": 5398, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:54.984Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "4c7e6ccba74c38082eff-e42802f04fdc3e0b2ace", "file": "core-features.spec.ts", "line": 454, "column": 3 }, { "title": "HAND-TRIG-06: Hand approval flow", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 4, "parallelIndex": 4, "status": "passed", "duration": 5548, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:00.396Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "4c7e6ccba74c38082eff-d595d4fb8c9beec7acb6", "file": "core-features.spec.ts", "line": 469, "column": 3 }, { "title": "HAND-TRIG-07: Hand cancellation", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 4, "parallelIndex": 4, "status": "passed", "duration": 5305, "errors": [], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW Core Feature E2E Tests Complete\n" }, { "text": "========================================\n" }, { "text": "Test Time: 2026-03-25T23:54:11.274Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:05.954Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "4c7e6ccba74c38082eff-b0522178e61f72139d0f", "file": "core-features.spec.ts", "line": 489, "column": 3 } ] }, { "title": "Integration Tests", "file": "core-features.spec.ts", "line": 510, "column": 6, "specs": [ { "title": "INT-01: Full workflow - connect, chat, trigger hand", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 3, "parallelIndex": 3, "status": "passed", "duration": 7836, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:34.459Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "4c7e6ccba74c38082eff-53daeba1cff78b6f4bd4", "file": "core-features.spec.ts", "line": 512, "column": 3 }, { "title": "INT-02: State persistence across navigation", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 3, "parallelIndex": 3, "status": "passed", "duration": 10176, "errors": [], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW Core Feature E2E Tests Complete\n" }, { "text": "========================================\n" }, { "text": "Test Time: 2026-03-25T23:53:52.499Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:42.307Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "4c7e6ccba74c38082eff-6db9a428fbbbb6f13174", "file": "core-features.spec.ts", "line": 560, "column": 3 } ] } ] }, { "title": "data-flow.spec.ts", "file": "data-flow.spec.ts", "column": 0, "line": 0, "specs": [], "suites": [ { "title": "聊天数据流验证", "file": "data-flow.spec.ts", "line": 32, "column": 6, "specs": [ { "title": "CHAT-DF-01: 发送消息完整数据流", "ok": false, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 5, "parallelIndex": 5, "status": "failed", "duration": 66624, "error": { "message": "TimeoutError: page.waitForRequest: Timeout 30000ms exceeded while waiting for event \"request\"\n=========================== logs ===========================\nwaiting for request \"**/api/chat**\"\n============================================================", "stack": "TimeoutError: page.waitForRequest: Timeout 30000ms exceeded while waiting for event \"request\"\n=========================== logs ===========================\nwaiting for request \"**/api/chat**\"\n============================================================\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\utils\\user-actions.ts:197:20\n at Object.sendChatMessage (G:\\ZClaw_openfang\\desktop\\tests\\e2e\\utils\\user-actions.ts:195:23)\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\data-flow.spec.ts:60:38", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\utils\\user-actions.ts", "column": 20, "line": 197 }, "snippet": "\u001b[90m at \u001b[39m..\\utils\\user-actions.ts:197\n\n\u001b[0m \u001b[90m 195 |\u001b[39m \u001b[36mconst\u001b[39m [request] \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m.\u001b[39mall([\n \u001b[90m 196 |\u001b[39m page\u001b[33m.\u001b[39mwaitForRequest(\u001b[32m'**/api/agents/*/message**'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m options\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mtimeout \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[35m30000\u001b[39m })\u001b[33m.\u001b[39m\u001b[36mcatch\u001b[39m(\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 197 |\u001b[39m () \u001b[33m=>\u001b[39m page\u001b[33m.\u001b[39mwaitForRequest(\u001b[32m'**/api/chat**'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m options\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mtimeout \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[35m30000\u001b[39m })\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 198 |\u001b[39m )\u001b[33m,\u001b[39m\n \u001b[90m 199 |\u001b[39m sendButton\u001b[33m.\u001b[39mfirst()\u001b[33m.\u001b[39mclick()\u001b[33m,\u001b[39m\n \u001b[90m 200 |\u001b[39m ])\u001b[33m;\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\utils\\user-actions.ts", "column": 20, "line": 197 }, "message": "TimeoutError: page.waitForRequest: Timeout 30000ms exceeded while waiting for event \"request\"\n=========================== logs ===========================\nwaiting for request \"**/api/chat**\"\n============================================================\n\n at ..\\utils\\user-actions.ts:197\n\n 195 | const [request] = await Promise.all([\n 196 | page.waitForRequest('**/api/agents/*/message**', { timeout: options?.timeout ?? 30000 }).catch(\n> 197 | () => page.waitForRequest('**/api/chat**', { timeout: options?.timeout ?? 30000 })\n | ^\n 198 | ),\n 199 | sendButton.first().click(),\n 200 | ]);\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\utils\\user-actions.ts:197:20\n at Object.sendChatMessage (G:\\ZClaw_openfang\\desktop\\tests\\e2e\\utils\\user-actions.ts:195:23)\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\data-flow.spec.ts:60:38" } ], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW 数据流验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:54:43.196Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:36.546Z", "annotations": [], "attachments": [ { "name": "screenshot", "contentType": "image/png", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\data-flow-聊天数据流验证-CHAT-DF-01-发送消息完整数据流-chromium\\test-failed-1.png" }, { "name": "video", "contentType": "video/webm", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\data-flow-聊天数据流验证-CHAT-DF-01-发送消息完整数据流-chromium\\video.webm" }, { "name": "error-context", "contentType": "text/markdown", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\data-flow-聊天数据流验证-CHAT-DF-01-发送消息完整数据流-chromium\\error-context.md" } ], "errorLocation": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\utils\\user-actions.ts", "column": 20, "line": 197 } } ], "status": "unexpected" } ], "id": "bdcac940a81c3235ce13-529df80525619b807bdd", "file": "data-flow.spec.ts", "line": 41, "column": 3 }, { "title": "CHAT-DF-02: 流式响应数据流", "ok": false, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 18, "parallelIndex": 5, "status": "failed", "duration": 67568, "error": { "message": "TimeoutError: page.waitForRequest: Timeout 30000ms exceeded while waiting for event \"request\"\n=========================== logs ===========================\nwaiting for request \"**/api/chat**\"\n============================================================", "stack": "TimeoutError: page.waitForRequest: Timeout 30000ms exceeded while waiting for event \"request\"\n=========================== logs ===========================\nwaiting for request \"**/api/chat**\"\n============================================================\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\utils\\user-actions.ts:197:20\n at Object.sendChatMessage (G:\\ZClaw_openfang\\desktop\\tests\\e2e\\utils\\user-actions.ts:195:23)\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\data-flow.spec.ts:93:5", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\utils\\user-actions.ts", "column": 20, "line": 197 }, "snippet": "\u001b[90m at \u001b[39m..\\utils\\user-actions.ts:197\n\n\u001b[0m \u001b[90m 195 |\u001b[39m \u001b[36mconst\u001b[39m [request] \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m.\u001b[39mall([\n \u001b[90m 196 |\u001b[39m page\u001b[33m.\u001b[39mwaitForRequest(\u001b[32m'**/api/agents/*/message**'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m options\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mtimeout \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[35m30000\u001b[39m })\u001b[33m.\u001b[39m\u001b[36mcatch\u001b[39m(\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 197 |\u001b[39m () \u001b[33m=>\u001b[39m page\u001b[33m.\u001b[39mwaitForRequest(\u001b[32m'**/api/chat**'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m options\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mtimeout \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[35m30000\u001b[39m })\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 198 |\u001b[39m )\u001b[33m,\u001b[39m\n \u001b[90m 199 |\u001b[39m sendButton\u001b[33m.\u001b[39mfirst()\u001b[33m.\u001b[39mclick()\u001b[33m,\u001b[39m\n \u001b[90m 200 |\u001b[39m ])\u001b[33m;\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\utils\\user-actions.ts", "column": 20, "line": 197 }, "message": "TimeoutError: page.waitForRequest: Timeout 30000ms exceeded while waiting for event \"request\"\n=========================== logs ===========================\nwaiting for request \"**/api/chat**\"\n============================================================\n\n at ..\\utils\\user-actions.ts:197\n\n 195 | const [request] = await Promise.all([\n 196 | page.waitForRequest('**/api/agents/*/message**', { timeout: options?.timeout ?? 30000 }).catch(\n> 197 | () => page.waitForRequest('**/api/chat**', { timeout: options?.timeout ?? 30000 })\n | ^\n 198 | ),\n 199 | sendButton.first().click(),\n 200 | ]);\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\utils\\user-actions.ts:197:20\n at Object.sendChatMessage (G:\\ZClaw_openfang\\desktop\\tests\\e2e\\utils\\user-actions.ts:195:23)\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\data-flow.spec.ts:93:5" } ], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW 数据流验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:55:52.484Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:44.747Z", "annotations": [], "attachments": [ { "name": "screenshot", "contentType": "image/png", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\data-flow-聊天数据流验证-CHAT-DF-02-流式响应数据流-chromium\\test-failed-1.png" }, { "name": "video", "contentType": "video/webm", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\data-flow-聊天数据流验证-CHAT-DF-02-流式响应数据流-chromium\\video.webm" }, { "name": "error-context", "contentType": "text/markdown", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\data-flow-聊天数据流验证-CHAT-DF-02-流式响应数据流-chromium\\error-context.md" } ], "errorLocation": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\utils\\user-actions.ts", "column": 20, "line": 197 } } ], "status": "unexpected" } ], "id": "bdcac940a81c3235ce13-496be181af69c53d9536", "file": "data-flow.spec.ts", "line": 87, "column": 3 }, { "title": "CHAT-DF-03: 模型切换数据流", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 44, "parallelIndex": 5, "status": "passed", "duration": 4251, "errors": [], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW 数据流验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:55:58.301Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:55:53.876Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "bdcac940a81c3235ce13-dbc5e2812f9944422f07", "file": "data-flow.spec.ts", "line": 106, "column": 3 }, { "title": "CHAT-DF-04: 新建对话数据流", "ok": false, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 9, "parallelIndex": 6, "status": "failed", "duration": 66996, "error": { "message": "TimeoutError: page.waitForRequest: Timeout 30000ms exceeded while waiting for event \"request\"\n=========================== logs ===========================\nwaiting for request \"**/api/chat**\"\n============================================================", "stack": "TimeoutError: page.waitForRequest: Timeout 30000ms exceeded while waiting for event \"request\"\n=========================== logs ===========================\nwaiting for request \"**/api/chat**\"\n============================================================\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\utils\\user-actions.ts:197:20\n at Object.sendChatMessage (G:\\ZClaw_openfang\\desktop\\tests\\e2e\\utils\\user-actions.ts:195:23)\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\data-flow.spec.ts:150:5", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\utils\\user-actions.ts", "column": 20, "line": 197 }, "snippet": "\u001b[90m at \u001b[39m..\\utils\\user-actions.ts:197\n\n\u001b[0m \u001b[90m 195 |\u001b[39m \u001b[36mconst\u001b[39m [request] \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m.\u001b[39mall([\n \u001b[90m 196 |\u001b[39m page\u001b[33m.\u001b[39mwaitForRequest(\u001b[32m'**/api/agents/*/message**'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m options\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mtimeout \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[35m30000\u001b[39m })\u001b[33m.\u001b[39m\u001b[36mcatch\u001b[39m(\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 197 |\u001b[39m () \u001b[33m=>\u001b[39m page\u001b[33m.\u001b[39mwaitForRequest(\u001b[32m'**/api/chat**'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m options\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mtimeout \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[35m30000\u001b[39m })\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 198 |\u001b[39m )\u001b[33m,\u001b[39m\n \u001b[90m 199 |\u001b[39m sendButton\u001b[33m.\u001b[39mfirst()\u001b[33m.\u001b[39mclick()\u001b[33m,\u001b[39m\n \u001b[90m 200 |\u001b[39m ])\u001b[33m;\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\utils\\user-actions.ts", "column": 20, "line": 197 }, "message": "TimeoutError: page.waitForRequest: Timeout 30000ms exceeded while waiting for event \"request\"\n=========================== logs ===========================\nwaiting for request \"**/api/chat**\"\n============================================================\n\n at ..\\utils\\user-actions.ts:197\n\n 195 | const [request] = await Promise.all([\n 196 | page.waitForRequest('**/api/agents/*/message**', { timeout: options?.timeout ?? 30000 }).catch(\n> 197 | () => page.waitForRequest('**/api/chat**', { timeout: options?.timeout ?? 30000 })\n | ^\n 198 | ),\n 199 | sendButton.first().click(),\n 200 | ]);\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\utils\\user-actions.ts:197:20\n at Object.sendChatMessage (G:\\ZClaw_openfang\\desktop\\tests\\e2e\\utils\\user-actions.ts:195:23)\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\data-flow.spec.ts:150:5" } ], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW 数据流验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:54:50.822Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:43.798Z", "annotations": [], "attachments": [ { "name": "screenshot", "contentType": "image/png", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\data-flow-聊天数据流验证-CHAT-DF-04-新建对话数据流-chromium\\test-failed-1.png" }, { "name": "video", "contentType": "video/webm", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\data-flow-聊天数据流验证-CHAT-DF-04-新建对话数据流-chromium\\video.webm" }, { "name": "error-context", "contentType": "text/markdown", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\data-flow-聊天数据流验证-CHAT-DF-04-新建对话数据流-chromium\\error-context.md" } ], "errorLocation": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\utils\\user-actions.ts", "column": 20, "line": 197 } } ], "status": "unexpected" } ], "id": "bdcac940a81c3235ce13-22028b2d3980d146b6b2", "file": "data-flow.spec.ts", "line": 145, "column": 3 }, { "title": "CHAT-DF-05: 网络错误处理数据流", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 21, "parallelIndex": 6, "status": "passed", "duration": 7136, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:52.426Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "bdcac940a81c3235ce13-542a5a6d289da07e78aa", "file": "data-flow.spec.ts", "line": 167, "column": 3 } ] }, { "title": "分身管理数据流验证", "file": "data-flow.spec.ts", "line": 202, "column": 6, "specs": [ { "title": "CLONE-DF-01: 分身列表加载数据流", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 21, "parallelIndex": 6, "status": "passed", "duration": 10188, "errors": [], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW 数据流验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:55:09.929Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:59.713Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "bdcac940a81c3235ce13-02d5a82ce9e1ba86ce41", "file": "data-flow.spec.ts", "line": 211, "column": 3 }, { "title": "CLONE-DF-02: 切换分身数据流", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 10, "parallelIndex": 7, "status": "passed", "duration": 4327, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:46.147Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "bdcac940a81c3235ce13-e91f2af762a1ae1df71a", "file": "data-flow.spec.ts", "line": 234, "column": 3 }, { "title": "CLONE-DF-03: 创建分身数据流", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 10, "parallelIndex": 7, "status": "passed", "duration": 4353, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:50.485Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "bdcac940a81c3235ce13-2ec05be0c90bbb3f6f27", "file": "data-flow.spec.ts", "line": 262, "column": 3 } ] }, { "title": "Hands 系统数据流验证", "file": "data-flow.spec.ts", "line": 298, "column": 6, "specs": [ { "title": "HAND-DF-01: Hands 列表加载数据流", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 10, "parallelIndex": 7, "status": "passed", "duration": 11957, "errors": [], "stdout": [ { "text": "Hand cards found: 0\n" }, { "text": "\n========================================\n" }, { "text": "ZCLAW 数据流验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:54:06.826Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:54.851Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "bdcac940a81c3235ce13-eb9a649ee7dea89596f0", "file": "data-flow.spec.ts", "line": 307, "column": 3 }, { "title": "HAND-DF-02: 触发 Hand 执行数据流", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [ { "type": "skip", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\data-flow.spec.ts", "line": 341, "column": 12 } } ], "expectedStatus": "skipped", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 8, "parallelIndex": 2, "status": "skipped", "duration": 5733, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:48.608Z", "annotations": [ { "type": "skip", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\data-flow.spec.ts", "line": 341, "column": 12 } } ], "attachments": [] } ], "status": "skipped" } ], "id": "bdcac940a81c3235ce13-008a28dfecdca8116b5e", "file": "data-flow.spec.ts", "line": 333, "column": 3 }, { "title": "HAND-DF-03: Hand 参数表单数据流", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 8, "parallelIndex": 2, "status": "passed", "duration": 5795, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:54.352Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "bdcac940a81c3235ce13-b66d34fc9491564fc927", "file": "data-flow.spec.ts", "line": 369, "column": 3 } ] }, { "title": "工作流数据流验证", "file": "data-flow.spec.ts", "line": 400, "column": 6, "specs": [ { "title": "WF-DF-01: 工作流列表数据流", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 8, "parallelIndex": 2, "status": "passed", "duration": 4925, "errors": [], "stdout": [ { "text": "Workflows in Store: 0, in UI: 0\n" }, { "text": "\n========================================\n" }, { "text": "ZCLAW 数据流验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:54:05.105Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:00.160Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "bdcac940a81c3235ce13-6df14a43ab8759e33bd6", "file": "data-flow.spec.ts", "line": 409, "column": 3 }, { "title": "WF-DF-02: 创建工作流数据流", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 11, "parallelIndex": 0, "status": "passed", "duration": 5211, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:51.722Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "bdcac940a81c3235ce13-59f8391df50172ae70fa", "file": "data-flow.spec.ts", "line": 425, "column": 3 } ] }, { "title": "技能市场数据流验证", "file": "data-flow.spec.ts", "line": 456, "column": 6, "specs": [ { "title": "SKILL-DF-01: 技能列表数据流", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 11, "parallelIndex": 0, "status": "passed", "duration": 11133, "errors": [], "stdout": [ { "text": "Skill API requests: 0\n" }, { "text": "Skills in UI: 0\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:56.944Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "bdcac940a81c3235ce13-e69ec1b43be92916482e", "file": "data-flow.spec.ts", "line": 465, "column": 3 }, { "title": "SKILL-DF-02: 搜索技能数据流", "ok": false, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 11, "parallelIndex": 0, "status": "failed", "duration": 5252, "error": { "message": "Error: locator.isVisible: Error: strict mode violation: locator('input[placeholder*=\"搜索\"]').or(locator('input[type=\"search\"]')) resolved to 2 elements:\n 1) aka getByRole('textbox', { name: '搜索...' })\n 2) aka getByRole('textbox', { name: '搜索技能、能力、触发词' })\n\nCall log:\n\u001b[2m - checking visibility of locator('input[placeholder*=\"搜索\"]').or(locator('input[type=\"search\"]'))\u001b[22m\n", "stack": "Error: locator.isVisible: Error: strict mode violation: locator('input[placeholder*=\"搜索\"]').or(locator('input[type=\"search\"]')) resolved to 2 elements:\n 1) aka getByRole('textbox', { name: '搜索...' })\n 2) aka getByRole('textbox', { name: '搜索技能、能力、触发词' })\n\nCall log:\n\u001b[2m - checking visibility of locator('input[placeholder*=\"搜索\"]').or(locator('input[type=\"search\"]'))\u001b[22m\n\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\data-flow.spec.ts:491:27", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\data-flow.spec.ts", "column": 27, "line": 491 }, "snippet": "\u001b[0m \u001b[90m 489 |\u001b[39m )\u001b[33m;\u001b[39m\n \u001b[90m 490 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 491 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[36mawait\u001b[39m searchInput\u001b[33m.\u001b[39misVisible()) {\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 492 |\u001b[39m \u001b[90m// 2. 输入搜索关键词\u001b[39m\n \u001b[90m 493 |\u001b[39m \u001b[36mawait\u001b[39m searchInput\u001b[33m.\u001b[39mfill(\u001b[32m'代码'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 494 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForTimeout(\u001b[35m500\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\data-flow.spec.ts", "column": 27, "line": 491 }, "message": "Error: locator.isVisible: Error: strict mode violation: locator('input[placeholder*=\"搜索\"]').or(locator('input[type=\"search\"]')) resolved to 2 elements:\n 1) aka getByRole('textbox', { name: '搜索...' })\n 2) aka getByRole('textbox', { name: '搜索技能、能力、触发词' })\n\nCall log:\n\u001b[2m - checking visibility of locator('input[placeholder*=\"搜索\"]').or(locator('input[type=\"search\"]'))\u001b[22m\n\n\n 489 | );\n 490 |\n> 491 | if (await searchInput.isVisible()) {\n | ^\n 492 | // 2. 输入搜索关键词\n 493 | await searchInput.fill('代码');\n 494 | await page.waitForTimeout(500);\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\data-flow.spec.ts:491:27" } ], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW 数据流验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:54:13.367Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:08.088Z", "annotations": [], "attachments": [ { "name": "screenshot", "contentType": "image/png", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\data-flow-技能市场数据流验证-SKILL-DF-02-搜索技能数据流-chromium\\test-failed-1.png" }, { "name": "video", "contentType": "video/webm", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\data-flow-技能市场数据流验证-SKILL-DF-02-搜索技能数据流-chromium\\video.webm" }, { "name": "error-context", "contentType": "text/markdown", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\data-flow-技能市场数据流验证-SKILL-DF-02-搜索技能数据流-chromium\\error-context.md" } ], "errorLocation": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\data-flow.spec.ts", "column": 27, "line": 491 } } ], "status": "unexpected" } ], "id": "bdcac940a81c3235ce13-a0cd80e0a96d2f898e69", "file": "data-flow.spec.ts", "line": 485, "column": 3 } ] }, { "title": "团队协作数据流验证", "file": "data-flow.spec.ts", "line": 508, "column": 6, "specs": [ { "title": "TEAM-DF-01: 团队列表数据流", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 12, "parallelIndex": 1, "status": "passed", "duration": 5364, "errors": [], "stdout": [ { "text": "Teams in Store: 0, in UI: 0\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:52.533Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "bdcac940a81c3235ce13-d013afd3a6f16ec55da2", "file": "data-flow.spec.ts", "line": 517, "column": 3 }, { "title": "TEAM-DF-02: 创建团队数据流", "ok": false, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 12, "parallelIndex": 1, "status": "failed", "duration": 15775, "error": { "message": "TimeoutError: page.waitForSelector: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('[role=\"dialog\"]') to be visible\u001b[22m\n", "stack": "TimeoutError: page.waitForSelector: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('[role=\"dialog\"]') to be visible\u001b[22m\n\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\data-flow.spec.ts:538:18", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\data-flow.spec.ts", "column": 18, "line": 538 }, "snippet": "\u001b[0m \u001b[90m 536 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[36mawait\u001b[39m createBtn\u001b[33m.\u001b[39misVisible()) {\n \u001b[90m 537 |\u001b[39m \u001b[36mawait\u001b[39m createBtn\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 538 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForSelector(\u001b[32m'[role=\"dialog\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 539 |\u001b[39m\n \u001b[90m 540 |\u001b[39m \u001b[90m// 2. 填写团队信息\u001b[39m\n \u001b[90m 541 |\u001b[39m \u001b[36mconst\u001b[39m dialog \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'[role=\"dialog\"]'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\data-flow.spec.ts", "column": 18, "line": 538 }, "message": "TimeoutError: page.waitForSelector: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('[role=\"dialog\"]') to be visible\u001b[22m\n\n\n 536 | if (await createBtn.isVisible()) {\n 537 | await createBtn.click();\n> 538 | await page.waitForSelector('[role=\"dialog\"]');\n | ^\n 539 |\n 540 | // 2. 填写团队信息\n 541 | const dialog = page.locator('[role=\"dialog\"]');\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\data-flow.spec.ts:538:18" } ], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW 数据流验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:54:13.707Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:57.910Z", "annotations": [], "attachments": [ { "name": "screenshot", "contentType": "image/png", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\data-flow-团队协作数据流验证-TEAM-DF-02-创建团队数据流-chromium\\test-failed-1.png" }, { "name": "video", "contentType": "video/webm", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\data-flow-团队协作数据流验证-TEAM-DF-02-创建团队数据流-chromium\\video.webm" }, { "name": "error-context", "contentType": "text/markdown", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\data-flow-团队协作数据流验证-TEAM-DF-02-创建团队数据流-chromium\\error-context.md" } ], "errorLocation": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\data-flow.spec.ts", "column": 18, "line": 538 } } ], "status": "unexpected" } ], "id": "bdcac940a81c3235ce13-2b9c3212b5e2bc418924", "file": "data-flow.spec.ts", "line": 532, "column": 3 } ] }, { "title": "设置数据流验证", "file": "data-flow.spec.ts", "line": 555, "column": 6, "specs": [ { "title": "SET-DF-01: 打开设置数据流", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 14, "parallelIndex": 1, "status": "passed", "duration": 4347, "errors": [], "stdout": [ { "text": "Settings visible: true\n" }, { "text": "\n========================================\n" }, { "text": "ZCLAW 数据流验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:54:19.452Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:14.936Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "bdcac940a81c3235ce13-8b134df5feeb02852417", "file": "data-flow.spec.ts", "line": 562, "column": 3 }, { "title": "SET-DF-02: 模型配置数据流", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 3, "parallelIndex": 3, "status": "passed", "duration": 4672, "errors": [], "stdout": [ { "text": "Model options: 0\n" }, { "text": "\n========================================\n" }, { "text": "ZCLAW 数据流验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:53:57.233Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:52.544Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "bdcac940a81c3235ce13-6df5d90e5b85ad4debff", "file": "data-flow.spec.ts", "line": 576, "column": 3 } ] } ] }, { "title": "edge-cases.spec.ts", "file": "edge-cases.spec.ts", "column": 0, "line": 0, "specs": [], "suites": [ { "title": "网络边界情况", "file": "edge-cases.spec.ts", "line": 22, "column": 6, "specs": [ { "title": "NET-EDGE-01: 完全离线状态", "ok": true, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 3, "parallelIndex": 3, "status": "passed", "duration": 272, "errors": [], "stdout": [ { "text": "Offline state page content: \n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:57.262Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "db200a91ff2226597e25-c41280b837071c7a482f", "file": "edge-cases.spec.ts", "line": 24, "column": 3 }, { "title": "NET-EDGE-02: 网络中断恢复", "ok": true, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 3, "parallelIndex": 3, "status": "passed", "duration": 9250, "errors": [], "stdout": [ { "text": "Connection: undefined -> undefined\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:53:57.548Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "db200a91ff2226597e25-5c032d968b9e25259ea1", "file": "edge-cases.spec.ts", "line": 42, "column": 3 }, { "title": "NET-EDGE-03: 请求超时处理", "ok": false, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 3, "parallelIndex": 3, "status": "failed", "duration": 9039, "error": { "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32mfalse\u001b[39m\nReceived: \u001b[31mundefined\u001b[39m", "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32mfalse\u001b[39m\nReceived: \u001b[31mundefined\u001b[39m\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts:90:34", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 34, "line": 90 }, "snippet": "\u001b[0m \u001b[90m 88 |\u001b[39m isStreaming\u001b[33m:\u001b[39m boolean\u001b[33m;\u001b[39m\n \u001b[90m 89 |\u001b[39m }\u001b[33m>\u001b[39m(page\u001b[33m,\u001b[39m \u001b[33mSTORE_NAMES\u001b[39m\u001b[33m.\u001b[39m\u001b[33mCHAT\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 90 |\u001b[39m expect(state\u001b[33m?\u001b[39m\u001b[33m.\u001b[39misStreaming)\u001b[33m.\u001b[39mtoBe(\u001b[36mfalse\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 91 |\u001b[39m }\n \u001b[90m 92 |\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 93 |\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 34, "line": 90 }, "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32mfalse\u001b[39m\nReceived: \u001b[31mundefined\u001b[39m\n\n 88 | isStreaming: boolean;\n 89 | }>(page, STORE_NAMES.CHAT);\n> 90 | expect(state?.isStreaming).toBe(false);\n | ^\n 91 | }\n 92 | });\n 93 |\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts:90:34" } ], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW 边界情况验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:54:15.862Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:06.808Z", "annotations": [], "attachments": [ { "name": "screenshot", "contentType": "image/png", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-网络边界情况-NET-EDGE-03-请求超时处理-chromium\\test-failed-1.png" }, { "name": "video", "contentType": "video/webm", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-网络边界情况-NET-EDGE-03-请求超时处理-chromium\\video.webm" }, { "name": "error-context", "contentType": "text/markdown", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-网络边界情况-NET-EDGE-03-请求超时处理-chromium\\error-context.md" } ], "errorLocation": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 34, "line": 90 } } ], "status": "unexpected" } ], "id": "db200a91ff2226597e25-46f3ee7573c2c62c1c38", "file": "edge-cases.spec.ts", "line": 68, "column": 3 }, { "title": "NET-EDGE-04: 服务器错误 (500)", "ok": true, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 15, "parallelIndex": 3, "status": "passed", "duration": 6890, "errors": [], "stdout": [ { "text": "Error shown: false\n" }, { "text": "\n========================================\n" }, { "text": "ZCLAW 边界情况验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:54:24.053Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:17.043Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "db200a91ff2226597e25-f7489a907b9fd5ad72b2", "file": "edge-cases.spec.ts", "line": 94, "column": 3 }, { "title": "NET-EDGE-05: 限流处理 (429)", "ok": true, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 8, "parallelIndex": 2, "status": "passed", "duration": 6920, "errors": [], "stdout": [ { "text": "Rate limit handling verified\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:05.149Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "db200a91ff2226597e25-77f03f376c7425e0d06b", "file": "edge-cases.spec.ts", "line": 119, "column": 3 }, { "title": "NET-EDGE-06: 慢速网络", "ok": false, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 8, "parallelIndex": 2, "status": "failed", "duration": 58817, "error": { "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('aside').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m - waiting for locator('aside').first()\u001b[22m\n", "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('aside').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m - waiting for locator('aside').first()\u001b[22m\n\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts:156:27", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 27, "line": 156 }, "snippet": "\u001b[0m \u001b[90m 154 |\u001b[39m \u001b[90m// 4. 验证页面仍然可用\u001b[39m\n \u001b[90m 155 |\u001b[39m \u001b[36mconst\u001b[39m sidebar \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'aside'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 156 |\u001b[39m \u001b[36mawait\u001b[39m expect(sidebar)\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 157 |\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 158 |\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 159 |\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 27, "line": 156 }, "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('aside').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m - waiting for locator('aside').first()\u001b[22m\n\n\n 154 | // 4. 验证页面仍然可用\n 155 | const sidebar = page.locator('aside').first();\n> 156 | await expect(sidebar).toBeVisible();\n | ^\n 157 | });\n 158 | });\n 159 |\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts:156:27" } ], "stdout": [ { "text": "Page load time with slow network: 45343ms\n" }, { "text": "\n========================================\n" }, { "text": "ZCLAW 边界情况验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:55:10.913Z\n" }, { "text": "========================================\n\n" } ], "stderr": [ { "text": "Sidebar not found\n" } ], "retry": 0, "startTime": "2026-03-25T23:54:12.078Z", "annotations": [], "attachments": [ { "name": "screenshot", "contentType": "image/png", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-网络边界情况-NET-EDGE-06-慢速网络-chromium\\test-failed-1.png" }, { "name": "video", "contentType": "video/webm", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-网络边界情况-NET-EDGE-06-慢速网络-chromium\\video.webm" }, { "name": "error-context", "contentType": "text/markdown", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-网络边界情况-NET-EDGE-06-慢速网络-chromium\\error-context.md" } ], "errorLocation": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 27, "line": 156 } } ], "status": "unexpected" } ], "id": "db200a91ff2226597e25-7e8bd475f36604b4bd93", "file": "edge-cases.spec.ts", "line": 138, "column": 3 } ] }, { "title": "数据边界情况", "file": "edge-cases.spec.ts", "line": 163, "column": 6, "specs": [ { "title": "DATA-EDGE-01: 超长消息", "ok": false, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 25, "parallelIndex": 2, "status": "failed", "duration": 4208, "error": { "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBeGreaterThan\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected: > \u001b[32m10000\u001b[39m\nReceived: \u001b[31m6000\u001b[39m", "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBeGreaterThan\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected: > \u001b[32m10000\u001b[39m\nReceived: \u001b[31m6000\u001b[39m\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts:181:28", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 28, "line": 181 }, "snippet": "\u001b[0m \u001b[90m 179 |\u001b[39m \u001b[90m// 3. 验证输入被接受\u001b[39m\n \u001b[90m 180 |\u001b[39m \u001b[36mconst\u001b[39m value \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m chatInput\u001b[33m.\u001b[39minputValue()\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 181 |\u001b[39m expect(value\u001b[33m.\u001b[39mlength)\u001b[33m.\u001b[39mtoBeGreaterThan(\u001b[35m10000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 182 |\u001b[39m\n \u001b[90m 183 |\u001b[39m \u001b[90m// 4. 发送消息\u001b[39m\n \u001b[90m 184 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'button'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'发送消息'\u001b[39m })\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 28, "line": 181 }, "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBeGreaterThan\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected: > \u001b[32m10000\u001b[39m\nReceived: \u001b[31m6000\u001b[39m\n\n 179 | // 3. 验证输入被接受\n 180 | const value = await chatInput.inputValue();\n> 181 | expect(value.length).toBeGreaterThan(10000);\n | ^\n 182 |\n 183 | // 4. 发送消息\n 184 | await page.getByRole('button', { name: '发送消息' }).click();\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts:181:28" } ], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW 边界情况验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:55:16.594Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:55:12.184Z", "annotations": [], "attachments": [ { "name": "screenshot", "contentType": "image/png", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-数据边界情况-DATA-EDGE-01-超长消息-chromium\\test-failed-1.png" }, { "name": "video", "contentType": "video/webm", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-数据边界情况-DATA-EDGE-01-超长消息-chromium\\video.webm" }, { "name": "error-context", "contentType": "text/markdown", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-数据边界情况-DATA-EDGE-01-超长消息-chromium\\error-context.md" } ], "errorLocation": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 28, "line": 181 } } ], "status": "unexpected" } ], "id": "db200a91ff2226597e25-33f029df370352b45438", "file": "edge-cases.spec.ts", "line": 170, "column": 3 }, { "title": "DATA-EDGE-02: 空消息", "ok": false, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 26, "parallelIndex": 2, "status": "failed", "duration": 13819, "error": { "message": "TimeoutError: locator.click: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for getByRole('button', { name: '发送消息' })\u001b[22m\n\u001b[2m - locator resolved to \u001b[22m\n\u001b[2m - attempting click action\u001b[22m\n\u001b[2m 2 × waiting for element to be visible, enabled and stable\u001b[22m\n\u001b[2m - element is not enabled\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 20ms\u001b[22m\n\u001b[2m 2 × waiting for element to be visible, enabled and stable\u001b[22m\n\u001b[2m - element is not enabled\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 100ms\u001b[22m\n\u001b[2m 19 × waiting for element to be visible, enabled and stable\u001b[22m\n\u001b[2m - element is not enabled\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 500ms\u001b[22m\n", "stack": "TimeoutError: locator.click: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for getByRole('button', { name: '发送消息' })\u001b[22m\n\u001b[2m - locator resolved to \u001b[22m\n\u001b[2m - attempting click action\u001b[22m\n\u001b[2m 2 × waiting for element to be visible, enabled and stable\u001b[22m\n\u001b[2m - element is not enabled\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 20ms\u001b[22m\n\u001b[2m 2 × waiting for element to be visible, enabled and stable\u001b[22m\n\u001b[2m - element is not enabled\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 100ms\u001b[22m\n\u001b[2m 19 × waiting for element to be visible, enabled and stable\u001b[22m\n\u001b[2m - element is not enabled\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 500ms\u001b[22m\n\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts:206:56", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 56, "line": 206 }, "snippet": "\u001b[0m \u001b[90m 204 |\u001b[39m \u001b[90m// 2. 尝试发送空消息\u001b[39m\n \u001b[90m 205 |\u001b[39m \u001b[36mawait\u001b[39m chatInput\u001b[33m.\u001b[39mfill(\u001b[32m''\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 206 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'button'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'发送消息'\u001b[39m })\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 207 |\u001b[39m\n \u001b[90m 208 |\u001b[39m \u001b[90m// 3. 验证空消息不应被发送\u001b[39m\n \u001b[90m 209 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForTimeout(\u001b[35m1000\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 56, "line": 206 }, "message": "TimeoutError: locator.click: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for getByRole('button', { name: '发送消息' })\u001b[22m\n\u001b[2m - locator resolved to \u001b[22m\n\u001b[2m - attempting click action\u001b[22m\n\u001b[2m 2 × waiting for element to be visible, enabled and stable\u001b[22m\n\u001b[2m - element is not enabled\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 20ms\u001b[22m\n\u001b[2m 2 × waiting for element to be visible, enabled and stable\u001b[22m\n\u001b[2m - element is not enabled\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 100ms\u001b[22m\n\u001b[2m 19 × waiting for element to be visible, enabled and stable\u001b[22m\n\u001b[2m - element is not enabled\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 500ms\u001b[22m\n\n\n 204 | // 2. 尝试发送空消息\n 205 | await chatInput.fill('');\n> 206 | await page.getByRole('button', { name: '发送消息' }).click();\n | ^\n 207 |\n 208 | // 3. 验证空消息不应被发送\n 209 | await page.waitForTimeout(1000);\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts:206:56" } ], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW 边界情况验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:55:32.450Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:55:18.482Z", "annotations": [], "attachments": [ { "name": "screenshot", "contentType": "image/png", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-数据边界情况-DATA-EDGE-02-空消息-chromium\\test-failed-1.png" }, { "name": "video", "contentType": "video/webm", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-数据边界情况-DATA-EDGE-02-空消息-chromium\\video.webm" }, { "name": "error-context", "contentType": "text/markdown", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-数据边界情况-DATA-EDGE-02-空消息-chromium\\error-context.md" } ], "errorLocation": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 56, "line": 206 } } ], "status": "unexpected" } ], "id": "db200a91ff2226597e25-77e316cb9afa9444ddd0", "file": "edge-cases.spec.ts", "line": 195, "column": 3 }, { "title": "DATA-EDGE-03: 特殊字符消息", "ok": true, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 10, "parallelIndex": 7, "status": "passed", "duration": 5889, "errors": [], "stdout": [ { "text": "Special characters message sent\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:06.864Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "db200a91ff2226597e25-b280afef0d61bec5b977", "file": "edge-cases.spec.ts", "line": 220, "column": 3 }, { "title": "DATA-EDGE-04: Unicode 和 Emoji", "ok": true, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 10, "parallelIndex": 7, "status": "passed", "duration": 5867, "errors": [], "stdout": [ { "text": "Unicode message visible: false\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:12.765Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "db200a91ff2226597e25-217b2fa2f5b7ee2aab34", "file": "edge-cases.spec.ts", "line": 234, "column": 3 }, { "title": "DATA-EDGE-05: 代码块内容", "ok": true, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 10, "parallelIndex": 7, "status": "passed", "duration": 5941, "errors": [], "stdout": [ { "text": "Code block visible: false\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:18.645Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "db200a91ff2226597e25-c0f918ad1d71c7274b6e", "file": "edge-cases.spec.ts", "line": 251, "column": 3 }, { "title": "DATA-EDGE-06: 空 Hands 列表", "ok": true, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 10, "parallelIndex": 7, "status": "passed", "duration": 6380, "errors": [], "stdout": [ { "text": "Empty state shown: false\n" }, { "text": "\n========================================\n" }, { "text": "ZCLAW 边界情况验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:54:30.994Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:24.599Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "db200a91ff2226597e25-cbdcc1a8a9f35fbafa8b", "file": "edge-cases.spec.ts", "line": 273, "column": 3 } ] }, { "title": "状态边界情况", "file": "edge-cases.spec.ts", "line": 301, "column": 6, "specs": [ { "title": "STATE-EDGE-01: 快速连续点击", "ok": false, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 4, "parallelIndex": 4, "status": "failed", "duration": 14404, "error": { "message": "TimeoutError: locator.click: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for getByRole('button', { name: '发送消息' })\u001b[22m\n\u001b[2m - locator resolved to \u001b[22m\n\u001b[2m - attempting click action\u001b[22m\n\u001b[2m 2 × waiting for element to be visible, enabled and stable\u001b[22m\n\u001b[2m - element is not stable\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 20ms\u001b[22m\n\u001b[2m 2 × waiting for element to be visible, enabled and stable\u001b[22m\n\u001b[2m - element is not enabled\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 100ms\u001b[22m\n\u001b[2m 19 × waiting for element to be visible, enabled and stable\u001b[22m\n\u001b[2m - element is not enabled\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 500ms\u001b[22m\n", "stack": "TimeoutError: locator.click: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for getByRole('button', { name: '发送消息' })\u001b[22m\n\u001b[2m - locator resolved to \u001b[22m\n\u001b[2m - attempting click action\u001b[22m\n\u001b[2m 2 × waiting for element to be visible, enabled and stable\u001b[22m\n\u001b[2m - element is not stable\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 20ms\u001b[22m\n\u001b[2m 2 × waiting for element to be visible, enabled and stable\u001b[22m\n\u001b[2m - element is not enabled\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 100ms\u001b[22m\n\u001b[2m 19 × waiting for element to be visible, enabled and stable\u001b[22m\n\u001b[2m - element is not enabled\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 500ms\u001b[22m\n\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts:323:23", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 23, "line": 323 }, "snippet": "\u001b[0m \u001b[90m 321 |\u001b[39m \u001b[90m// 连续点击 5 次\u001b[39m\n \u001b[90m 322 |\u001b[39m \u001b[36mfor\u001b[39m (\u001b[36mlet\u001b[39m i \u001b[33m=\u001b[39m \u001b[35m0\u001b[39m\u001b[33m;\u001b[39m i \u001b[33m<\u001b[39m \u001b[35m5\u001b[39m\u001b[33m;\u001b[39m i\u001b[33m++\u001b[39m) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 323 |\u001b[39m \u001b[36mawait\u001b[39m sendBtn\u001b[33m.\u001b[39mclick({ delay\u001b[33m:\u001b[39m \u001b[35m50\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 324 |\u001b[39m }\n \u001b[90m 325 |\u001b[39m\n \u001b[90m 326 |\u001b[39m \u001b[90m// 3. 等待处理完成\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 23, "line": 323 }, "message": "TimeoutError: locator.click: Timeout 10000ms exceeded.\nCall log:\n\u001b[2m - waiting for getByRole('button', { name: '发送消息' })\u001b[22m\n\u001b[2m - locator resolved to \u001b[22m\n\u001b[2m - attempting click action\u001b[22m\n\u001b[2m 2 × waiting for element to be visible, enabled and stable\u001b[22m\n\u001b[2m - element is not stable\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 20ms\u001b[22m\n\u001b[2m 2 × waiting for element to be visible, enabled and stable\u001b[22m\n\u001b[2m - element is not enabled\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 100ms\u001b[22m\n\u001b[2m 19 × waiting for element to be visible, enabled and stable\u001b[22m\n\u001b[2m - element is not enabled\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 500ms\u001b[22m\n\n\n 321 | // 连续点击 5 次\n 322 | for (let i = 0; i < 5; i++) {\n> 323 | await sendBtn.click({ delay: 50 });\n | ^\n 324 | }\n 325 |\n 326 | // 3. 等待处理完成\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts:323:23" } ], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW 边界情况验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:54:25.737Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:11.316Z", "annotations": [], "attachments": [ { "name": "screenshot", "contentType": "image/png", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-状态边界情况-STATE-EDGE-01-快速连续点击-chromium\\test-failed-1.png" }, { "name": "video", "contentType": "video/webm", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-状态边界情况-STATE-EDGE-01-快速连续点击-chromium\\video.webm" }, { "name": "error-context", "contentType": "text/markdown", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-状态边界情况-STATE-EDGE-01-快速连续点击-chromium\\error-context.md" } ], "errorLocation": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 23, "line": 323 } } ], "status": "unexpected" } ], "id": "db200a91ff2226597e25-37fd6627ec83e334eebd", "file": "edge-cases.spec.ts", "line": 308, "column": 3 }, { "title": "STATE-EDGE-02: 流式中刷新页面", "ok": false, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 16, "parallelIndex": 4, "status": "failed", "duration": 7801, "error": { "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32mfalse\u001b[39m\nReceived: \u001b[31mundefined\u001b[39m", "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32mfalse\u001b[39m\nReceived: \u001b[31mundefined\u001b[39m\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts:360:34", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 34, "line": 360 }, "snippet": "\u001b[0m \u001b[90m 358 |\u001b[39m\n \u001b[90m 359 |\u001b[39m \u001b[90m// 流式状态应该是 false\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 360 |\u001b[39m expect(state\u001b[33m?\u001b[39m\u001b[33m.\u001b[39misStreaming)\u001b[33m.\u001b[39mtoBe(\u001b[36mfalse\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 361 |\u001b[39m }\n \u001b[90m 362 |\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 363 |\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 34, "line": 360 }, "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32mfalse\u001b[39m\nReceived: \u001b[31mundefined\u001b[39m\n\n 358 |\n 359 | // 流式状态应该是 false\n> 360 | expect(state?.isStreaming).toBe(false);\n | ^\n 361 | }\n 362 | });\n 363 |\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts:360:34" } ], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW 边界情况验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:54:34.930Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:26.986Z", "annotations": [], "attachments": [ { "name": "screenshot", "contentType": "image/png", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-状态边界情况-STATE-EDGE-02-流式中刷新页面-chromium\\test-failed-1.png" }, { "name": "video", "contentType": "video/webm", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-状态边界情况-STATE-EDGE-02-流式中刷新页面-chromium\\video.webm" }, { "name": "error-context", "contentType": "text/markdown", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-状态边界情况-STATE-EDGE-02-流式中刷新页面-chromium\\error-context.md" } ], "errorLocation": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 34, "line": 360 } } ], "status": "unexpected" } ], "id": "db200a91ff2226597e25-5f96187a72016a5a2f62", "file": "edge-cases.spec.ts", "line": 341, "column": 3 }, { "title": "STATE-EDGE-03: 多次切换标签", "ok": true, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 17, "parallelIndex": 4, "status": "passed", "duration": 14642, "errors": [], "stdout": [ { "text": "Errors after rapid switching: 0\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:36.100Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "db200a91ff2226597e25-ccdc069d385a8b2fc471", "file": "edge-cases.spec.ts", "line": 364, "column": 3 }, { "title": "STATE-EDGE-04: 清除 localStorage 后恢复", "ok": false, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 17, "parallelIndex": 4, "status": "failed", "duration": 10457, "error": { "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32mtrue\u001b[39m\nReceived: \u001b[31mfalse\u001b[39m", "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32mtrue\u001b[39m\nReceived: \u001b[31mfalse\u001b[39m\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts:407:48", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 48, "line": 407 }, "snippet": "\u001b[0m \u001b[90m 405 |\u001b[39m messages\u001b[33m:\u001b[39m unknown[]\u001b[33m;\u001b[39m\n \u001b[90m 406 |\u001b[39m }\u001b[33m>\u001b[39m(page\u001b[33m,\u001b[39m \u001b[33mSTORE_NAMES\u001b[39m\u001b[33m.\u001b[39m\u001b[33mCHAT\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 407 |\u001b[39m expect(\u001b[33mArray\u001b[39m\u001b[33m.\u001b[39misArray(chatState\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mmessages))\u001b[33m.\u001b[39mtoBe(\u001b[36mtrue\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 408 |\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 409 |\u001b[39m\n \u001b[90m 410 |\u001b[39m test(\u001b[32m'STATE-EDGE-05: 长时间运行稳定性'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\u001b[0m" }, "errors": [ { "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 48, "line": 407 }, "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32mtrue\u001b[39m\nReceived: \u001b[31mfalse\u001b[39m\n\n 405 | messages: unknown[];\n 406 | }>(page, STORE_NAMES.CHAT);\n> 407 | expect(Array.isArray(chatState?.messages)).toBe(true);\n | ^\n 408 | });\n 409 |\n 410 | test('STATE-EDGE-05: 长时间运行稳定性', async ({ page }) => {\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts:407:48" } ], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW 边界情况验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:55:01.337Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:50.860Z", "annotations": [], "attachments": [ { "name": "screenshot", "contentType": "image/png", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-状态边界情况-STATE-EDGE-04-清除-localStorage-后恢复-chromium\\test-failed-1.png" }, { "name": "video", "contentType": "video/webm", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-状态边界情况-STATE-EDGE-04-清除-localStorage-后恢复-chromium\\video.webm" }, { "name": "error-context", "contentType": "text/markdown", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-状态边界情况-STATE-EDGE-04-清除-localStorage-后恢复-chromium\\error-context.md" } ], "errorLocation": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 48, "line": 407 } } ], "status": "unexpected" } ], "id": "db200a91ff2226597e25-e59ade7ad897dc807a9b", "file": "edge-cases.spec.ts", "line": 384, "column": 3 }, { "title": "STATE-EDGE-05: 长时间运行稳定性", "ok": true, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 13, "parallelIndex": 0, "status": "passed", "duration": 11711, "errors": [], "stdout": [ { "text": "DOM nodes: 147 -> 153\n" }, { "text": "JS heap: 33100000 -> 33100000\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:14.555Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "db200a91ff2226597e25-659b8661ec1bfc6a6243", "file": "edge-cases.spec.ts", "line": 410, "column": 3 } ] }, { "title": "UI 边界情况", "file": "edge-cases.spec.ts", "line": 445, "column": 6, "specs": [ { "title": "UI-EDGE-01: 最小窗口尺寸", "ok": true, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 13, "parallelIndex": 0, "status": "passed", "duration": 14311, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:26.389Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "db200a91ff2226597e25-bdc1ecbff8d38423b9fd", "file": "edge-cases.spec.ts", "line": 447, "column": 3 }, { "title": "UI-EDGE-02: 大窗口尺寸", "ok": true, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 13, "parallelIndex": 0, "status": "passed", "duration": 3999, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:40.711Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "db200a91ff2226597e25-ed5003375a342c42f163", "file": "edge-cases.spec.ts", "line": 463, "column": 3 }, { "title": "UI-EDGE-03: 窗口尺寸变化", "ok": true, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 13, "parallelIndex": 0, "status": "passed", "duration": 4855, "errors": [], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW 边界情况验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:54:49.598Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:44.726Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "db200a91ff2226597e25-9bef193dc4826f604ea2", "file": "edge-cases.spec.ts", "line": 477, "column": 3 }, { "title": "UI-EDGE-04: 深色模式(如果支持)", "ok": true, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 14, "parallelIndex": 1, "status": "passed", "duration": 3747, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:19.481Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "db200a91ff2226597e25-290f5e1785c4fd09c14b", "file": "edge-cases.spec.ts", "line": 500, "column": 3 }, { "title": "UI-EDGE-05: 减少动画(如果支持)", "ok": true, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 14, "parallelIndex": 1, "status": "passed", "duration": 3742, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:23.238Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "db200a91ff2226597e25-7f8cb332f66ed8a0748d", "file": "edge-cases.spec.ts", "line": 511, "column": 3 } ] }, { "title": "输入验证边界情况", "file": "edge-cases.spec.ts", "line": 526, "column": 6, "specs": [ { "title": "INPUT-EDGE-01: XSS 注入尝试", "ok": true, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 14, "parallelIndex": 1, "status": "passed", "duration": 5868, "errors": [], "stdout": [ { "text": "XSS test passed - no alert shown\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:26.993Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "db200a91ff2226597e25-d736d79147d4b4699d6b", "file": "edge-cases.spec.ts", "line": 533, "column": 3 }, { "title": "INPUT-EDGE-02: HTML 标签输入", "ok": true, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 14, "parallelIndex": 1, "status": "passed", "duration": 5871, "errors": [], "stdout": [ { "text": "HTML input test completed\n" }, { "text": "\n========================================\n" }, { "text": "ZCLAW 边界情况验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:54:38.769Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:32.874Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "db200a91ff2226597e25-b66a0093de81d25c35fc", "file": "edge-cases.spec.ts", "line": 550, "column": 3 }, { "title": "INPUT-EDGE-03: JSON 格式参数", "ok": true, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 15, "parallelIndex": 3, "status": "passed", "duration": 5287, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:24.059Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "db200a91ff2226597e25-6bd313ef95210a4ddd80", "file": "edge-cases.spec.ts", "line": 564, "column": 3 } ] }, { "title": "并发操作边界情况", "file": "edge-cases.spec.ts", "line": 596, "column": 6, "specs": [ { "title": "CONCURRENT-EDGE-01: 同时发送多条消息", "ok": false, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 15, "parallelIndex": 3, "status": "failed", "duration": 14872, "error": { "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32mfalse\u001b[39m\nReceived: \u001b[31mundefined\u001b[39m", "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32mfalse\u001b[39m\nReceived: \u001b[31mundefined\u001b[39m\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts:627:39", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 39, "line": 627 }, "snippet": "\u001b[0m \u001b[90m 625 |\u001b[39m }\u001b[33m>\u001b[39m(page\u001b[33m,\u001b[39m \u001b[33mSTORE_NAMES\u001b[39m\u001b[33m.\u001b[39m\u001b[33mCHAT\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 626 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 627 |\u001b[39m expect(stateAfter\u001b[33m?\u001b[39m\u001b[33m.\u001b[39misStreaming)\u001b[33m.\u001b[39mtoBe(\u001b[36mfalse\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 628 |\u001b[39m }\n \u001b[90m 629 |\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 630 |\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 39, "line": 627 }, "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32mfalse\u001b[39m\nReceived: \u001b[31mundefined\u001b[39m\n\n 625 | }>(page, STORE_NAMES.CHAT);\n 626 |\n> 627 | expect(stateAfter?.isStreaming).toBe(false);\n | ^\n 628 | }\n 629 | });\n 630 |\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts:627:39" } ], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW 边界情况验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:54:44.251Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:29.357Z", "annotations": [], "attachments": [ { "name": "screenshot", "contentType": "image/png", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-并发操作边界情况-CONCURRENT-EDGE-01-同时发送多条消息-chromium\\test-failed-1.png" }, { "name": "video", "contentType": "video/webm", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-并发操作边界情况-CONCURRENT-EDGE-01-同时发送多条消息-chromium\\video.webm" }, { "name": "error-context", "contentType": "text/markdown", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\edge-cases-并发操作边界情况-CONCURRENT-EDGE-01-同时发送多条消息-chromium\\error-context.md" } ], "errorLocation": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\edge-cases.spec.ts", "column": 39, "line": 627 } } ], "status": "unexpected" } ], "id": "db200a91ff2226597e25-07d6beb8b17f1db70d47", "file": "edge-cases.spec.ts", "line": 603, "column": 3 }, { "title": "CONCURRENT-EDGE-02: 操作中切换视图", "ok": true, "tags": [], "tests": [ { "timeout": 180000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 20, "parallelIndex": 3, "status": "passed", "duration": 5564, "errors": [], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW 边界情况验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:54:51.626Z\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:45.921Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "db200a91ff2226597e25-3b87fae09b5c4d538833", "file": "edge-cases.spec.ts", "line": 631, "column": 3 } ] } ] }, { "title": "functional-scenarios.spec.ts", "file": "functional-scenarios.spec.ts", "column": 0, "line": 0, "specs": [], "suites": [ { "title": "1. 应用启动与初始化", "file": "functional-scenarios.spec.ts", "line": 75, "column": 6, "specs": [ { "title": "1.1 应用正常启动并渲染所有核心组件", "ok": false, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 10, "parallelIndex": 7, "status": "failed", "duration": 12817, "error": { "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: getByRole('tab', { name: /分身/i })\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m - waiting for getByRole('tab', { name: /分身/i })\u001b[22m\n", "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: getByRole('tab', { name: /分身/i })\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m - waiting for getByRole('tab', { name: /分身/i })\u001b[22m\n\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\functional-scenarios.spec.ts:94:32", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\functional-scenarios.spec.ts", "column": 32, "line": 94 }, "snippet": "\u001b[0m \u001b[90m 92 |\u001b[39m \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m tab \u001b[36mof\u001b[39m tabs) {\n \u001b[90m 93 |\u001b[39m \u001b[36mconst\u001b[39m tabElement \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'tab'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mRegExp\u001b[39m(tab\u001b[33m,\u001b[39m \u001b[32m'i'\u001b[39m) })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 94 |\u001b[39m \u001b[36mawait\u001b[39m expect(tabElement)\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 95 |\u001b[39m }\n \u001b[90m 96 |\u001b[39m\n \u001b[90m 97 |\u001b[39m \u001b[36mawait\u001b[39m takeScreenshot(page\u001b[33m,\u001b[39m \u001b[32m'01-app-initialized'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\functional-scenarios.spec.ts", "column": 32, "line": 94 }, "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: getByRole('tab', { name: /分身/i })\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m - waiting for getByRole('tab', { name: /分身/i })\u001b[22m\n\n\n 92 | for (const tab of tabs) {\n 93 | const tabElement = page.getByRole('tab', { name: new RegExp(tab, 'i') });\n> 94 | await expect(tabElement).toBeVisible();\n | ^\n 95 | }\n 96 |\n 97 | await takeScreenshot(page, '01-app-initialized');\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\functional-scenarios.spec.ts:94:32" } ], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW 前端功能验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:54:43.861Z\n" }, { "text": "截图目录: test-results/screenshots\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:31.027Z", "annotations": [], "attachments": [ { "name": "screenshot", "contentType": "image/png", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\functional-scenarios-1-应用启动与初始化-1-1-应用正常启动并渲染所有核心组件-chromium\\test-failed-1.png" }, { "name": "video", "contentType": "video/webm", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\functional-scenarios-1-应用启动与初始化-1-1-应用正常启动并渲染所有核心组件-chromium\\video.webm" }, { "name": "error-context", "contentType": "text/markdown", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\functional-scenarios-1-应用启动与初始化-1-1-应用正常启动并渲染所有核心组件-chromium\\error-context.md" } ], "errorLocation": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\functional-scenarios.spec.ts", "column": 32, "line": 94 } } ], "status": "unexpected" } ], "id": "ea562bc8f2f5f42dadea-a9ad995be4600240d5d9", "file": "functional-scenarios.spec.ts", "line": 77, "column": 3 }, { "title": "1.2 Zustand 状态持久化正常加载", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 19, "parallelIndex": 7, "status": "passed", "duration": 2299, "errors": [], "stdout": [ { "text": "Chat storage exists: \u001b[33mfalse\u001b[39m\n" }, { "text": "Gateway storage exists: \u001b[33mfalse\u001b[39m\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:45.458Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-a65a3f1d80bb007eab27", "file": "functional-scenarios.spec.ts", "line": 113, "column": 3 }, { "title": "1.3 Gateway 连接状态检查", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 19, "parallelIndex": 7, "status": "passed", "duration": 7520, "errors": [], "stdout": [ { "text": "Connection logs: []\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:47.920Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-bfedf5425166cfcdfaa3", "file": "functional-scenarios.spec.ts", "line": 137, "column": 3 } ] }, { "title": "2. 聊天功能", "file": "functional-scenarios.spec.ts", "line": 168, "column": 6, "specs": [ { "title": "2.1 聊天输入框功能", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 19, "parallelIndex": 7, "status": "passed", "duration": 2319, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:55.454Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-8d75fafdc1734094d51f", "file": "functional-scenarios.spec.ts", "line": 175, "column": 3 }, { "title": "2.2 发送消息并检查响应", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 19, "parallelIndex": 7, "status": "passed", "duration": 7658, "errors": [], "stdout": [ { "text": "Messages found: 1\n" }, { "text": "User message visible: false\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:57.790Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-29f3df3e2afdf21d40d4", "file": "functional-scenarios.spec.ts", "line": 196, "column": 3 }, { "title": "2.3 会话切换功能", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 19, "parallelIndex": 7, "status": "passed", "duration": 2232, "errors": [], "stdout": [ { "text": "Conversation items found: 0\n" }, { "text": "\n========================================\n" }, { "text": "ZCLAW 前端功能验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:55:07.713Z\n" }, { "text": "截图目录: test-results/screenshots\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:55:05.462Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-7d5af09171af56333005", "file": "functional-scenarios.spec.ts", "line": 225, "column": 3 }, { "title": "2.4 新建会话功能", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 14, "parallelIndex": 1, "status": "passed", "duration": 2758, "errors": [], "stdout": [ { "text": "Messages after new chat: 1\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:38.806Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-07ab230db79d60aeeba0", "file": "functional-scenarios.spec.ts", "line": 245, "column": 3 }, { "title": "2.5 消息流式显示", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 14, "parallelIndex": 1, "status": "passed", "duration": 8913, "errors": [], "stdout": [ { "text": "Streaming indicator visible: false\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:41.576Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-1094b9a79f676d0719ae", "file": "functional-scenarios.spec.ts", "line": 262, "column": 3 }, { "title": "2.6 错误处理 - 网络断开", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 14, "parallelIndex": 1, "status": "passed", "duration": 5540, "errors": [], "stdout": [ { "text": "Error message shown: false\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:50.504Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-1b314e3f6d18541a9631", "file": "functional-scenarios.spec.ts", "line": 286, "column": 3 } ] }, { "title": "3. Agent/分身管理", "file": "functional-scenarios.spec.ts", "line": 319, "column": 6, "specs": [ { "title": "3.1 分身列表显示", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 14, "parallelIndex": 1, "status": "passed", "duration": 3371, "errors": [], "stdout": [ { "text": "Clone/Agent items found: 1\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:56.056Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-aa98d5dacb19aae6a62f", "file": "functional-scenarios.spec.ts", "line": 327, "column": 3 }, { "title": "3.2 创建新分身", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 14, "parallelIndex": 1, "status": "passed", "duration": 2810, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:59.442Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-86c06416e3c35d9f7515", "file": "functional-scenarios.spec.ts", "line": 345, "column": 3 }, { "title": "3.3 切换分身", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 14, "parallelIndex": 1, "status": "passed", "duration": 2316, "errors": [], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW 前端功能验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:55:04.597Z\n" }, { "text": "截图目录: test-results/screenshots\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:55:02.267Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-34bdc2473567b059beb7", "file": "functional-scenarios.spec.ts", "line": 372, "column": 3 }, { "title": "3.4 分身设置修改", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 13, "parallelIndex": 0, "status": "passed", "duration": 2452, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:49.650Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-9233421f7c81b0665491", "file": "functional-scenarios.spec.ts", "line": 393, "column": 3 } ] }, { "title": "4. Hands 系统", "file": "functional-scenarios.spec.ts", "line": 417, "column": 6, "specs": [ { "title": "4.1 Hands 列表显示", "ok": false, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 13, "parallelIndex": 0, "status": "failed", "duration": 5361, "error": { "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBeGreaterThanOrEqual\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected: >= \u001b[32m1\u001b[39m\nReceived: \u001b[31m0\u001b[39m", "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBeGreaterThanOrEqual\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected: >= \u001b[32m1\u001b[39m\nReceived: \u001b[31m0\u001b[39m\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\functional-scenarios.spec.ts:448:21", "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\functional-scenarios.spec.ts", "column": 21, "line": 448 }, "snippet": "\u001b[0m \u001b[90m 446 |\u001b[39m \u001b[90m// 如果没有空状态,应该有至少 1 个 Hand\u001b[39m\n \u001b[90m 447 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33m!\u001b[39mhasEmptyState) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 448 |\u001b[39m expect(count)\u001b[33m.\u001b[39mtoBeGreaterThanOrEqual(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 449 |\u001b[39m }\n \u001b[90m 450 |\u001b[39m\n \u001b[90m 451 |\u001b[39m \u001b[36mawait\u001b[39m takeScreenshot(page\u001b[33m,\u001b[39m \u001b[32m'13-hands-list'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\functional-scenarios.spec.ts", "column": 21, "line": 448 }, "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBeGreaterThanOrEqual\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected: >= \u001b[32m1\u001b[39m\nReceived: \u001b[31m0\u001b[39m\n\n 446 | // 如果没有空状态,应该有至少 1 个 Hand\n 447 | if (!hasEmptyState) {\n> 448 | expect(count).toBeGreaterThanOrEqual(1);\n | ^\n 449 | }\n 450 |\n 451 | await takeScreenshot(page, '13-hands-list');\n at G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\functional-scenarios.spec.ts:448:21" } ], "stdout": [ { "text": "Hand buttons found: 0\n" }, { "text": "\n========================================\n" }, { "text": "ZCLAW 前端功能验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:54:57.493Z\n" }, { "text": "截图目录: test-results/screenshots\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:52.115Z", "annotations": [], "attachments": [ { "name": "screenshot", "contentType": "image/png", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\functional-scenarios-4-Hands-系统-4-1-Hands-列表显示-chromium\\test-failed-1.png" }, { "name": "video", "contentType": "video/webm", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\functional-scenarios-4-Hands-系统-4-1-Hands-列表显示-chromium\\video.webm" }, { "name": "error-context", "contentType": "text/markdown", "path": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\test-results\\artifacts\\functional-scenarios-4-Hands-系统-4-1-Hands-列表显示-chromium\\error-context.md" } ], "errorLocation": { "file": "G:\\ZClaw_openfang\\desktop\\tests\\e2e\\specs\\functional-scenarios.spec.ts", "column": 21, "line": 448 } } ], "status": "unexpected" } ], "id": "ea562bc8f2f5f42dadea-24005574dbd87061e5f7", "file": "functional-scenarios.spec.ts", "line": 426, "column": 3 }, { "title": "4.2 Hand 触发功能", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 22, "parallelIndex": 0, "status": "passed", "duration": 3493, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:58.959Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-9ddc909591300f97d66d", "file": "functional-scenarios.spec.ts", "line": 454, "column": 3 }, { "title": "4.3 Hand 审批流程", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 22, "parallelIndex": 0, "status": "passed", "duration": 3423, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:55:02.574Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-08c5a6874fd4f6ae1368", "file": "functional-scenarios.spec.ts", "line": 475, "column": 3 }, { "title": "4.4 Hand 任务历史", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 22, "parallelIndex": 0, "status": "passed", "duration": 3448, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:55:06.013Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-8677f2222c2e03f27642", "file": "functional-scenarios.spec.ts", "line": 500, "column": 3 } ] }, { "title": "5. 工作流管理", "file": "functional-scenarios.spec.ts", "line": 516, "column": 6, "specs": [ { "title": "5.1 工作流列表显示", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 22, "parallelIndex": 0, "status": "passed", "duration": 3517, "errors": [], "stdout": [ { "text": "Workflow items found: 0\n" }, { "text": "\n========================================\n" }, { "text": "ZCLAW 前端功能验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:55:13.018Z\n" }, { "text": "截图目录: test-results/screenshots\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:55:09.478Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-ebe9458f4e5a4fe71b98", "file": "functional-scenarios.spec.ts", "line": 525, "column": 3 }, { "title": "5.2 创建工作流", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 20, "parallelIndex": 3, "status": "passed", "duration": 3759, "errors": [], "stdout": [ { "text": "Workflow editor visible: false\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:51.665Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-e579ea4311d8347c4b39", "file": "functional-scenarios.spec.ts", "line": 535, "column": 3 }, { "title": "5.3 工作流执行状态", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 20, "parallelIndex": 3, "status": "passed", "duration": 3312, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:55.436Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-d536d147b08c7a39da8f", "file": "functional-scenarios.spec.ts", "line": 553, "column": 3 }, { "title": "5.4 定时任务配置", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 20, "parallelIndex": 3, "status": "passed", "duration": 3264, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:54:58.761Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-3f29cb5de08044735b67", "file": "functional-scenarios.spec.ts", "line": 566, "column": 3 } ] }, { "title": "6. 团队协作", "file": "functional-scenarios.spec.ts", "line": 581, "column": 6, "specs": [ { "title": "6.1 团队列表显示", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 20, "parallelIndex": 3, "status": "passed", "duration": 3331, "errors": [], "stdout": [ { "text": "Team items found: 0\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:55:02.037Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-200e9c2cad3713eb164b", "file": "functional-scenarios.spec.ts", "line": 590, "column": 3 }, { "title": "6.2 创建团队", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 20, "parallelIndex": 3, "status": "passed", "duration": 3273, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:55:05.381Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-518611cb8b9dd4744bed", "file": "functional-scenarios.spec.ts", "line": 601, "column": 3 }, { "title": "6.3 团队成员管理", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 20, "parallelIndex": 3, "status": "passed", "duration": 3408, "errors": [], "stdout": [ { "text": "\n========================================\n" }, { "text": "ZCLAW 前端功能验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:55:12.095Z\n" }, { "text": "截图目录: test-results/screenshots\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:55:08.669Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-0f6ca26b248b39ef0088", "file": "functional-scenarios.spec.ts", "line": 618, "column": 3 } ] }, { "title": "7. Swarm 协作", "file": "functional-scenarios.spec.ts", "line": 640, "column": 6, "specs": [ { "title": "7.1 Swarm 仪表板显示", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 23, "parallelIndex": 4, "status": "passed", "duration": 3384, "errors": [], "stdout": [ { "text": "Swarm dashboard visible: false\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:55:02.698Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-dbf36efb0f1fe8aea83c", "file": "functional-scenarios.spec.ts", "line": 649, "column": 3 }, { "title": "7.2 创建协作任务", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 23, "parallelIndex": 4, "status": "passed", "duration": 3370, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:55:06.265Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-e60a57b2536be6ce9b76", "file": "functional-scenarios.spec.ts", "line": 659, "column": 3 }, { "title": "7.3 协作模式选择", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 23, "parallelIndex": 4, "status": "passed", "duration": 3582, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:55:09.651Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-e43355e4f2518218e935", "file": "functional-scenarios.spec.ts", "line": 679, "column": 3 } ] }, { "title": "8. 设置页面", "file": "functional-scenarios.spec.ts", "line": 705, "column": 6, "specs": [ { "title": "8.1 打开设置页面", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 23, "parallelIndex": 4, "status": "passed", "duration": 2836, "errors": [], "stdout": [ { "text": "Settings layout visible: true\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:55:13.253Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-89aa02774ce6fda0c876", "file": "functional-scenarios.spec.ts", "line": 712, "column": 3 }, { "title": "8.2 通用设置", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 23, "parallelIndex": 4, "status": "passed", "duration": 3113, "errors": [], "stdout": [ { "text": "Username input visible: true\n" }, { "text": "Theme selector visible: false\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:55:16.108Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-cfd92e4e37065f6e419f", "file": "functional-scenarios.spec.ts", "line": 732, "column": 3 }, { "title": "8.3 模型配置", "ok": true, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 23, "parallelIndex": 4, "status": "passed", "duration": 3548, "errors": [], "stdout": [ { "text": "Model options found: 0\n" }, { "text": "\n========================================\n" }, { "text": "ZCLAW 前端功能验证测试完成\n" }, { "text": "========================================\n" }, { "text": "测试时间: 2026-03-25T23:55:22.810Z\n" }, { "text": "截图目录: test-results/screenshots\n" }, { "text": "========================================\n\n" } ], "stderr": [], "retry": 0, "startTime": "2026-03-25T23:55:19.240Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "ea562bc8f2f5f42dadea-faee21c3e777f7004b5c", "file": "functional-scenarios.spec.ts", "line": 754, "column": 3 }, { "title": "8.4 Gateway 配置", "ok": false, "tags": [], "tests": [ { "timeout": 120000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 14, "parallelIndex": 1, "status": "failed", "duration": 2742, "error": { "message": "Error: locator.isVisible: Error: strict mode violation: locator('[class*=\"gateway\"]').or(getByText(/gateway|服务器|server/i)) resolved to 3 elements:\n 1)