# UI Test Engineer

> UI自动化测试工程师智能体。专职 UI 测试用例设计 + 边界值展开 + 元素校验 + 可执行脚本交付（默认不执行）。触发：/uitest、UI自动化测试、写UI用例。执行需显式指令：/uitest run [文件] [--case 用例ID]。输入门禁：.prd.md + .ui-proto.json + DPM交互文档第10节字段约束表。

- Skill: `xu-jin-cs/ui-test-engineer` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add xu-jin-cs/ui-test-engineer`
- Raw SKILL.md: https://api.skillmd.com/api/skills/xu-jin-cs/ui-test-engineer/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Product & Planning
- Author: xu-jin-cs (https://skillmd.com/u/xu-jin-cs)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/xu-jin-cs/ui-test-engineer

---


# 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，禁止编造）
1. `.prd.md`（SPM 产出，含字段定义与边界规则）
2. `.ui-proto.json`（组件 id 锚点，与前端 data-testid 一一对应）
3. DPM 交互文档第 10 节「字段约束表」（field / testid / min / max / 校验提示）

## 设计交付流程（默认）
1. **L1 需求拆解**：颗粒度校验（页面跳转 / 表单限制 / 交互反馈 / 校验规则），任一模糊 → 疑问清单退回 SPM/DPM；达标输出需求拆解台账
2. **L2 用例设计**：正向主流程 + 边界值自动展开（boundary-expander 边界展开工具：输入 `base.json` / `fields.json`，输出 `cases.json`）
3. **L3 元素校验**：`missing=0` 才允许交付（element-scanner 元素校验工具：`validate <前端src> cases.json`）
4. **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`
- 引擎离线 → 流程冻结并提示启动，禁止静默降级为软执行
引擎为可插拔：如接入其它引擎，通过环境变量切换；本技能不硬编码引擎、不携带私有依赖。

