Playwright Test Agents 来了:UI 自动化测试,终于不只是“写脚本”

举报
霍格沃兹测试开发 发表于 2026/06/24 15:04:06 2026/06/24
【摘要】 做 UI 自动化测试的人,应该都遇到过这种场景:脚本刚写完,页面一改,挂了。 选择器昨天还能用,今天失效了。 本地能跑,CI 上失败。 失败截图看了半天,最后发现只是等待时机不稳定。 好不容易让用例跑绿了,过两周又开始红。更尴尬的是,很多团队的 UI 自动化并不是没人写,而是写完以后没人敢长期维护。因为大家心里都清楚:自动化用例生成出来不难,难的是它能不能稳定运行,能不能真实覆盖业务,能不能...

做 UI 自动化测试的人,应该都遇到过这种场景:

脚本刚写完,页面一改,挂了。 选择器昨天还能用,今天失效了。 本地能跑,CI 上失败。 失败截图看了半天,最后发现只是等待时机不稳定。 好不容易让用例跑绿了,过两周又开始红。

更尴尬的是,很多团队的 UI 自动化并不是没人写,而是写完以后没人敢长期维护。

因为大家心里都清楚:

自动化用例生成出来不难,难的是它能不能稳定运行,能不能真实覆盖业务,能不能放心放进 CI。

这也是为什么很多测试开发同学用 AI 写 Playwright 脚本时,会有一种“看起来提效了,但还是很累”的感觉。

AI 可以帮你生成代码,但它经常不知道你的业务边界在哪里,不知道哪些断言有价值,也不知道哪些失败是真缺陷,哪些失败只是脚本不稳定。

所以,Playwright 官方推出的 Test Agents,真正值得关注的地方,不是“它又能生成代码了”,而是它开始把 UI 自动化测试拆成了一条更完整的工作流:

先规划测试,再生成代码,最后修复失败。

这件事对测试开发岗位来说,信号很明显:

以后自动化测试的重点,可能不再只是“我会不会写 Playwright 脚本”,而是“我能不能设计一套稳定的测试智能体工作流”。

一、以前用 AI 写自动化,为什么总是差点意思?

很多人用 AI 写自动化脚本,大概是这个流程:

你说:帮我写一个登录测试。 AI 生成一段 .spec.ts。 你一跑,失败。 你把报错贴回去。 AI 再改。 你再跑。 还是失败。

最后你会发现,所谓“AI 写自动化”,经常变成了:

你在旁边一步步指挥,AI 在旁边一点点试错。

它确实能帮你省掉一部分敲代码的时间,但没有真正解决 UI 自动化的核心问题:

  • 测试场景到底有没有覆盖完整;
  • 业务流程理解得对不对;
  • 断言是不是有价值;
  • 测试数据能不能重复执行;
  • 用例之间有没有隐式依赖;
  • 失败以后到底该修脚本,还是该提缺陷;
  • 这批用例能不能进 CI 长期运行。

这也是很多 UI 自动化项目最后变成“演示时很好看,落地时很难用”的原因。

因为只生成代码,不等于自动化测试建设完成。

二、Playwright Test Agents 改变了什么?

Playwright Test Agents 官方内置了三个 Agent:planner、generator、healer。它们可以单独使用,也可以串成一条 agentic loop:planner 负责探索应用并生成 Markdown 测试计划,generator 负责把测试计划转成 Playwright 测试文件,healer 负责执行测试并自动修复失败用例。

这个设计很有意思。

它不是让 AI 直接生成一堆 .spec.ts,而是在代码之前,先产出一份人能看懂的测试计划。

这一步非常关键。

以前 AI 直接写代码,错了以后你要改 TypeScript。

现在先生成 Markdown 测试计划,计划不对,先改计划。

对测试工程师来说,改一份测试计划,比改一堆选择器、等待条件、断言逻辑,成本低太多。

这就是 Playwright Test Agents 比“直接生成测试代码”更接近工程落地的地方。

三、三个 Agent 分别干什么?


Agent 核心职责 主要产物 适合解决的问题
Planner 探索应用,梳理业务流程,生成测试计划 specs/目录下的 Markdown 文件 测什么、怎么测、断言什么
Generator 根据测试计划生成 Playwright 测试代码 tests/目录下的 .spec.ts 文件 把测试设计落成自动化脚本
Healer 执行失败用例并尝试修复 修复后的测试代码,或带说明的 skip 选择器失效、等待不足、数据失效等执行层问题


这里一定要分清楚:

Planner 解决的是测试设计问题。Generator 解决的是代码生成问题。Healer 解决的是执行稳定性问题。

不要把 Healer 当成万能修复器。

如果页面选择器变了、等待不足、测试数据过期,Healer 可以尝试修。

但如果需求变了、业务规则变了、接口字段变了、页面流程重构了,那就应该回到 Planner 阶段,重新调整测试计划,而不是让 Healer 硬修。

