@szc-ft/mcp-szcd-client 0.28.1 → 0.28.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/opencode-extension/skills/local-browser-test/SKILL.md +67 -34
- package/opencode-extension/skills/local-browser-test/lib/ant-adapter.js +716 -0
- package/opencode-extension/skills/local-browser-test/lib/browser-engine.js +2275 -0
- package/opencode-extension/skills/local-browser-test/lib/chrome-finder.js +125 -0
- package/opencode-extension/skills/local-browser-test/lib/expect.js +392 -0
- package/opencode-extension/skills/local-browser-test/lib/shared-deps.js +137 -0
- package/opencode-extension/skills/local-browser-test/lib/test-plan.js +48 -0
- package/opencode-extension/skills/local-browser-test/lib/visual-compare.js +192 -0
- package/opencode-extension/skills/local-browser-test/local-browser-executor.js +735 -0
- package/package.json +1 -1
- package/qwen-extension/qwen-extension.json +1 -1
- package/qwen-extension/skills/local-browser-test/SKILL.md +67 -34
- package/qwen-extension/skills/local-browser-test/lib/ant-adapter.js +716 -0
- package/qwen-extension/skills/local-browser-test/lib/browser-engine.js +2275 -0
- package/qwen-extension/skills/local-browser-test/lib/chrome-finder.js +125 -0
- package/qwen-extension/skills/local-browser-test/lib/expect.js +392 -0
- package/qwen-extension/skills/local-browser-test/lib/shared-deps.js +137 -0
- package/qwen-extension/skills/local-browser-test/lib/test-plan.js +48 -0
- package/qwen-extension/skills/local-browser-test/lib/visual-compare.js +192 -0
- package/qwen-extension/skills/local-browser-test/local-browser-executor.js +735 -0
- package/standard-skill/local-browser-test/SKILL.md +67 -34
- package/standard-skill/local-browser-test/lib/ant-adapter.js +716 -0
- package/standard-skill/local-browser-test/lib/browser-engine.js +2275 -0
- package/standard-skill/local-browser-test/lib/chrome-finder.js +125 -0
- package/standard-skill/local-browser-test/lib/expect.js +392 -0
- package/standard-skill/local-browser-test/lib/shared-deps.js +137 -0
- package/standard-skill/local-browser-test/lib/test-plan.js +48 -0
- package/standard-skill/local-browser-test/lib/visual-compare.js +192 -0
- package/standard-skill/local-browser-test/local-browser-executor.js +735 -0
|
@@ -27,16 +27,46 @@ compatibility:
|
|
|
27
27
|
|
|
28
28
|
## ⚡ 路径解析(必读,避免 ad-hoc 脚本)
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
**执行器内置在 skill 目录中(自包含),会话开始时先解析 skill 路径:**
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
|
-
#
|
|
34
|
-
export
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
# 解析 skill 目录路径(执行器 + lib 都在 skill 目录内)
|
|
34
|
+
export SKILL_DIR=$(node -p "
|
|
35
|
+
const path = require('path');
|
|
36
|
+
// 尝试从 npm 包解析
|
|
37
|
+
try { return path.dirname(require.resolve('@szc-ft/mcp-szcd-client/standard-skill/local-browser-test/SKILL.md')); } catch {}
|
|
38
|
+
// 尝试从 IDE skill 目录查找
|
|
39
|
+
const os = require('os');
|
|
40
|
+
const candidates = [
|
|
41
|
+
path.join(os.homedir(), '.qwen/extensions/szcd-component-helper/skills/local-browser-test'),
|
|
42
|
+
path.join(os.homedir(), '.claude/skills/local-browser-test'),
|
|
43
|
+
path.join(os.homedir(), '.config/opencode/skills/local-browser-test'),
|
|
44
|
+
path.join(os.homedir(), '.trae-cn/skills/local-browser-test'),
|
|
45
|
+
path.join(os.homedir(), '.qoder/skills/local-browser-test'),
|
|
46
|
+
];
|
|
47
|
+
for (const c of candidates) {
|
|
48
|
+
if (require('fs').existsSync(path.join(c, 'local-browser-executor.js'))) return c;
|
|
49
|
+
}
|
|
50
|
+
throw new Error('local-browser-test skill not found');
|
|
51
|
+
")
|
|
52
|
+
echo "SKILL_DIR=$SKILL_DIR"
|
|
53
|
+
|
|
54
|
+
# 执行器路径
|
|
55
|
+
export EXECUTOR="$SKILL_DIR/local-browser-executor.js"
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
后续所有命令直接 `node "$EXECUTOR" --action ...`。
|
|
59
|
+
|
|
60
|
+
**执行器 + lib 内置在 skill 目录中,自带 Ant 适配层 + expect 断言 + testCase 引擎。禁止自己 require puppeteer 写脚本**——自写脚本会丢失:
|
|
61
|
+
- 微前端 frame 探活 + 自动召回
|
|
62
|
+
- `closeAllDropdowns` 跨 frame 清理
|
|
63
|
+
- Ant Select mousedown + VERIFY 回写
|
|
64
|
+
- testCase recovery 重试
|
|
65
|
+
- API 按 frame scope 过滤
|
|
66
|
+
|
|
67
|
+
### 过渡兼容执行器
|
|
38
68
|
|
|
39
|
-
|
|
69
|
+
`local-browser-executor.cjs`(同目录)是 CommonJS 过渡版,仅支持基础诊断(diagnose/screenshot/list-pages/api-check/plan/snapshot/interact/perf/watch)。**Ant 适配层 / testCase DSL / expect 断言仅 `local-browser-executor.js`(ES Module 版)支持。** 优先用 `.js` 版本。
|
|
40
70
|
|
|
41
71
|
## 🎯 三种典型任务(场景驱动)
|
|
42
72
|
|
|
@@ -66,7 +96,7 @@ cat > /tmp/case.json <<'EOF'
|
|
|
66
96
|
"recovery": { "maxRetriesPerStep": 2 }
|
|
67
97
|
}
|
|
68
98
|
EOF
|
|
69
|
-
node "$
|
|
99
|
+
node "$EXECUTOR" --action test-case --test-case-file /tmp/case.json --test-report /tmp/report.json
|
|
70
100
|
```
|
|
71
101
|
|
|
72
102
|
dataset 数组每行跑一遍同样的 steps,`{{name}}` / `{{type}}` 自动替换。`setup.findFrame` 一次定位后所有步骤自动走子应用 frame(微前端默认行为)。
|
|
@@ -77,7 +107,7 @@ dataset 数组每行跑一遍同样的 steps,`{{name}}` / `{{type}}` 自动替
|
|
|
77
107
|
|
|
78
108
|
```bash
|
|
79
109
|
# 单字段
|
|
80
|
-
node "$
|
|
110
|
+
node "$EXECUTOR" --action act --frame-content-contains "数据集" \
|
|
81
111
|
--selector ant-select=资源类型 --click ... # ❌ 不要这样
|
|
82
112
|
|
|
83
113
|
# ✅ 用 testCase 的 antSelect 步骤(在 testCase.steps 内):
|
|
@@ -98,10 +128,10 @@ node "$CLIENT_PATH" --action act --frame-content-contains "数据集" \
|
|
|
98
128
|
|
|
99
129
|
```bash
|
|
100
130
|
# 一次性看 JS 错误 + API 失败 + iframe 状态
|
|
101
|
-
node "$
|
|
131
|
+
node "$EXECUTOR" --action diagnose --url-contains "platform.aicityos.com" --wait 10000
|
|
102
132
|
|
|
103
133
|
# 仅看 API
|
|
104
|
-
node "$
|
|
134
|
+
node "$EXECUTOR" --action api-capture --url-contains "platform.aicityos.com" \
|
|
105
135
|
--url-pattern "/api/" --wait 10000 --include-response-body \
|
|
106
136
|
--output /tmp/api.json
|
|
107
137
|
```
|
|
@@ -113,21 +143,24 @@ node "$CLIENT_PATH" --action api-capture --url-contains "platform.aicityos.com"
|
|
|
113
143
|
```
|
|
114
144
|
Agent / SKILL.md
|
|
115
145
|
→ testCase JSON ← P0 用例首选入口
|
|
116
|
-
→
|
|
117
|
-
→ lib/browser-engine.js (executeTestCase + Ant 适配 + expect)
|
|
118
|
-
→ lib/ant-adapter.js (Select/TreeSelect/Input/Radio/...)
|
|
119
|
-
→ lib/expect.js (validation/locator/url/api + poll)
|
|
146
|
+
→ $SKILL_DIR/local-browser-executor.js ($EXECUTOR)
|
|
147
|
+
→ $SKILL_DIR/lib/browser-engine.js (executeTestCase + Ant 适配 + expect)
|
|
148
|
+
→ $SKILL_DIR/lib/ant-adapter.js (Select/TreeSelect/Input/Radio/...)
|
|
149
|
+
→ $SKILL_DIR/lib/expect.js (validation/locator/url/api + poll)
|
|
120
150
|
→ puppeteer-core + CDP
|
|
121
151
|
→ 用户真实 Chrome / Edge
|
|
122
152
|
```
|
|
123
153
|
|
|
124
|
-
|
|
154
|
+
执行器 + lib 内置在 skill 目录中(自包含),`postinstall` 会把整个 skill 目录复制到各 IDE。
|
|
155
|
+
**禁止 AI 在用户机器上写 ad-hoc puppeteer 脚本**——会丢失:
|
|
125
156
|
- 微前端 frame 探活 + 自动召回
|
|
126
157
|
- `closeAllDropdowns` 跨 frame 清理
|
|
127
158
|
- Ant Select VERIFY 回写
|
|
128
159
|
- testCase recovery 重试
|
|
129
160
|
- API 按 frame scope 过滤
|
|
130
161
|
|
|
162
|
+
`local-browser-executor.cjs`(同目录)是 CommonJS 过渡版,仅支持基础诊断。**Ant 适配层 / testCase DSL / expect 断言仅 `local-browser-executor.js`(ES Module 版)支持。**
|
|
163
|
+
|
|
131
164
|
## 浏览器模式
|
|
132
165
|
|
|
133
166
|
支持两种模式,执行器自动检测优先使用 connect:
|
|
@@ -311,7 +344,7 @@ wujie 微前端子应用渲染在 blob URL iframe 中,**坐标点击无法到
|
|
|
311
344
|
|
|
312
345
|
### 结构化观察(主链路起点)
|
|
313
346
|
```bash
|
|
314
|
-
node
|
|
347
|
+
node "$EXECUTOR" \
|
|
315
348
|
--action observe \
|
|
316
349
|
--url-contains "platform.aicityos.com" \
|
|
317
350
|
--frame-content-contains "数据集目录" \
|
|
@@ -323,7 +356,7 @@ node {client_path}/local-browser-executor.js \
|
|
|
323
356
|
|
|
324
357
|
### 观察后按 index 交互(主链路闭环)
|
|
325
358
|
```bash
|
|
326
|
-
node
|
|
359
|
+
node "$EXECUTOR" \
|
|
327
360
|
--action act \
|
|
328
361
|
--url-contains "platform.aicityos.com" \
|
|
329
362
|
--frame-content-contains "数据集目录" \
|
|
@@ -334,7 +367,7 @@ node {client_path}/local-browser-executor.js \
|
|
|
334
367
|
|
|
335
368
|
### 左侧菜单路径稳定点击
|
|
336
369
|
```bash
|
|
337
|
-
node
|
|
370
|
+
node "$EXECUTOR" \
|
|
338
371
|
--action act \
|
|
339
372
|
--url-contains "platform.aicityos.com" \
|
|
340
373
|
--menu-path "目录管理/数据集目录" \
|
|
@@ -346,7 +379,7 @@ node {client_path}/local-browser-executor.js \
|
|
|
346
379
|
|
|
347
380
|
### 轻量 DOM 断言
|
|
348
381
|
```bash
|
|
349
|
-
node
|
|
382
|
+
node "$EXECUTOR" \
|
|
350
383
|
--action assert \
|
|
351
384
|
--url-contains "platform.aicityos.com" \
|
|
352
385
|
--selector ".ant-table" \
|
|
@@ -357,7 +390,7 @@ node {client_path}/local-browser-executor.js \
|
|
|
357
390
|
|
|
358
391
|
### API 请求/响应捕获(真实浏览器 + 微前端)
|
|
359
392
|
```bash
|
|
360
|
-
node
|
|
393
|
+
node "$EXECUTOR" \
|
|
361
394
|
--action api-capture \
|
|
362
395
|
--url-contains "platform.aicityos.com" \
|
|
363
396
|
--frame-content-contains "数据集目录" \
|
|
@@ -372,7 +405,7 @@ node {client_path}/local-browser-executor.js \
|
|
|
372
405
|
|
|
373
406
|
### API 捕获结果断言
|
|
374
407
|
```bash
|
|
375
|
-
node
|
|
408
|
+
node "$EXECUTOR" \
|
|
376
409
|
--action assert-api \
|
|
377
410
|
--capture-file /tmp/browser-api-capture.json \
|
|
378
411
|
--max-failed 0 \
|
|
@@ -385,7 +418,7 @@ node {client_path}/local-browser-executor.js \
|
|
|
385
418
|
|
|
386
419
|
### 快速诊断(过渡兼容)
|
|
387
420
|
```bash
|
|
388
|
-
NODE_PATH=~/.szcd-mcp/deps/node_modules node
|
|
421
|
+
NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
|
|
389
422
|
--action diagnose \
|
|
390
423
|
--url-contains "platform.aicityos.com" \
|
|
391
424
|
--wait 15000 \
|
|
@@ -394,13 +427,13 @@ NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor
|
|
|
394
427
|
|
|
395
428
|
### 列出所有标签页
|
|
396
429
|
```bash
|
|
397
|
-
NODE_PATH=~/.szcd-mcp/deps/node_modules node
|
|
430
|
+
NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
|
|
398
431
|
--action list-pages
|
|
399
432
|
```
|
|
400
433
|
|
|
401
434
|
### 检查 API 请求状态
|
|
402
435
|
```bash
|
|
403
|
-
NODE_PATH=~/.szcd-mcp/deps/node_modules node
|
|
436
|
+
NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
|
|
404
437
|
--action api-check \
|
|
405
438
|
--url-contains "platform.aicityos.com" \
|
|
406
439
|
--wait 15000
|
|
@@ -408,7 +441,7 @@ NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor
|
|
|
408
441
|
|
|
409
442
|
### 截图
|
|
410
443
|
```bash
|
|
411
|
-
NODE_PATH=~/.szcd-mcp/deps/node_modules node
|
|
444
|
+
NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
|
|
412
445
|
--action screenshot \
|
|
413
446
|
--url-contains "platform.aicityos.com" \
|
|
414
447
|
--filename current-page.png \
|
|
@@ -417,7 +450,7 @@ NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor
|
|
|
417
450
|
|
|
418
451
|
### 执行测试计划 JSON
|
|
419
452
|
```bash
|
|
420
|
-
NODE_PATH=~/.szcd-mcp/deps/node_modules node
|
|
453
|
+
NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
|
|
421
454
|
--action plan \
|
|
422
455
|
--plan-file /tmp/test-plan.json \
|
|
423
456
|
--output /tmp/browser-test-result.json
|
|
@@ -425,7 +458,7 @@ NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor
|
|
|
425
458
|
|
|
426
459
|
### DOM 快照(结构化页面树,类似 browser-use take_snapshot)
|
|
427
460
|
```bash
|
|
428
|
-
NODE_PATH=~/.szcd-mcp/deps/node_modules node
|
|
461
|
+
NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
|
|
429
462
|
--action snapshot \
|
|
430
463
|
--url-contains "platform.aicityos.com" \
|
|
431
464
|
--depth 4 \
|
|
@@ -446,25 +479,25 @@ NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor
|
|
|
446
479
|
### 智能交互(支持 text=、role=、~ 选择器,类似 Playwright)
|
|
447
480
|
```bash
|
|
448
481
|
# 点击包含“构建”文本的按钮
|
|
449
|
-
NODE_PATH=~/.szcd-mcp/deps/node_modules node
|
|
482
|
+
NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
|
|
450
483
|
--action interact \
|
|
451
484
|
--url-contains "jenkins" \
|
|
452
485
|
--click "text=Build"
|
|
453
486
|
|
|
454
487
|
# 在输入框中输入文本
|
|
455
|
-
NODE_PATH=~/.szcd-mcp/deps/node_modules node
|
|
488
|
+
NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
|
|
456
489
|
--action interact \
|
|
457
490
|
--click "#search-input" \
|
|
458
491
|
--type "hello world"
|
|
459
492
|
|
|
460
493
|
# 悬停 + 截图
|
|
461
|
-
NODE_PATH=~/.szcd-mcp/deps/node_modules node
|
|
494
|
+
NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
|
|
462
495
|
--action interact \
|
|
463
496
|
--hover "~ant-menu-item" \
|
|
464
497
|
--screenshot-after
|
|
465
498
|
|
|
466
499
|
# 滚动页面
|
|
467
|
-
NODE_PATH=~/.szcd-mcp/deps/node_modules node
|
|
500
|
+
NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
|
|
468
501
|
--action interact \
|
|
469
502
|
--scroll down --scroll-amount 500
|
|
470
503
|
```
|
|
@@ -476,14 +509,14 @@ NODE_PATH=~/.szcd-mcp/deps/node_modules node {skill_path}/local-browser-executor
|
|
|
476
509
|
|
|
477
510
|
### 性能指标采集(FCP/TTFB/资源统计)
|
|
478
511
|
```bash
|
|
479
|
-
NODE_PATH=~/.szcd-mcp/deps/node_modules node
|
|
512
|
+
NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
|
|
480
513
|
--action perf \
|
|
481
514
|
--url-contains "platform.aicityos.com"
|
|
482
515
|
```
|
|
483
516
|
|
|
484
517
|
### 持续监控模式(定时截图 + 错误检测)
|
|
485
518
|
```bash
|
|
486
|
-
NODE_PATH=~/.szcd-mcp/deps/node_modules node
|
|
519
|
+
NODE_PATH=~/.szcd-mcp/deps/node_modules node "$SKILL_DIR/local-browser-executor.cjs" \
|
|
487
520
|
--action watch \
|
|
488
521
|
--url-contains "platform.aicityos.com" \
|
|
489
522
|
--interval 5000 \
|