我在 2 小时内修复了 110 个失败的 E2E 测试,且未编写一行测试代码

发布: (2026年2月23日 GMT+8 05:09)
6 分钟阅读
原文: Dev.to

Source: Dev.to

110 个失败的 Playwright 测试。登录流程、多步骤表单向导、搜索过滤器、文件上传、复杂的用户工作流。有些失败是因为缺少 UI 步骤,有些是上一次运行留下的脏状态,还有些是过时的选择器。我在 2 小时内全部修复,且没有编写任何测试代码。

我构建了一个 playwright‑autopilot 插件来实现这一点。

调试工作流的实际运行方式

当你通过插件运行测试时,一个轻量级的捕获钩子会注入到 Playwright 的工作进程中。它会对 BrowserContext._initialize 进行猴子补丁,添加一个仪器监听器——无需修改 Playwright 的源代码,能够兼容任何已有的安装。

从此以后,所有浏览器操作都会被记录:

  • DOM 快照 – 在每一次点击、填写、选择和导航前后,捕获页面的完整 ARIA 树。当测试失败时,你可以看到失败瞬间以及前一步的页面状态。
  • 网络请求 – 包括 URL、方法、状态码、时序、请求体、响应体。你可以按状态码(例如 400+)、URL 模式或方法进行过滤。
  • 控制台输出 – 错误、警告和日志会与产生它们的具体操作关联。输出范围限定在相关步骤,而不是一大堆文本。
  • 截图 – 在失败点自动截取。

AI 并不会一次性倾倒所有这些数据。它基于 MCP(模型上下文协议),按需拉取数据:先是操作时间线,然后是失败的步骤,接着是 DOM 快照、网络响应和控制台日志。由于有 32 种工具只返回必要信息,设计上保持了 token 的高效利用。

它以用户流程思考,而非选择器

在触及代码之前,代理会映射预期的用户旅程(例如,“用户登录,填写多步骤表单,上传文件,提交”)。它会走一遍真实用户会执行的步骤,并将其与测试实际执行的内容进行比较。

当某个步骤缺失——下拉框未被选择,必填字段未填写,单选按钮未点击——代理会在你的代码库中找到已有的页面对象方法并添加调用。没有新的抽象,差异最小。

它遵循您的架构

  • 兼容页面对象模型(Page Object Model)、业务/服务层,或您团队使用的任何模式。
  • 使用 getByRole()getByTestId()、以 Web 为先的断言。
  • 避免使用 page.evaluate() hack、waitForTimeout,或在 Playwright 操作周围使用 try/catch

如果应用本身出现故障(例如 500 错误、未处理的异常),插件会直接报告这些问题,而不是尝试规避它们。

它学习并记忆

在测试通过后,插件会自动保存已验证的用户流程——即构成理想路径的完整交互序列。下次该测试出现错误时,代理已经了解预期的旅程,能够直接跳到识别变化的步骤。

只需在整个测试套件上运行一次 e2e_build_flows,即可捕获每个测试的旅程;随着时间推移,代理的速度会越来越快。

一个真实的例子

一次结账测试因 “定位器解析到隐藏元素” 而失败。常规的调试步骤:

  1. 打开 trace viewer。
  2. 找到失败的步骤。
  3. 查看 DOM。
  4. 发现从未选择国家下拉框,导致运输部分未渲染。

对于有经验的开发者,这可能需要约 20 分钟。

插件在一次运行中找到了相同的根本原因。它在失败步骤获取了 DOM 快照,在 ARIA 树中看到未选中的下拉框,搜索页面对象中的 selectCountry(),在服务层加入该调用,重新运行测试,测试通过。一次修复,约 12 秒的 AI 处理时间。

开始使用

# Add the marketplace entry
/plugin marketplace add kaizen-yutani/playwright-autopilot

# Install the plugin
/plugin install kaizen-yutani/playwright-autopilot

# Then prompt the AI
Fix all failing e2e tests

尝试一下:https://github.com/kaizen-yutani/playwright-autopilot – 给仓库加星,在你最脆弱的测试上运行它,并告诉我们哪里出问题。

0 浏览
Back to Blog

相关文章

阅读更多 »