否则很容易出现一种危险情况:

用例是跑绿了,但真正的业务问题被“修没了”。

四、怎么初始化 Test Agents?

在项目根目录执行:

npx playwright init-agents

更推荐根据你使用的工具链明确指定:

# VS Code
npx playwright init-agents --loop=vscode

# Claude Code
npx playwright init-agents --loop=claude

# Codex
npx playwright init-agents --loop=codex

# opencode
npx playwright init-agents --loop=opencode

Playwright 官方发布说明里也给出了通过 npx playwright init-agents 为不同 agentic loop 生成最新 Agent 定义文件的方式。([Playwright][2])

这些 Agent 定义文件,可以理解成 Playwright 官方给 AI 准备的“角色说明书”。

它会告诉 AI:

  • Planner 应该如何探索页面;
  • Generator 应该如何根据计划生成测试;
  • Healer 应该如何处理失败用例;
  • 测试计划应该放在哪里;
  • 测试代码应该放在哪里;
  • Agent 之间如何交接上下文。

这里补充一个容易踩坑的点:

Playwright 升级后,建议重新执行 init-agents。

因为 Agent 定义文件不会自动跟着版本升级。如果 Playwright 已经新增了能力,但你本地的 Agent 定义还是旧的,Agent 可能仍然按旧规则执行。

另外,VS Code 使用相关 agentic 能力时,官方文档要求版本在 v1.105 及以上。

五、seed.spec.ts 是成败关键

很多人用 AI 做 UI 自动化失败,不是因为 AI 不会写脚本,而是因为一开始没有给它一个稳定入口。

企业后台系统通常都有一堆前置条件:

  • 登录;
  • 验证码;
  • 权限;
  • 租户;
  • 菜单;
  • 测试账号;
  • 初始化数据;
  • 前置配置。

如果这些没有处理好,Planner 可能一直停留在登录页,或者生成一堆偏离目标模块的测试计划。

所以在跑 Test Agents 之前,建议先写好 seed.spec.ts。

它不是业务测试用例,而是环境入口。

你可以把它理解成:

告诉 Agent:从哪里开始,以什么身份进入系统,用什么数据做测试。

示例:

import { test, expect } from'./fixtures';

test('seed: 商品管理模块入口', async ({ page }) => {
// 1. 登录后台系统
await page.goto('/admin/login');
await page.getByPlaceholder('请输入账号').fill('test_admin');
await page.getByPlaceholder('请输入密码').fill('123456');
await page.getByRole('button', { name: '登录' }).click();

// 2. 确认进入首页
await expect(page.getByText('首页')).toBeVisible();

// 3. 进入目标模块
await page.getByText('商品管理').click();
await page.getByText('商品列表').click();

// 4. 确认页面到达可测试状态
await expect(page.getByRole('button', { name: '添加商品' })).toBeVisible();
});

这个 seed 不一定要写复杂断言。

它的核心价值是:

  • 固定登录方式;
  • 固定页面入口;
  • 固定测试账号;
  • 固定 fixture;
  • 固定代码风格;
  • 减少 Agent 探索成本。

对测试开发来说,seed.spec.ts 写得稳不稳,往往直接决定后面生成的测试计划和测试代码是否靠谱。

六、推荐的实际工作流

我不建议一上来就让 AI 直接生成完整测试代码。


这套流程里,测试工程师不是被替代了,而是换了一个位置。

以前你主要是在写脚本、调脚本、修脚本。

现在你更像是在管理一条测试生产线:

  • 你负责定义测试目标;
  • 你负责审核测试计划;
  • 你负责判断断言质量;
  • 你负责控制哪些用例可以进 CI;
  • 你负责判断失败到底是脚本问题,还是产品缺陷。

这才是测试开发真正应该升级的地方。

七、Planner:先规划,再写代码

我个人非常建议先跑 Planner。

原因很简单:

测试计划偏了,改 Markdown 很便宜;测试代码偏了,返工成本就高了。

你可以这样给 Planner 提需求:

基于 tests/seed.spec.ts,
为 CRMEB 商城后台的“添加商品”流程生成测试计划。

要求覆盖:
1. 正常添加商品流程;
2. 必填字段为空的校验;
3. 商品价格、库存等边界值;
4. 图片上传异常;
5. 保存成功后的列表展示;
6. 数据清理或避免污染后续用例。

一个好的测试计划,不应该只是:

点击新增。 填写表单。 点击保存。 校验保存成功。

这太浅了。

真正有价值的测试计划,至少应该包含:

  • 场景名称;
  • 前置条件;
  • 操作步骤;
  • 测试数据;
  • 预期结果;
  • 异常情况;
  • 断言点;
  • 是否适合自动化;
  • 数据清理策略;
  • 和 seed 的关系。

