pageqa 0.6.0 → 0.8.0
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/README.md +77 -8
- package/dist/agent.d.ts +11 -1
- package/dist/agent.js +78 -102
- package/dist/agent.js.map +1 -1
- package/dist/bsk/tools.d.ts +61 -0
- package/dist/bsk/tools.js +239 -79
- package/dist/bsk/tools.js.map +1 -1
- package/dist/index.js +177 -10
- package/dist/index.js.map +1 -1
- package/dist/locator.d.ts +105 -0
- package/dist/locator.js +263 -0
- package/dist/locator.js.map +1 -0
- package/dist/record.d.ts +41 -0
- package/dist/record.js +166 -0
- package/dist/record.js.map +1 -0
- package/dist/replay.d.ts +190 -0
- package/dist/replay.js +550 -0
- package/dist/replay.js.map +1 -0
- package/dist/report.d.ts +41 -4
- package/dist/report.js +133 -5
- package/dist/report.js.map +1 -1
- package/dist/snapshot.d.ts +15 -0
- package/dist/snapshot.js +167 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/vars.d.ts +25 -0
- package/dist/vars.js +32 -0
- package/dist/vars.js.map +1 -1
- package/examples/smoke-test-page.html +531 -0
- package/examples/smoke-test.md +43 -0
- package/examples/smoke-test.replay.json +389 -0
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -72,7 +72,7 @@ bsk session start # 可选:手动创建 session(不传 --session 时 page
|
|
|
72
72
|
|
|
73
73
|
### 4. Jev 语义断言(可选增强)
|
|
74
74
|
|
|
75
|
-
> **什么是 Jev?** Jev 是 TypeSafe AI 推出的 [System One 模型](https://docs.typesafe.ai),专为结构化决策设计。它不做文本生成,而是直接返回校准后的概率值(如匹配度 0.93
|
|
75
|
+
> **什么是 Jev?** Jev 是 TypeSafe AI 推出的 [System One 模型](https://docs.typesafe.ai),专为结构化决策设计。它不做文本生成,而是直接返回校准后的概率值(如匹配度 0.93)。pageqa 用它做**字面匹配失败后的语义复核**,把「同义词 / 近义表达 / 格式差异」造成的误报 FAIL 纠正过来。
|
|
76
76
|
|
|
77
77
|
**启用方式**:在 `~/.pageqa/config.json` 中添加 `jev` 字段,或设置环境变量:
|
|
78
78
|
|
|
@@ -109,7 +109,7 @@ bsk session start # 可选:手动创建 session(不传 --session 时 page
|
|
|
109
109
|
1. 访问 [console.typesafe.ai/settings/keys](https://console.typesafe.ai/settings/keys)(需等待早期访问权限)
|
|
110
110
|
2. 或通过 Vercel AI Gateway 获取
|
|
111
111
|
|
|
112
|
-
|
|
112
|
+
**工作原理(按需调用)**:`assert_text` 先做字符串包含匹配——**字面命中即成立,不调用 Jev**(省掉一次远端往返,也避免把肉眼可见的文本判成不成立);只有**字面未命中**时才把页面快照文本发给 Jev 做一次语义复核,由 Jev 判断页面内容是否语义匹配断言期望(匹配概率 ≥ `threshold` 即成立)。所以 Jev 只用在真正需要它的地方:同义词、近义表达、格式差异导致的误报 FAIL。每条断言最多一次 Jev 调用,长流程不会被逐条断言拖慢。
|
|
113
113
|
|
|
114
114
|
**降级机制**:若 Jev API 调用失败(网络/超时/鉴权错误),会自动回退到原有的字符串包含匹配,确保测试不因 Jev 服务中断而失败。
|
|
115
115
|
|
|
@@ -120,7 +120,7 @@ bsk session start # 可选:手动创建 session(不传 --session 时 page
|
|
|
120
120
|
└─> pi-agent-core Agent(LLM → 可配置 OpenAI 兼容端点)
|
|
121
121
|
└─> bsk 工具:navigate / snapshot / click / fill / hover / scroll / wait
|
|
122
122
|
└─> 真实浏览器(bsk 连接)
|
|
123
|
-
└─> assert_text ──→ Jev Noul API
|
|
123
|
+
└─> assert_text ──→ 字面命中即成立;未命中才问 Jev Noul API(可选,语义复核)
|
|
124
124
|
└─> 结论与证据 → 报告(文本/JSON)+ 退出码
|
|
125
125
|
```
|
|
126
126
|
|
|
@@ -201,6 +201,27 @@ Token 消耗: 输入 446 / 输出 136 / 缓存读 6720 / 缓存写 0 / 合计 73
|
|
|
201
201
|
- JSON 报告(`--json`)中为 `usage` 字段:`{ input, output, cacheRead, cacheWrite, reasoning, total, calls }`。
|
|
202
202
|
- 若 LLM 端点未返回 usage(合计为 0),会在同一行标注「端点未返回 usage」,避免把 0 误读成真实消耗。
|
|
203
203
|
|
|
204
|
+
### 快照瘦身与复用(省 token 与时间)
|
|
205
|
+
|
|
206
|
+
长页面的一次快照几千至上万字符,而它在长流程里要被读几十次——既吃上下文,也吃推理时间。为此 pageqa 对快照做了两件事:
|
|
207
|
+
|
|
208
|
+
**1)瘦身**:只有原文超过 8000 字符才启用,规则保守且不改变定位:
|
|
209
|
+
|
|
210
|
+
- **带 `@eN` 的行永不截断、永不丢弃**(模型靠它点击,录制/回放的语义定位符也靠它解析 role/name);
|
|
211
|
+
- `@eN` 行的**祖先链永不丢弃**(祖先路径是同名元素消歧的依据,见「回放脚本」一节);
|
|
212
|
+
- 元信息行(`@vom`/`@view`/`@layers`/`L1 page`)保留;空行省略;
|
|
213
|
+
- 其余文本行:超过 160 字符才截断(保留开头);瘦身后仍超 20000 字符时,再从最长的非关键行开始整行省略,短文本(标题/标签/状态提示)优先保留;
|
|
214
|
+
- 结尾附一行说明(`[pageqa] 快照已瘦身:a → b 字符…`),让模型知道有些内容没看到,而不是以为页面就这么点内容。
|
|
215
|
+
|
|
216
|
+
因此**模型看到的文本与定位解析用的文本是同一份**,role/name/祖先路径都不变;`--debug` 会打印每次瘦身的字符数变化。
|
|
217
|
+
|
|
218
|
+
**2)复用**:所有会改动页面的动作(`navigate`/`click`/`fill`/`upload`/`hover`/`scroll`/`wait`)都会让上一份快照失效,因此复用只发生在**纯读取之后**:
|
|
219
|
+
|
|
220
|
+
- 模型「刚 `snapshot` 完就 `assert_text`」→ 断言直接复用那份快照,省掉一次 bsk 往返(断言窗口 5s,`snapshot` 自身去重窗口 1s);注意断言的字面匹配用**瘦身前**的完整快照——瘦身只影响喂给模型的上下文,不影响断言所依据的页面全文;
|
|
221
|
+
- 回放中「上一步是断言、下一步要定位元素」同理;而重试前会 `wait`,等待必然置为失效,所以「每次重试重新取快照」的既有行为保持不变。
|
|
222
|
+
|
|
223
|
+
页面自身异步更新带来的偏差,靠短窗口兜住:窗口外一律重新抓取。
|
|
224
|
+
|
|
204
225
|
### 脚本占位符(运行时变量)
|
|
205
226
|
|
|
206
227
|
脚本里可以写 `${timestamp}` 之类的占位符,CLI 在读取脚本时按本机当前时间展开。同一次运行内所有占位符共用同一时刻,所以「名称 + 时间戳」这类用例既不会重名,也不必每次手工改时间戳:
|
|
@@ -222,6 +243,40 @@ Token 消耗: 输入 446 / 输出 136 / 缓存读 6720 / 缓存写 0 / 合计 73
|
|
|
222
243
|
|
|
223
244
|
未识别的占位符(如 `${PATH}`)原样保留,不会被替换。完整示例:`examples/plm-product-bom.md`。
|
|
224
245
|
|
|
246
|
+
### 回放脚本(零模型重跑同一用例)
|
|
247
|
+
|
|
248
|
+
一条用例被 LLM 跑通一次后,它的操作序列就确定了。加 `--emit-script` 可以把这次的成功操作固化成**回放脚本**,之后用 `--replay` 零模型重跑:不再调用任何大模型,秒级完成,也不必再配置 LLM 端点。适合把「先用模型跑通一次、之后每天用脚本回归」接进 CI。
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
# 1) 先用 LLM 跑通一次,并生成脚本(不给路径时写到源用例同目录 examples/smoke.replay.json)
|
|
252
|
+
pageqa --emit-script examples/smoke.md
|
|
253
|
+
|
|
254
|
+
# 2) 之后每次零模型回放
|
|
255
|
+
pageqa --replay examples/smoke.replay.json
|
|
256
|
+
pageqa --replay examples/smoke.replay.json --json # 机器可读报告,接 CI
|
|
257
|
+
pageqa --replay examples/smoke.replay.json --semantic # 断言改用 Jev 语义判断
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
要点:
|
|
261
|
+
|
|
262
|
+
- **不存 `@eN`**:bsk 的 `@eN` 只在产生它的那次快照内有效,回放时编号会重排。脚本里存的是**语义定位符**(角色 + 可访问名 + 同名序号),回放时用当次快照重新解析,因此页面小幅调整(改文案、加前后缀、换节点类型)后通常仍能命中;解析不到时退回录制时的 target(是 CSS 就还能用),两者都失败就明确报错,而不是猜一个「最像的」元素——点错元素制造的是假通过。
|
|
263
|
+
- **占位符保持可复用**:`自动化测试产品${timestamp}` 会以占位符形式写进脚本——包括**定位符里的名字**(列表里点「刚创建的那条」时,名字里同样带时间戳)与用例原文;回放时重新展开(同一次回放共用一个时刻),所以「创建 xxx${timestamp}」这类用例可以反复回放而不撞名。模型若自己编了值(没沿用占位符),则按录制当次的具体值冻结。
|
|
264
|
+
- **旧脚本会自愈**:早期版本生成的脚本可能在定位符名或用例原文里残留录制当次的具体取值。脚本自带 `recordedValue` / `recordedExpectation` 作为证据,因此 `--replay` 加载时会据此把这些写死的取值还原成占位符(会打印一行「已把脚本里写死的录制取值还原为占位符」),**不必为一个字段重跑一次十几分钟的 LLM 用例**。本地文件路径(`upload` 的 `file`)与 `target`/`url` 刻意不改写。
|
|
265
|
+
- **悬停触发的下拉菜单**:这类用例要写成「先悬停触发按钮、等菜单展开,再点菜单项」(agent 系统提示已内置该约定)。`hover` 会被正常录制与回放,脚本里能看到 `hover` 步骤;直接 click 触发按钮在回放时常常点不开菜单,或点到页面里另一个同名下拉(如详情页同时存在页面级与区域级的「操作」),导致后续步骤连锁失败。
|
|
266
|
+
- **同名元素靠祖先路径消歧**:定位符除「角色 + 可访问名 + 同名序号」外还记录**祖先路径**(如 `menu "Dropdown List"`、`tabpanel "结构"`)。页面里同名元素很多时(多个「操作」下拉、每行一个「删除」),「同名第几个」会随元素数量变化而指错,而「在哪个区域下」更抗漂移。路径名做过截断(长到 60 字符)与层数限制(只留最深 3 层),避免 `main` 这类整页文本混进来。
|
|
267
|
+
- **每步最多重试 3 次**(间隔 500ms,且每次重新取快照):对齐 bsk 侧时序抖动(如 `el-upload` 首次触发失败、重试即成功)与页面动画/弹窗延迟。
|
|
268
|
+
- **定位失败会说明原因**:报告区分三种情况——名字相近的元素存在(改名了)、该角色元素存在但名字都不同(多半点错了另一个同名菜单)、该角色元素一个都没有(菜单/弹窗并未打开)。
|
|
269
|
+
- **失败语义分三类**:
|
|
270
|
+
- **元素未找到 → 跳过并继续,不算失败**。实测教训:录制期模型常顺手点一下「取 消」这类补救动作(提交后弹窗没关,补点一下),回放时页面更顺利、弹窗早已关闭,那个按钮根本不存在。若按失败即停,一条 65 步的用例会在第 12 步整条报废、拿不到后面 53 步的任何信息。跳过会**显式列在报告里**(`跳过 N 步(元素未找到)` 与执行轨迹中的 `[replay-skip]`),不会被悄悄略过。
|
|
271
|
+
- **其它失败**(元素找到了但操作报错、断言不成立)→ 记为失败并**继续跑完**,一次拿到整条用例的完整健康报告;报告指出「回放第 n 步(kind)/对应用例第 k 步:<用例原文>」。退出码仍为非零,失败不会被吞掉。
|
|
272
|
+
- **navigate 失败** → 后续步骤没有意义,直接中止。
|
|
273
|
+
- 想回到「一失败就停」的旧行为:加 `--fail-fast`。
|
|
274
|
+
- **断言默认是字符串包含**:零模型回放不碰任何远端服务。录制时**靠 Jev 语义复核才成立**的断言(如「检出成功」「标题包含 Example」这类字面不出现在页面上的措辞)会逐条标记为语义断言:回放**开始前**就提示脚本里有几条这类断言(字面匹配必然不成立),失败时再提示「可加 `--semantic` 重试」。字面命中的断言不标记——回放用字符串匹配同样能通过。
|
|
275
|
+
- **多场景**:一个脚本文件包含全部场景,逐个回放(各自独立 session 与浏览器窗口),任一场景失败则整体失败、退出码 `1`。
|
|
276
|
+
- **源用例变更**:脚本记录源用例内容哈希,回放时若源文件已改动会在 stderr 提示(只警告、不失败),提示你重新生成脚本。
|
|
277
|
+
- **PASS/FAIL 都会生成**:失败轨迹同样能导出,便于排查「模型这次到底做了什么」;但模型一步都没成功执行时脚本为空,回放会直接拒绝执行,不会伪装成「0 步全通过」。
|
|
278
|
+
- **输出路径写法**:`--emit-script ./replay`、`--emit-script reports/run1.json` 都可以(不必是 `.json` 结尾)。紧跟其后的 token 只有在「像路径」时才被当作输出路径——若它是 `.md`/`.txt` 或含空格的文本,则按用例输入处理,因此 `pageqa --emit-script examples/smoke.md` 也能正常工作。只接受一个用例输入,多给一个会直接报错。
|
|
279
|
+
|
|
225
280
|
### 运行进度日志
|
|
226
281
|
|
|
227
282
|
长流程(建产品 → 建物料 → 检定 → 审批 …)单次可能跑十几分钟。为避免「终端没输出、不知道卡在哪一步」,pageqa 会把**带时间戳的进度日志实时输出到 stderr**(stdout 只保留最终报告,两者互不干扰):
|
|
@@ -249,7 +304,7 @@ Token 消耗: 输入 446 / 输出 136 / 缓存读 6720 / 缓存写 0 / 合计 73
|
|
|
249
304
|
```
|
|
250
305
|
|
|
251
306
|
- 覆盖的关键节点:脚本读取、LLM 就绪、bsk daemon 启动/就绪耗时、浏览器连接数、session、每一步工具调用(编号 + 名称 + 耗时 + 成败)、自动续跑、最终结论与总耗时。
|
|
252
|
-
- 加 `--debug` 可看到更细的明细:每条 `bsk`
|
|
307
|
+
- 加 `--debug` 可看到更细的明细:每条 `bsk` 命令原文与耗时、快照体积与瘦身统计、快照复用、上下文裁剪、Jev 请求详情。
|
|
253
308
|
- 需要把日志与报告分开处理时:报告在 stdout(`--json` 也走 stdout),日志始终在 stderr,`pageqa --json … > report.json` 即可不受日志干扰。
|
|
254
309
|
|
|
255
310
|
### CLI 选项
|
|
@@ -259,6 +314,10 @@ Token 消耗: 输入 446 / 输出 136 / 缓存读 6720 / 缓存写 0 / 合计 73
|
|
|
259
314
|
| `--session <id>` | 指定已存在的 bsk session(默认自动创建) |
|
|
260
315
|
| `--json` | 输出 JSON 报告 |
|
|
261
316
|
| `--suite` | 强制按多场景套件运行 |
|
|
317
|
+
| `--emit-script [path]` | 运行结束后把成功操作固化成回放脚本(默认源用例同目录 `<用例名>.replay.json`;PASS/FAIL 都生成)。`path` 可选,写成路径形式(`./replay`、`reports/run1.json`;含空白用引号) |
|
|
318
|
+
| `--replay <file>` | 零模型回放已有脚本(不调用任何大模型) |
|
|
319
|
+
| `--semantic` | 回放时断言改用 Jev 语义判断(默认纯字符串匹配) |
|
|
320
|
+
| `--fail-fast` | 回放时任一失败(含元素未找到)即停止该场景;默认跑完剩余步骤 |
|
|
262
321
|
| `--init-config` | 在用户目录创建/重置配置文件 |
|
|
263
322
|
| `--out <file>` | 将报告写入文件 |
|
|
264
323
|
| `--debug` | 显示调试日志(bsk 命令与耗时、快照体积、上下文裁剪、Jev 请求详情) |
|
|
@@ -309,12 +368,15 @@ pageqa examples/element-plus-upload.md
|
|
|
309
368
|
└─> bsk 工具:navigate / snapshot / click / fill / upload / hover / scroll / wait / assert_text
|
|
310
369
|
└─> 真实浏览器(bsk 连接)
|
|
311
370
|
└─> 结论与证据 -> 报告(文本/JSON)+ 退出码
|
|
371
|
+
└─> --emit-script:录制成功操作 -> 回放脚本(*.replay.json)
|
|
372
|
+
|
|
373
|
+
回放脚本 -> pageqa --replay -> bsk 操作层 -> 真实浏览器 -> 报告 + 退出码(全程不调用大模型)
|
|
312
374
|
```
|
|
313
375
|
|
|
314
376
|
可用工具(`src/bsk/tools.ts`):
|
|
315
377
|
|
|
316
378
|
- `navigate(url)` 打开网页
|
|
317
|
-
- `snapshot()` 读取页面 aria
|
|
379
|
+
- `snapshot()` 读取页面 aria 树与可见文本(标题、段落、链接、按钮等);返回前会做瘦身(见「快照瘦身与复用」),短期内无页面改动时直接复用上一份
|
|
318
380
|
- `click(target)` / `fill(target, value)` / `hover(target)` 元素交互(target 用 `@eN` 引用或 CSS 选择器)
|
|
319
381
|
- `upload(target, file)` 上传本地文件(target 为触发文件选择器的元素,省略则由 bsk 自动查找文件输入框)
|
|
320
382
|
- `scroll(target)` / `wait(ms)` 滚动与等待
|
|
@@ -322,11 +384,13 @@ pageqa examples/element-plus-upload.md
|
|
|
322
384
|
|
|
323
385
|
**长流程保护(自动续跑)**:一轮对话结束后,如果 agent 自报的进度没跑满(`步骤完成:k/n` 且 `k < n`),或者用例里写了断言但报告只解析到一部分,pageqa 会自动补一次「继续执行剩余步骤」的提示并继续跑,最多 5 轮;续跑后进度与断言数都没有推进就停止。这样可以避免模型做完一两步就自行收尾、却让报告看起来正常的情况。
|
|
324
386
|
|
|
387
|
+
断言的准源是 `assert_text` 工具返回的结构化结果(期望值 + 成立/不成立 + 证据),而不是模型自述的措辞:模型常写成「…,断言成立。」,从文本反推既不可靠,也会把一条**全部通过**的用例报成「用例中的断言全部执行(实际 0/N)」的假失败。只有在拿不到工具结果时(回放、纯文本输入)才退回解析结论文本。
|
|
388
|
+
|
|
325
389
|
## 验证
|
|
326
390
|
|
|
327
391
|
```bash
|
|
328
392
|
pnpm test # 端到端冒烟:需 bsk daemon 已连接浏览器 + LLM 端点可用
|
|
329
|
-
pnpm run test:unit # 仅单元测试:不依赖浏览器与 LLM
|
|
393
|
+
pnpm run test:unit # 仅单元测试:不依赖浏览器与 LLM(报告解析 + 定位符/录制/回放脚本 + 快照瘦身)
|
|
330
394
|
```
|
|
331
395
|
|
|
332
396
|
冒烟测试覆盖:A1 打开+标题断言、A2 元素交互与断言、A3 失败可读原因与退出码、A4 文本/JSON 报告。需 bsk daemon 连接浏览器且 LLM 端点可用。
|
|
@@ -360,12 +424,17 @@ src/
|
|
|
360
424
|
agent.ts 编排器(pi-agent-core Agent + bsk 工具 + 报告)
|
|
361
425
|
llm.ts LLM 后端(pi-ai 自定义 provider -> 可配置 OpenAI 兼容端点)
|
|
362
426
|
log.ts 进度日志(stderr 默认输出;--debug 输出调试明细)
|
|
363
|
-
bsk/tools.ts browserskill
|
|
364
|
-
|
|
427
|
+
bsk/tools.ts browserskill 操作层与工具层(含 upload 文件上传、录制上报)
|
|
428
|
+
record.ts 录制层(把成功操作与断言记成可回放步骤)
|
|
429
|
+
locator.ts 语义定位符(快照解析 + 回放时按 role/name/序号重定位)
|
|
430
|
+
snapshot.ts 快照瘦身(保留可交互节点与祖先链,截断长文本;降低上下文压力)
|
|
431
|
+
replay.ts 回放脚本(格式、读写校验 + 零模型回放引擎)
|
|
432
|
+
report.ts 报告解析、渲染与套件汇总(LLM 运行与回放共用)
|
|
365
433
|
examples/
|
|
366
434
|
smoke.md 示例套件(A1–A3)
|
|
367
435
|
github-star.md GitHub Star 用例
|
|
368
436
|
element-plus-upload.md 文件上传用例(点击 Click to upload 上传本地图片)
|
|
369
437
|
plm-product-bom.md PLM 长流程用例(建产品→目录→物料→检出→待办同意→BOM 插入)
|
|
370
438
|
tests/smoke.test.mjs 端到端验证
|
|
439
|
+
tests/report.test.mjs / tests/replay.test.mjs / tests/snapshot.test.mjs 单元测试(无浏览器/LLM 依赖)
|
|
371
440
|
```
|
package/dist/agent.d.ts
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import { type TestReport, type TokenUsage } from "./report.js";
|
|
2
|
+
import type { ScenarioRecording } from "./replay.js";
|
|
3
|
+
import { type RunVarValue } from "./vars.js";
|
|
2
4
|
export interface AgentOptions {
|
|
3
5
|
session?: string;
|
|
4
6
|
systemPrompt?: string;
|
|
5
7
|
debug?: boolean;
|
|
8
|
+
/** 场景名(套件模式下由 `## 场景名` 提供),写进录制结果供回放脚本使用。 */
|
|
9
|
+
scenarioName?: string;
|
|
10
|
+
/** 本次运行展开 `${...}` 占位符用的取值,录制回放脚本时用于把具体值还原成占位符。 */
|
|
11
|
+
vars?: RunVarValue[];
|
|
12
|
+
/** 将要写入的回放脚本路径(仅用于在报告里标注,落盘由 CLI 负责)。 */
|
|
13
|
+
scriptPath?: string;
|
|
6
14
|
}
|
|
7
15
|
export interface AgentRunResult {
|
|
8
16
|
report: TestReport;
|
|
@@ -10,6 +18,8 @@ export interface AgentRunResult {
|
|
|
10
18
|
json: string;
|
|
11
19
|
transcript: string;
|
|
12
20
|
usage: TokenUsage;
|
|
21
|
+
/** 本次运行录制到的可回放步骤(单场景一条;套件模式逐场景一条)。 */
|
|
22
|
+
recordings: ScenarioRecording[];
|
|
13
23
|
}
|
|
14
24
|
interface Scenario {
|
|
15
25
|
name: string;
|
|
@@ -18,7 +28,7 @@ interface Scenario {
|
|
|
18
28
|
/**
|
|
19
29
|
* 用 pi-agent-core 编排一次自然语言页面测试:注入 bsk 工具,驱动浏览器执行,整理报告。
|
|
20
30
|
* 若配置中启用了 Jev(PAGEQA_JEV_ENABLED=true 且配置了 API Key),
|
|
21
|
-
*
|
|
31
|
+
* 断言在**字面包含未命中**时会请 Jev 做一次语义复核(命中则不调用,省一次远端往返)。
|
|
22
32
|
*
|
|
23
33
|
* 无论用例通过、失败还是中途抛错,结束后都会关闭本次的 bsk session,
|
|
24
34
|
* 从而关掉自动化操作的那个浏览器窗口(Agent Window)。
|
package/dist/agent.js
CHANGED
|
@@ -4,7 +4,9 @@ import { closeSession, createBskTools, ensureSession, ensureBskReady, } from "./
|
|
|
4
4
|
import { JevClient } from "./jev.js";
|
|
5
5
|
import { loadConfig } from "./config.js";
|
|
6
6
|
import { debugLog, info, setDebug } from "./log.js";
|
|
7
|
-
import { addUsage, buildReport, countAssertions, emptyUsage, formatUsage,
|
|
7
|
+
import { addUsage, buildReport, countAssertions, emptyUsage, formatUsage, numberSteps, parseAssertions, parseProgress, renderSuiteText, renderText, summarizeSuite, } from "./report.js";
|
|
8
|
+
import { Recorder } from "./record.js";
|
|
9
|
+
import { restorePlaceholders } from "./vars.js";
|
|
8
10
|
const DEFAULT_SYSTEM_PROMPT = [
|
|
9
11
|
"你是「页面测试 agent」。你根据用户的自然语言测试意图,驱动浏览器完成端到端测试。",
|
|
10
12
|
"",
|
|
@@ -32,6 +34,14 @@ const DEFAULT_SYSTEM_PROMPT = [
|
|
|
32
34
|
"- 只要还有未执行的步骤,就继续调用工具执行下一步,不要中途停下等待用户输入;只有全部步骤都执行(或已明确失败)后才输出进度声明并收尾。",
|
|
33
35
|
"- 工具调用失败(如 click 找不到元素、超时)不等于该步骤失败:必须先重新 snapshot 定位元素后重试;同一操作连续两次失败才可判定该步骤失败。",
|
|
34
36
|
"",
|
|
37
|
+
"下拉菜单(关键):",
|
|
38
|
+
"- 很多组件库(如 element-plus 的 el-dropdown)的下拉菜单是**悬停触发**的:必须先用 hover 悬停在触发按钮上、等菜单展开,再 click 菜单项。直接 click 触发按钮常常点不开菜单。",
|
|
39
|
+
"- 判断菜单是否已展开:snapshot 里出现了对应的菜单项(如 menuitem「上传文档」)。若 click 触发按钮后 snapshot 里没有菜单项,改为 hover 再点,不要继续在同一个位置重复 click。",
|
|
40
|
+
"- 页面上可能有多个同名下拉(例如页面级的「操作」与当前区域级的「操作」)。选错会展开完全不同的菜单,后续步骤连锁失败:请按当前操作的区域选择那一个,并在它展开后确认菜单项与用例要求一致。",
|
|
41
|
+
"- `@eN` 编号只在**最近一次 snapshot 的页面状态下**有效:展开/收起下拉菜单、切换路由、提交表单等任何页面变化都会重新编号。若在你上次 snapshot 之后页面又变化过,必须先重新 snapshot 再取用 `@eN`,不得沿用旧编号——沿用会点到编号相同的另一个元素,而且工具不会报错。",
|
|
42
|
+
"- 若快照里找不到目标元素(例如展开的下拉菜单把下方控件遮住了),不要凭编号猜:先重新 snapshot(必要时先收起菜单),等目标元素出现在快照里再操作。",
|
|
43
|
+
"- 声称某一步完成前必须有依据:快照或工具结果里能看到该操作的效果(选中态、填入值、成功提示)。看不到就说明没生效,要重新定位后重做,不要照抄用例描述交差。",
|
|
44
|
+
"",
|
|
35
45
|
"表单提交失败处理(关键,不得跳过):",
|
|
36
46
|
"- 点击「提交 / 确定 / 保存 / 确认」类按钮后,必须先确认动作是否真的成功:弹窗是否关闭、是否出现成功提示、列表数据是否刷新。",
|
|
37
47
|
"- 若弹窗仍未关闭、仍停留在表单页,或出现「xxx 不能为空」「请输入 xxx」「请选择 xxx」「必填项」等校验提示,一律视为提交失败,此时不得跳过该步骤、不得继续下一步。",
|
|
@@ -59,8 +69,6 @@ const TRIMMED_MARK = "(较早的快照已省略";
|
|
|
59
69
|
// 后面的步骤根本没执行。这里按 agent 自报的进度/已解析断言数补「继续执行」提示,
|
|
60
70
|
// 直到跑满、确实没有进展或达到次数上限为止。
|
|
61
71
|
const MAX_CONTINUATIONS = 5;
|
|
62
|
-
/** 套件报告里每个场景最多回放多少条执行轨迹(末尾优先),避免报告过长。 */
|
|
63
|
-
const TRACE_TAIL_LINES = 25;
|
|
64
72
|
/** 构造续跑提示:只要求接着做,不重复已完成步骤,并再次强调进度声明格式。 */
|
|
65
73
|
function continuePrompt(progress) {
|
|
66
74
|
const tail = "不要重复已完成的步骤;每完成一步记「第 k 步完成:<结果>」,全部步骤执行完后必须单独输出一行「步骤完成:<已完成数>/<总数>」。";
|
|
@@ -138,7 +146,7 @@ function trimOldToolResults(messages, keepRecent, maxChars) {
|
|
|
138
146
|
/**
|
|
139
147
|
* 用 pi-agent-core 编排一次自然语言页面测试:注入 bsk 工具,驱动浏览器执行,整理报告。
|
|
140
148
|
* 若配置中启用了 Jev(PAGEQA_JEV_ENABLED=true 且配置了 API Key),
|
|
141
|
-
*
|
|
149
|
+
* 断言在**字面包含未命中**时会请 Jev 做一次语义复核(命中则不调用,省一次远端往返)。
|
|
142
150
|
*
|
|
143
151
|
* 无论用例通过、失败还是中途抛错,结束后都会关闭本次的 bsk session,
|
|
144
152
|
* 从而关掉自动化操作的那个浏览器窗口(Agent Window)。
|
|
@@ -180,7 +188,26 @@ async function initializeAgent(input, opts, holder) {
|
|
|
180
188
|
const jevClient = new JevClient(loadConfig().jev, debug);
|
|
181
189
|
log("[runAgent] Jev enabled=" + jevClient.enabled);
|
|
182
190
|
info(`[pageqa] 语义断言(Jev)${jevClient.enabled ? "已启用" : "未启用"}`);
|
|
183
|
-
|
|
191
|
+
// 录制器:始终收集本次运行的操作序列,是否落盘由 CLI 的 --emit-script 决定。
|
|
192
|
+
// 「哪条断言靠 Jev 语义复核才成立」由工具层逐条上报(见 bsk/tools.ts),
|
|
193
|
+
// 不再按「整场是否启用 Jev」一刀切——字面命中的断言回放同样能通过,不必标记。
|
|
194
|
+
const recorder = new Recorder(opts.vars ?? []);
|
|
195
|
+
// 断言结果由工具层逐条上报(见 bsk/tools.ts 的 onExec),报告不再依赖模型措辞。
|
|
196
|
+
const assertions = [];
|
|
197
|
+
const tools = createBskTools({
|
|
198
|
+
session,
|
|
199
|
+
jevClient,
|
|
200
|
+
onExec: (event) => {
|
|
201
|
+
recorder.noteTool(event);
|
|
202
|
+
if (event.assert) {
|
|
203
|
+
assertions.push({
|
|
204
|
+
expectation: event.assert.expectation,
|
|
205
|
+
verdict: event.assert.pass ? "pass" : "fail",
|
|
206
|
+
evidence: event.assert.evidence,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
});
|
|
184
211
|
log("[runAgent] 工具数=" +
|
|
185
212
|
tools.length +
|
|
186
213
|
" " +
|
|
@@ -210,8 +237,8 @@ async function initializeAgent(input, opts, holder) {
|
|
|
210
237
|
return trimmed;
|
|
211
238
|
},
|
|
212
239
|
});
|
|
213
|
-
subscribeProgress(agent, events);
|
|
214
|
-
return { agent, events, numbered, steps, startedAt };
|
|
240
|
+
subscribeProgress(agent, events, recorder);
|
|
241
|
+
return { agent, events, numbered, steps, recorder, assertions, startedAt };
|
|
215
242
|
}
|
|
216
243
|
/**
|
|
217
244
|
* 订阅 agent 事件,把工具调用与模型输出记入 events,并把进度回显到 stderr。
|
|
@@ -219,7 +246,7 @@ async function initializeAgent(input, opts, holder) {
|
|
|
219
246
|
* 工具执行进度始终打印(默认可见),让长流程每跑一步都有回显;
|
|
220
247
|
* 避免出现「终端长时间无输出、不知道卡在哪一步」的观感。
|
|
221
248
|
*/
|
|
222
|
-
function subscribeProgress(agent, events) {
|
|
249
|
+
function subscribeProgress(agent, events, recorder) {
|
|
223
250
|
const log = debugLog;
|
|
224
251
|
let toolCount = 0;
|
|
225
252
|
let toolStartedAt = 0;
|
|
@@ -247,6 +274,9 @@ function subscribeProgress(agent, events) {
|
|
|
247
274
|
info("[pageqa] 模型已开始输出,正在推进步骤…");
|
|
248
275
|
}
|
|
249
276
|
events.push(e.assistantMessageEvent.delta);
|
|
277
|
+
// 顺带给录制器喂文本:从「第 k 步完成」自述里跟踪进度,
|
|
278
|
+
// 把后续工具调用映射回用例步骤号(映射不准时为 null,不影响回放)。
|
|
279
|
+
recorder.noteText(e.assistantMessageEvent.delta);
|
|
250
280
|
}
|
|
251
281
|
});
|
|
252
282
|
}
|
|
@@ -269,7 +299,12 @@ async function executeWithContinuations(session, input) {
|
|
|
269
299
|
break;
|
|
270
300
|
const transcriptSoFar = events.join("");
|
|
271
301
|
const progress = parseProgress(transcriptSoFar);
|
|
272
|
-
|
|
302
|
+
// 断言进度以工具结果为准(模型自述的措辞时好时坏,可能一条都解析不出来);
|
|
303
|
+
// 只有在拿不到工具结果时才退回按结论文本解析(与 buildReport 同一条规则,
|
|
304
|
+
// 不能用两者较大值——结论文本解析计数一高就会压过可靠的工具结果)。
|
|
305
|
+
const parsed = session.assertions.length > 0
|
|
306
|
+
? session.assertions.length
|
|
307
|
+
: parseAssertions(transcriptSoFar).length;
|
|
273
308
|
const incomplete = progress
|
|
274
309
|
? progress.done < progress.total
|
|
275
310
|
: expectedAssertions > 0 && parsed < expectedAssertions;
|
|
@@ -304,7 +339,7 @@ async function executeWithContinuations(session, input) {
|
|
|
304
339
|
* 阶段三:根据执行轨迹整理报告。
|
|
305
340
|
* agent 因错误/上下文超限中断时,绝不当作「正常跑完」,而是显式追加强制失败断言。
|
|
306
341
|
*/
|
|
307
|
-
function finalizeResult(session, input) {
|
|
342
|
+
function finalizeResult(session, input, opts) {
|
|
308
343
|
const { agent, events, startedAt } = session;
|
|
309
344
|
const log = debugLog;
|
|
310
345
|
// 循环可能因模型报错/上下文超限而提前结束;此时绝不能当成「正常跑完」。
|
|
@@ -316,7 +351,10 @@ function finalizeResult(session, input) {
|
|
|
316
351
|
if (agentError)
|
|
317
352
|
events.push("\n[agent-error] " + agentError + "\n");
|
|
318
353
|
const transcript = events.join("");
|
|
319
|
-
const report = buildReport(input, transcript);
|
|
354
|
+
const report = buildReport(input, transcript, session.assertions);
|
|
355
|
+
// 报告里标注回放脚本的落盘位置(真正写文件由 CLI 在运行结束后完成)
|
|
356
|
+
if (opts.scriptPath)
|
|
357
|
+
report.script = opts.scriptPath;
|
|
320
358
|
if (agentError) {
|
|
321
359
|
report.status = "fail";
|
|
322
360
|
report.assertions.push({
|
|
@@ -338,6 +376,17 @@ function finalizeResult(session, input) {
|
|
|
338
376
|
json: JSON.stringify(report, null, 2),
|
|
339
377
|
transcript,
|
|
340
378
|
usage,
|
|
379
|
+
// 录制结果与「跑得成不成功」无关:失败运行也能导出脚本(--emit-script),
|
|
380
|
+
// 便于排查「模型这次到底做了什么」。
|
|
381
|
+
recordings: [
|
|
382
|
+
{
|
|
383
|
+
name: opts.scenarioName ?? "场景 1",
|
|
384
|
+
// 用例原文同样按占位符形式写进脚本:这份文本会被回放报告用来指出
|
|
385
|
+
// 「对应用例第 k 步」,与用户的用例文件保持一致才不会看着像写死了值。
|
|
386
|
+
caseSteps: (report.steps ?? []).map((s) => restorePlaceholders(s, opts.vars ?? [])),
|
|
387
|
+
steps: session.recorder.recorded,
|
|
388
|
+
},
|
|
389
|
+
],
|
|
341
390
|
};
|
|
342
391
|
}
|
|
343
392
|
/** runAgent 的实际编排逻辑;session 记录到 holder 供调用方兜底清理。 */
|
|
@@ -345,7 +394,7 @@ async function runAgentCore(input, opts, holder) {
|
|
|
345
394
|
setDebug(opts.debug ?? false);
|
|
346
395
|
const session = await initializeAgent(input, opts, holder);
|
|
347
396
|
await executeWithContinuations(session, input);
|
|
348
|
-
return finalizeResult(session, input);
|
|
397
|
+
return finalizeResult(session, input, opts);
|
|
349
398
|
}
|
|
350
399
|
/** 把一个脚本拆分为多个场景(按 `## ` 二级标题分隔)。无标题则整体作为一个场景。 */
|
|
351
400
|
export function splitScenarios(script) {
|
|
@@ -388,105 +437,32 @@ export async function runSuite(script, opts = {}) {
|
|
|
388
437
|
scenarios.map((s) => s.name).join(" / "));
|
|
389
438
|
for (const [i, sc] of scenarios.entries()) {
|
|
390
439
|
info(`[pageqa] ═══ 场景 ${i + 1}/${scenarios.length}:${sc.name} ═══`);
|
|
391
|
-
const r = await runAgent(sc.body, {
|
|
440
|
+
const r = await runAgent(sc.body, {
|
|
441
|
+
...opts,
|
|
442
|
+
systemPrompt: undefined,
|
|
443
|
+
scenarioName: sc.name,
|
|
444
|
+
});
|
|
392
445
|
results.push(r);
|
|
393
446
|
info(`[pageqa] ═══ 场景 ${i + 1}/${scenarios.length} 结束:` +
|
|
394
447
|
`${r.report.status === "pass" ? "PASS" : "FAIL"} ═══`);
|
|
395
448
|
}
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
:
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
expectation: "[" + (scenarios[i]?.name ?? String(i + 1)) + "] " + a.expectation,
|
|
405
|
-
}))),
|
|
406
|
-
summary: "共 " +
|
|
407
|
-
results.length +
|
|
408
|
-
" 个场景,通过 " +
|
|
409
|
-
results.filter((r) => r.report.status === "pass").length +
|
|
410
|
-
" 个",
|
|
411
|
-
transcript: results
|
|
412
|
-
.map((r, i) => "## " +
|
|
413
|
-
(scenarios[i]?.name ?? String(i + 1)) +
|
|
414
|
-
"\n" +
|
|
415
|
-
r.transcript.trim())
|
|
416
|
-
.join("\n\n"),
|
|
417
|
-
// 逐场景明细:JSON 报告里保留 steps/trace,CI 侧可直接定位失败场景的卡点步骤。
|
|
418
|
-
scenarios: results.map((r, i) => ({
|
|
419
|
-
name: scenarios[i]?.name ?? String(i + 1),
|
|
420
|
-
status: r.report.status,
|
|
421
|
-
steps: r.report.steps ?? [],
|
|
422
|
-
trace: r.report.trace ?? [],
|
|
423
|
-
assertions: r.report.assertions,
|
|
424
|
-
})),
|
|
425
|
-
usage,
|
|
426
|
-
};
|
|
449
|
+
// 汇总口径与回放模式共用同一实现(report.ts 的 summarizeSuite),两种模式报告结构一致。
|
|
450
|
+
const summary = summarizeSuite(scenarios.map((sc, i) => ({
|
|
451
|
+
name: sc.name,
|
|
452
|
+
report: results[i].report,
|
|
453
|
+
usage: results[i].usage,
|
|
454
|
+
})));
|
|
455
|
+
if (opts.scriptPath)
|
|
456
|
+
summary.script = opts.scriptPath;
|
|
427
457
|
return {
|
|
428
458
|
report: summary,
|
|
429
459
|
text: renderSuiteText(summary, results, scenarios),
|
|
430
460
|
json: JSON.stringify(summary, null, 2),
|
|
431
461
|
transcript: summary.transcript,
|
|
432
|
-
usage,
|
|
462
|
+
usage: summary.usage ?? emptyUsage(),
|
|
463
|
+
recordings: results.flatMap((r) => r.recordings),
|
|
433
464
|
};
|
|
434
465
|
}
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
}
|
|
438
|
-
function assertionLine(a) {
|
|
439
|
-
const ev = a.evidence ? " (" + a.evidence + ")" : "";
|
|
440
|
-
return " - [" + verdictTag(a.verdict) + "] " + a.expectation + ev;
|
|
441
|
-
}
|
|
442
|
-
function renderText(r) {
|
|
443
|
-
const lines = [];
|
|
444
|
-
lines.push("=== 页面测试报告 ===");
|
|
445
|
-
lines.push("结论: " + (r.status === "pass" ? "PASS" : "FAIL"));
|
|
446
|
-
lines.push("断言数: " + r.assertions.length);
|
|
447
|
-
for (const a of r.assertions)
|
|
448
|
-
lines.push(assertionLine(a));
|
|
449
|
-
if (r.summary)
|
|
450
|
-
lines.push("摘要: " + r.summary);
|
|
451
|
-
lines.push("---");
|
|
452
|
-
lines.push(r.transcript.trim());
|
|
453
|
-
lines.push("---");
|
|
454
|
-
lines.push(formatUsage(r.usage));
|
|
455
|
-
return lines.join("\n");
|
|
456
|
-
}
|
|
457
|
-
function renderSuiteText(summary, results, scenarios) {
|
|
458
|
-
const lines = [];
|
|
459
|
-
lines.push("=== 页面测试套件报告 ===");
|
|
460
|
-
lines.push("整体结论: " + (summary.status === "pass" ? "PASS" : "FAIL"));
|
|
461
|
-
lines.push("场景数: " + results.length);
|
|
462
|
-
results.forEach((r, i) => {
|
|
463
|
-
lines.push("");
|
|
464
|
-
lines.push("--- 场景 " +
|
|
465
|
-
(i + 1) +
|
|
466
|
-
":" +
|
|
467
|
-
(scenarios[i]?.name ?? "") +
|
|
468
|
-
" [" +
|
|
469
|
-
(r.report.status === "pass" ? "PASS" : "FAIL") +
|
|
470
|
-
"] ---");
|
|
471
|
-
for (const a of r.report.assertions)
|
|
472
|
-
lines.push(assertionLine(a));
|
|
473
|
-
if (r.report.summary)
|
|
474
|
-
lines.push(" 摘要: " + r.report.summary);
|
|
475
|
-
// 执行轨迹:套件模式下不再只给一个「23/42」,把工具调用与步骤自述还原出来,
|
|
476
|
-
// 使用者才能判断「卡在用例的哪一步、该改哪一句」。
|
|
477
|
-
const trace = r.report.trace ?? [];
|
|
478
|
-
if (trace.length > 0) {
|
|
479
|
-
const shown = trace.slice(-TRACE_TAIL_LINES);
|
|
480
|
-
lines.push(` 执行轨迹(末尾 ${shown.length}/${trace.length} 条):`);
|
|
481
|
-
for (const t of shown)
|
|
482
|
-
lines.push(" " + t);
|
|
483
|
-
}
|
|
484
|
-
lines.push(" " + formatUsage(r.usage));
|
|
485
|
-
});
|
|
486
|
-
lines.push("");
|
|
487
|
-
lines.push("汇总: " + summary.summary);
|
|
488
|
-
lines.push("---");
|
|
489
|
-
lines.push(formatUsage(summary.usage));
|
|
490
|
-
return lines.join("\n");
|
|
491
|
-
}
|
|
466
|
+
// 报告渲染(renderText / renderSuiteText)与套件汇总(summarizeSuite)在 report.ts 中实现,
|
|
467
|
+
// 由 LLM 运行与零模型回放共用,保证两种模式的报告结构与汇总口径一致。
|
|
492
468
|
//# sourceMappingURL=agent.js.map
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|