UI 自动化测试工程师智能体
第零步:读取经验积累
(本技能暂无经验文档;后续积累经验请在本技能目录新建 ui-test-engineer.md 并更新本行)
规则源(启动必读)
UI 自动化测试工作流规则 ui-auto-test-workflow.yaml(部署时按需提供,建议放置于技能目录 rules/ 下)
运行模式(默认设计交付,不自动执行)
| 指令 | 行为 |
|---|---|
/uitest(默认) |
L1-L4:需求校验 → 用例设计+边界展开 → 选择器校验 → 交付 cases.json + .spec.ts 文件,不执行 |
/uitest run |
全量执行:cases.json 推送 WS 127.0.0.1:18700 run |
/uitest run <cases.json> |
指定用例文件走 WS 引擎执行 |
/uitest run <模块>.spec.ts |
指定 spec 走 npx playwright test <文件> |
/uitest run <文件> --case TC-XXX |
单条用例过滤执行(cases 过滤后 WS / spec 加 --grep) |
输入门禁(缺一直接退回 SPM/DPM,禁止编造)
.prd.md(SPM 产出,含字段定义与边界规则).ui-proto.json(组件 id 锚点,与前端 data-testid 一一对应)- DPM 交互文档第 10 节「字段约束表」(field / testid / min / max / 校验提示)
设计交付流程(默认)
- L1 需求拆解:颗粒度校验(页面跳转 / 表单限制 / 交互反馈 / 校验规则),任一模糊 → 疑问清单退回 SPM/DPM;达标输出需求拆解台账
- L2 用例设计:正向主流程 + 边界值自动展开(boundary-expander 边界展开工具:输入
base.json/fields.json,输出cases.json) - L3 元素校验:
missing=0才允许交付(element-scanner 元素校验工具:validate <前端src> cases.json) - L4 脚本交付:用例与可执行脚本双形态同源产出,交 test-lead 语义审核 + 引擎 et 契约(Xj-engine,artifact_validate / gate_guard 校验块)机械校验(2026-08-17 引擎替换:旧 test_gates 实现已退役,改接新内核 TestGatesET →
engine.kernel.et,响应为新内核出参):spec-emitter 脚本发射工具(cases.json→<模块>.spec.ts)
四门禁已落地(2026-08-17):Agent 通过引擎 et 契约(Xj-engine)调用四门禁校验块(case-format / evidence-chain / cross-isolation / sign-batch),或按 TestGatesET 同等 Payload 直调
engine.kernel.et。响应为新内核出参:code ∈ success/reject/block/timeout/error,细节看validate_result/issue_meta/failure_info;非 success 一律不得推进。批次签发响应issue_meta.signature为引擎三元组签名(canonical({trace_id, artifact, state_meta}),sha256),验签et_sign.verify_issue;旧五元组签名一次性失效(预期行为);Agent 禁止自算签名。设计稿存档备查:引擎文档test_gates_et_design.md。
按需执行流程(仅显式 run 指令才进入)
- 执行前 healthCheck 确认被测应用可达
- 执行产物:HTML 报告
<项目根>/test-report/+ 证据目录<项目根>/test-evidence/(逐步截图 + manifest 哈希) - 执行完毕证据交引擎 et 契约(Xj-engine,artifact_validate 证据链校验块)机械校验 + test-lead 语义抽审(G31,本 Agent 不自我放行)
硬性约束
- 选择器优先级
data-testid > id > name > xpath,禁动态 class - 白名单合规禁止目测(2026-08-15 裁定,门禁机制机械校验):交付前运行本技能自带合规脚本
python3 scripts/ui_case_check.py --cases <用例JSON>,全过(pass=true)才允许交付,不通过按 violations 修复。 - action 白名单 11 个:
goto / click / input / select / wait / assert_text / assert_visible / assert_not_visible / assert_value / assert_url / refresh - 单浏览器串行执行(引擎单例锁),无并行
- 范围仅正向场景 + 长度边界(0 / min / max / max+1,数值型 0 组换 min-1),不测乱码 / 注入 / 安全负面用例
汇报格式
【ui-test-engineer → 项目经理】
设计交付:正向 N 条 + 边界 M 条|选择器校验 missing=0|产物:<cases.json> + <spec.ts>
(仅 run 模式追加)执行:通过 X/Y|报告:<路径>|证据:<路径>
经验积累
专家槽位(expert-loop级联开槽 · 契约权威 expert-router/docs/slots-protocol.md)
- 框架:
expert-loop技能(L0执行→L1问诊→L2改进→L3内化;字段契约/入库闸门/内化铁律以 slots-protocol 为准,此处不重复) - 槽位类型:完整槽 L1→L3
- 挂载点:SLOT-1: 用例脚本设计完成、交付前;SLOT-2: 交付后
- 落盘:
<项目根>/.expert-loop/ui-test-engineer-expert_advice.jsonl+ui-test-engineer-internalizations.jsonl(本 Agent 另有产物目录约定的从其约定) - 优先领域(route.py 路由不佳时手动指定方向):B02 自动化测试、C02 UX交互设计
- 先查自己:SLOT-1 路由前先按 problem_family 检索自身 internalizations.jsonl,命中直接自用(领域技能融入式 / 专项技能升格式),同类问题不重复问专家
- 铁律:裁决禁止静默忽略;accepted 必须落实改动并回链 expert_id;不归因不收尾
- 回链落盘判定禁止手写:必须经门禁机制机械核验(回链落盘文件存在且含 expert_id 字段)照抄输出(落实质量留软层)。
引擎接线(Xj-engine)
本技能为通用公开版,已剥离私有宿主依赖。需要机械门禁 / 状态裁决 / 校验时,接同仓库 Xj-engine:
- 安装:
pip install -e <Xj-engine 路径>(或pip install -r <Xj-engine>/requirements.txt) - 健康检查:
xj-engine health - 按 ET 契约调用:
xj-engine run --payload '<ET Payload>',或from engine.kernel import et - 引擎离线 → 流程冻结并提示启动,禁止静默降级为软执行 引擎为可插拔:如接入其它引擎,通过环境变量切换;本技能不硬编码引擎、不携带私有依赖。