如果 Planner 生成的计划只停留在页面点击层面,那就说明还需要继续补充业务规则和测试边界。

测试开发要做的不是盲目接受 AI 生成结果,而是用测试经验去审它。

八、Generator:把测试计划落成可执行代码

当 specs/ 目录下的 Markdown 测试计划经过评审后,再交给 Generator。

可以这样提示:

请基于 specs/product-create.md 生成 Playwright 测试代码。

要求:
1. 使用 tests/seed.spec.ts 中的 fixture 和登录方式;
2. 优先使用 getByRole、getByLabel、getByText 等稳定定位方式;
3. 每个核心业务步骤都要有有效断言;
4. 不要让多个用例依赖同一份脏数据;
5. 生成的测试文件放到 tests/product-create.spec.ts。

这里不要只关心代码能不能跑通。

更要看代码是否符合团队自动化规范:

  • locator 是否稳定;
  • 是否避免硬编码等待;
  • 是否有清晰断言;
  • 是否能重复执行;
  • 是否方便失败排查;
  • 是否和已有 fixture、Page Object、测试数据工厂保持一致;
  • 是否会污染环境数据。

AI 可以生成代码,但自动化测试代码能不能长期维护,还是要靠测试开发把关。

九、Healer:适合修执行失败,不适合修需求变化

Healer 很适合处理下面这些问题:

  • 按钮文案轻微变化;
  • 选择器失效;
  • 页面加载慢导致等待不足;
  • 测试数据过期;
  • 弹窗遮挡;
  • 元素位置或层级变化;
  • 断言时机不稳定。

可以这样使用:

帮我修复 tests/product-create.spec.ts 中失败的测试。

请先分析失败原因,再尝试修复选择器、等待条件或测试数据。
如果判断是功能缺陷,不要强行修改测试逻辑,请说明原因。

但下面这些问题,不应该交给 Healer 硬修:

  • 需求逻辑变了;
  • 页面流程重构了;
  • 接口字段变了;
  • 权限模型调整了;
  • 商品创建规则变化了;
  • 原来的断言已经不符合业务预期。

这类问题应该回到测试计划层重新修。

否则 Healer 可能会为了让测试通过,把原来有价值的断言删弱。

比如原来是:

await expect(page.getByText('商品创建成功')).toBeVisible();

结果被改成:

await expect(page.locator('body')).toBeVisible();

这类代码虽然可能“跑绿”,但测试价值已经没了。

自动化测试最怕的不是红,而是绿得没有意义。

十、它和 Playwright MCP、CLI怎么区分?

现在很多测试同学会同时接触 Playwright MCP、Playwright CLI、Test Agents,容易混在一起。

可以这样理解:


能力 更适合做什么 典型场景 注意点
Playwright MCP 让 AI 感知页面并操作浏览器 对话式探索页面、单条用例调试、排查元素定位 上下文信息多,Token 成本相对更高
Playwright CLI 用命令行方式驱动浏览器 编码 Agent、脚本化操作、CI 辅助、低 Token 浏览器控制 更偏命令式,适合工程化流程
Test Agents 模块级测试建设工作流 从测试计划到代码生成,再到失败修复 需要 seed、评审和团队规范配合


Playwright 官方介绍 playwright-cli 时,也强调它是面向 coding agents 的命令行浏览器自动化工具,特点是通过简洁 CLI 命令提供更节省 Token 的浏览器控制。([Playwright][3])

所以三者不是互相替代关系。

更合理的组合方式是:

  • MCP:用于探索页面、调试单条用例、辅助定位元素;
  • CLI:用于低成本命令式浏览器控制,适合工程化和 CI 场景;
  • Test Agents:用于一个业务模块从测试计划到可执行回归集的建设。

简单来说:

MCP 更像 AI 的眼睛和手。CLI 更像 AI 的命令行工具箱。Test Agents 更像一套测试建设流程。

十一、从测试开发视角看,它真正补上了什么?

从测试开发角度看,Playwright Test Agents 真正补上的不是代码生成。

代码生成早就有了。

它真正补的是两个东西。

1. 测试计划可审计

以前 AI 直接生成代码,测试工程师经常很难判断它到底理解了什么。

现在中间有 Markdown 测试计划,团队可以先评审测试设计,再决定是否生成代码。

这对企业级测试资产非常重要。

因为自动化测试不是跑一次就完事,而是要长期维护、持续执行、服务版本交付。

2. 失败修复更闭环

以前自动化失败后,很多团队会陷入一个尴尬状态:

失败了没人看; 看了没人修; 修了不敢合; 最后 CI 里长期挂着一堆红色用例。

Healer 至少让执行层面的失败有机会进入一个自动分析和自动修复流程。

但这里一定要加一个前提:

Healer 只能提高维护效率,不能替代失败归因。

