用途:审计 Playwright spec 或 Page Object 中的脆弱定位器,将其改写为更稳健的写法。适用于代码使用 XPath、nth-child、CSS 类名或纯文本选择器,测试间歇性失败于元素查找,或用户要求修复、加固、去除定位器抖动时。
主要能力:逐一标记脆弱定位器并分级——HIGH 为基于索引或位置(nth-child、.nth()、> 链),MEDIUM 为样式类或自动生成类名(.btn-primary、.css-1x2y3z),LOW 为无角色锚点的纯文本匹配。改写按优先级:getByRole(role, { name }),表单用 getByLabel()/getByPlaceholder(),非交互元素用精确 getByText(),无可访问句柄时用 getByTestId(),最后才用稳定父级作用域 CSS。提出替换前需检查真实 DOM,可用 URL 时通过 Playwright MCP 或 npx playwright codegen <url> 获取元素的 role、name、label、data-testid;无 URL 时请用户粘贴 outer HTML,无 DOM 依据的改写标记为 UNVERIFIED。每个替换需验证唯一性(locator.count() === 1)。原地应用改写,保持格式与逻辑不变,每行一个定位器改动。输出改写对照表(旧定位器、新定位器、严重度、是否验证、更安全原因)与完整更新代码;无法修复的定位器列出原因与下一步。可运行 npx playwright test <file> 时重跑受影响的测试并粘贴结果,不能运行需明确说明。
限制与护栏:不得虚构可访问名称、label 或 data-testid,只能使用 DOM 观察值或用户提供值;只改定位器,不改测试逻辑、断言、等待或超时;不通过放宽定位(.first()、任意正则)掩盖抖动;同 role+name 多个元素应通过稳定祖先作用域处理,而非退回索引;Shadow DOM 与 iframe 需 frameLocator() 或穿透处理,应标记而非猜测;最终验证由工程师负责。官方未提供收费、价格、平台与具体安装命令等信息。