用途:扫描测试套件中会导致 E2E 测试不稳定的脆弱选择器与时序隐患,在下次 UI 变更前提前发现。适用于 Cypress、Playwright、Selenium、WebdriverIO、Robot Framework 等带 E2E/UI 测试的仓库。
触发方式:可用“Why are my tests flaky?”“Scan my tests for brittle selectors”“Audit the selectors in cypress/e2e”等指令启动。
工作流程:先在 cypress/、e2e/、tests/、test/ 下及 .spec.、.test.、.cy.、*.robot 中定位测试文件;逐类扫描隐患并报告 file:line。
隐患类别与可替代方案:绝对 XPath(如 /html/body/div[3]/div/button)→ getByRole('button', { name: ... });nth-child/nth-of-type 链(如 .list > div:nth-child(4))→ 项目上加 data-testid;索引选择(.eq(2)、Robot 的 [1])→ 按可访问名称过滤;生成类名(.css-1q2w3e、.sc-bXyZ、.MuiButton-root-42、.jss127、.abc123)→ data-testid 或 role+name;深层后代链(4 层以上)→ 单一稳定锚点属性;可翻译文本选择器(text=Submit、contains('Save'))→ role+data-testid,文本仅用于用户可见断言;硬编码等待(sleep(5)、waitForTimeout(3000)、cy.wait(2000))→ 等待条件(元素状态、网络空闲、显式响应);缺少 cy.wait('@alias') 的网络竞态 → intercept 后等待别名响应。
输出:按隐患类别与文件统计数量,找出最差 5 个文件,并为每条发现给出具体替换(如针对已知组件的 .list > div:nth-child(4) 建议 data-testid="invoice-row" 并按发票号过滤)。报告含表格(Hazard/Count/Worst file)、Top findings 与等级:A 为 0 隐患、B 为 <5、C 为 <20、D 为 <50、F 为 ≥50 或存在绝对 XPath。
限制:纯代码阅读,不启动浏览器、不用 MCP、无需注册;具体安装命令、收费与价格暂未提供。