失败到底是测试脚本问题、环境问题、数据问题,还是产品缺陷,最后仍然需要测试开发判断。

十二、哪些项目适合先试?

不建议一开始就拿复杂业务全量试。

更推荐从下面这类模块开始:

  • 登录;
  • 用户管理;
  • 商品新增;
  • 订单查询;
  • 购物车;
  • 基础配置;
  • 后台列表页;
  • 简单审批流;
  • 表单新增和编辑流程。

这些模块有几个特点:

  • 页面路径清晰;
  • 测试数据可控;
  • 业务规则相对稳定;
  • 正向和异常场景容易拆;
  • 适合沉淀成回归用例。

不太建议一开始就拿下面这些场景试:

  • 强依赖第三方支付;
  • 强依赖短信、邮箱、验证码;
  • 页面频繁改版;
  • 权限和租户关系复杂;
  • 测试数据难清理;
  • 业务规则还没定稿;
  • 大量图形化、Canvas、复杂拖拽类页面。

这类场景不是不能做,而是不适合作为第一批试点。

十三、团队落地时,建议加上这几条规范

如果团队真的准备尝试 Test Agents,建议提前加几条规范。

否则很容易变成“AI 生成一堆没人维护的测试代码”。

1. specs 和 tests 文件名尽量一一对应

例如:

specs/product-create.md
tests/product-create.spec.ts

这样失败回溯时,能快速知道这条自动化用例对应哪份测试计划。

2. 每个测试计划都要人工评审

不要 Planner 生成完就直接交给 Generator。

至少要看这几个点:

  • 场景是否真实;
  • 预期是否准确;
  • 断言是否有效;
  • 数据是否可重复;
  • 是否遗漏异常路径;
  • 是否适合自动化。

3. Generator 生成的代码不能直接进主干

生成代码后至少做一次 code review。

重点看:

  • locator 是否稳定;
  • 是否有硬等待;
  • 是否有无意义断言;
  • 是否复用了团队 fixture;
  • 是否存在用例间数据依赖;
  • 是否会污染测试环境。

4. Healer 修复后的代码也要 review

Healer 自动修复不代表一定正确。

尤其要警惕一种情况:

它为了让测试通过,把原本有价值的断言删弱了。

一旦断言被弱化,用例虽然变绿,但质量防线也被拆掉了。

5. CI 里不要一上来就高并发

Playwright 本身支持并发执行,但对新生成的 UI 自动化测试来说,不建议一开始就在 CI 中高并发运行。

尤其是后台系统、管理系统、测试数据共享较多的项目,先保证稳定性,再逐步提高并发。

自动化测试的第一目标不是跑得快,而是跑得可信。

十四、测试工程师会被替代吗?

很多测试同学看到 Test Agents,第一反应可能是:

这是不是又要替代测试工程师了?

我反而觉得,它替代的是低质量、重复性的脚本劳动。

但它替代不了测试工程师真正有价值的部分。

比如:

  • 业务风险判断;
  • 测试策略设计;
  • 场景优先级判断;
  • 缺陷归因;
  • 断言质量评审;
  • 数据隔离设计;
  • 自动化资产治理;
  • CI 准入标准;
  • 质量风险沟通。

AI 可以帮你生成测试计划,但计划是否合理,需要人判断。

AI 可以帮你生成测试代码,但代码是否能长期维护,需要人判断。

AI 可以帮你修失败用例,但失败到底是脚本问题还是产品缺陷,仍然需要人判断。

所以测试开发岗位不会因为 Test Agents 消失。

但岗位能力模型会变化。

以后更有价值的测试开发,不只是会写 Playwright,而是能设计一套稳定的测试智能体工作流。

十五、写在最后

UI 自动化这些年一直有个老问题:

脚本越写越多,信心却没有同步变强。

因为很多团队缺的不是工具,而是一套从测试设计、代码生成、失败修复到 CI 准入的完整链路。

Playwright Test Agents 值得关注,正是因为它开始把这条链路拆清楚了:

Planner 负责测试计划。Generator 负责测试代码。Healer 负责失败修复。

但最终能不能落地,还是取决于测试工程师。

你要会写 seed,知道怎么给 Agent 一个稳定入口; 你要会审测试计划,判断场景覆盖是否合理; 你要会看生成代码,判断断言和数据是否可靠; 你还要会分析失败,判断是脚本问题、环境问题,还是产品缺陷。

未来自动化测试不会只是“写脚本”。

它会越来越像一套由 AI Agent 参与的测试工程体系。

会用 Playwright,只是基础能力。

真正拉开差距的是:

你能不能把 AI、测试设计、自动化框架、测试数据、CI 和质量策略,串成一条能在真实项目里跑起来的工程链路。

霍格沃兹测试开发学社,是一个专注软件测试、自动化测试、人工智能测试与测试开发的技术交流社区

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。