playwright-test-agents · planner → generator → healer
下面四格来自同一次 @playwright/test 官方 v1.56+ 运行:planner 写计划、generator 翻成代码、跑绿留报告与 trace,最后 healer 把改坏的 selector 修回可用状态。全程 headless、单 worker、无第三方 API key。
App 是一个前端 todo 列表,状态存 localStorage;过滤器写在 URL hash,切换过滤不能触发硬刷新。
n items left。Enter commit、Escape revert、失焦 commit、空 commit 删除。1import { test, expect, type Page } from "@playwright/test"; 2 3const INPUT = ".new-todo"; 4const ITEMS = ".todo-list li"; 5const COUNT = ".todo-count"; 6 7async function seed(page: Page, titles: string[]) { 8 await page.goto("/todomvc/"); 9 for (const t of titles) { 10 await page.locator(INPUT).fill(t); 11 await page.locator(INPUT).press("Enter"); 12 } 13} 14 15test.describe("TodoMVC · agent-generated e2e (§1–§5)", () => { 16 test("§1 add: appends in order, clears input, updates counter", async ({ page }) => { 17 await page.goto("/todomvc/"); 18 for (const t of ["buy milk", "walk dog", "finish spec"]) { 19 await page.locator(INPUT).fill(t); 20 await page.locator(INPUT).press("Enter"); 21 await expect(page.locator(INPUT)).toHaveValue(""); 22 } 23 await expect(page.locator(ITEMS)).toHaveText(["buy milk", "walk dog", "finish spec"]); 24 await expect(page.locator(COUNT)).toContainText("3 items left"); 25 }); 26 27 // §2 toggle · §3 edit · §4 filter · §5 clear · 全部 8 个 case 见完整文件 28});
Healer 只改一行 selector,断言 toHaveText([...]) 完全不动。跑一次红、healer 读 trace + 页面结构、改回可用状态、再跑一次绿——闭环收在同一个 spec 文件里。