Skip to content
cccskills
FreePublished on GitHub

selector-self-heal

复核运行期自愈提案并写回 PageObject。触发:选择器失效、定位符漂移、自愈提案、proposals.jsonl、用例误报不通过。

The English summary is being prepared. Showing the original description.

See how to install

Files included (1)

  • SKILL.md3.2 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

选择器自愈 — 复核与写回

适用场景

  • 带 --self-heal=on|strict 跑完回归后,终端汇总里出现「选择器自愈」段落
  • 用例失败但功能实际正常,怀疑是定位符过期而非真实缺陷
  • 需要把运行期的临时修复固化回源码

不适用:首次编写定位符(用 locator-replacer);页面真的少了元素(那是真缺陷,不是漂移)。


机制分工

运行期只做两件事:找出可用的替代定位符让用例继续,并把提案写进 reports/self-heal/proposals.jsonl。运行期绝不改源码。 写回是本 skill 的职责,且要经人确认与落库闸门。

这条分界不是洁癖。测试进程里自动改源码,意味着一次跑飞的回归可以静默重写 整个 PageObject 层,而改动淹没在测试输出里没人看见。


复核流程

1. 读提案

python3 -c "import json;[print(json.dumps(json.loads(l),ensure_ascii=False,indent=2)) for l in open('reports/self-heal/proposals.jsonl')]"

每条提案含:intent(常量名、原选择器、注释说明、历史指纹)、 candidates(全部候选及置信度与理由)、chosen(运行期实际采用者,可能为 null)。

2. 逐条判定

现象结论
chosen 为 null,且候选列表为空元素真的不在了 → 真缺陷,不要写回,去查功能
chosen 的 strategy 是 testid 或 id锚点稳定 → 可写回
chosen 的 strategy 是 text文案改动即失效 → 写回前先找有没有 testid 可用
chosen 的 strategy 是 stable-class样式重构即失效 → 优先向前端要 testid
同一常量反复出现在提案里该定位符本身选得不好 → 重新设计,别反复打补丁

触发:chosen 非 null 但 intent 的指纹字段全为 null 时,必须人工确认—— 没有历史指纹意味着判定只依赖注释说明,证据比平时弱。

3. 写回

写回目标是 PageObject 类顶部的定位符常量,只改选择器字符串,不动常量名:

# 改前
LOGIN_BUTTON = "#login-btn"          # P0: 登录按钮
# 改后
LOGIN_BUTTON = '[data-testid="login-submit"]'   # P0: 登录按钮

常量名是全项目引用点,改名会波及所有用例;注释是下次自愈的意图来源, 删掉等于自断依据。

4. 收尾

  • 写回后重跑该用例,不带 --self-heal,确认真绿
  • 确认后清空 proposals.jsonl,避免旧提案被反复复核
  • 若修改涉及定位策略的通用经验,按自我进化机制沉淀(先过落库闸门)

禁止事项

  • 不要把 chosen 为 null 的提案「想办法修好」——那是真缺陷的信号
  • 不要为了让用例变绿而放宽 MIN_CONFIDENCE
  • 不要批量写回:逐条看 strategy 与 confidence,低置信的宁可留着人工处理

相关:自愈边界规则 · locator-replacer · 落库闸门

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

为已有 PageObject 增量添加回归测试点。触发:新增测试点、添加回归点、add test point、增加覆盖、扩展页面方法。

The English summary is being prepared. Showing the original description.

DanielSuo117/velocitai159Updated Sep 28, 2026

POM 分层与 context 共享决策树。触发:架构、分层、POM、Page Object、基类设计、新增角色。

The English summary is being prepared. Showing the original description.

DanielSuo117/velocitai159Updated Sep 28, 2026

浏览器 viewport / headless / 超时分层配置。触发:viewport、浏览器配置、导航超时、headless、slow_mo、incognito。

The English summary is being prepared. Showing the original description.

DanielSuo117/velocitai159Updated Sep 28, 2026

共享 page 下用例离开起点后必须 UI 返回并断言。触发:往返闭合、case round trip、复位超时、scope 共享 page。

The English summary is being prepared. Showing the original description.

DanielSuo117/velocitai159Updated Sep 28, 2026

AST 知识图谱:变更审查、探索、调试、重构。触发:知识图谱、代码审查、影响分析、爆炸半径、重构。

The English summary is being prepared. Showing the original description.

DanielSuo117/velocitai159Updated Sep 28, 2026

一键生成 PageObject + 配套测试。触发:新增页面、生成页面、gen page、create page、添加页面对象。

The English summary is being prepared. Showing the original description.

DanielSuo117/velocitai159Updated Sep 28, 2026

See all skills by DanielSuo117

Report a problem with this skill