Goldseam:借本地 LLM 为 Cypress 断链选择器生成可审查修复
开源工具 Goldseam 用本地或自带大模型修复 Cypress 失效选择器,修复结果以 git diff 形式提交,…
在端到端测试中,选择器因 DOM 变更而失效是工程师最常踩的坑之一。开源项目 Goldseam 给出了一个思路:让本地或自带的大模型来"修补"这些失效选择器,并把每一次修复都变成可审查、可回滚的 git diff,而不是在运行时悄悄替换定位符。
项目定位
Goldseam 是一个面向 Cypress 的插件与 CLI,定位是 Cypress Cloud 官方功能 cy.prompt() 的开源替代品。它的核心承诺是:模型只能改"选择器字符串",永远不能改写断言步骤;修复结果必须经过验证后再以 diff 形式落地,不在运行时偷偷换元素。
项目以日本金缮(kintsugi)工艺为名——修复本身可见、可审视,并成为测试对象故事的一部分。
工作流程
一次完整的"愈合"遵循六层阶梯:
- Triage(分流):判断失效是真正的选择器漂移,还是时序问题。
- Propose(提议):模型在脱敏后的 DOM 与可访问性树快照上提出最小改动,仅限选择器字符串。
- Resolve(解析):在捕获的 DOM 静态环境下验证提议是否能命中目标,命中数为 0 或有歧义则重试(最多 3 次)。
- Oracle(裁判):与历史"绿色"时的元素身份比对,避免修复到一个外观相似但语义错误的元素。
- Rerun-test(重跑单测):单独重跑该用例,确认通过。
- Rerun-spec(重跑整文件):整份 spec 重跑,全部通过才算真正"愈合"。
任何一层失败都明确报告为"放弃"或"失败",不会出现"伪绿色"的乐观结果。
与同类方案的差异
Goldseam 在 README 中给出了一张对比表,核心差异有三:
- 模型运行位置:默认走本地 Claude Code CLI(
claude -p),也支持 Ollama、任意 OpenAI 兼容端点或自定义可执行程序;不强制走厂商云。 - 修复落点:以 diff 形式提交,由人 review;Cypress Cloud 的 cy.prompt() 在运行时重新解析,Healenium 等"运行时 healer"则在运行时静默替换定位符。
- 失败诚实度:放弃是第一类结果,会被显式报告;而运行时 healer 可能给出"看起来绿、其实是假绿"的通过。
此外,Goldseam 把"用自然语言写步骤"与"自动修复断链"拆成两个独立工具,避免了把应用回退、步骤歧义、错误匹配三类失败原因混在一起。
隐私与 CI 成本
- 模型只能看到脱敏后的 DOM + aria tree + 错误信息,不会接触应用源码。
- 绿色用例保持原样,零写入;只有失败时才生成捕获物。
- 自然语言步骤在本地翻译一次,结果缓存为可提交的
.goldseam-prompts/文件,CI 回放时不再调用模型,token 成本接近零。
支持的模型与快速上手
已验证可端到端跑通的运行器包括:
- Claude Code CLI(默认,
claude -p) - Ollama 本地模型(已在 14B 参数的 Qwen 上验证)
- 任意 OpenAI 兼容端点(含自建 GPU 部署,附 Modal 配方)
- 任意命令行可执行程序(stdin 进、stdout 出)
集成只需两步:npm install --save-dev goldseam 加 npx goldseam init。失败时运行 npx goldseam heal 生成修复 diff,开发者 review 后提交即可。
适用边界
Goldseam 解决的是"选择器漂移"这一类可枚举的测试维护问题,对 DOM 大改、流程重构或业务断言变化无能为力。它把这类失败与模型判断错误分开呈现,让团队能更精确地区分"应用回退"和"测试自身脆弱"。项目以 MIT 协议开源,仓库地址与详细文档可在其 Hacker Show HN 帖中获取。
