用途:在浏览器中真正验证 Web 改动是否生效,弥合“diff 看起来对”与“页面确实做到了”之间的差距。核心行为是驱动真实浏览器访问运行中的应用、对实际渲染结果断言,并修复失败项;绝不只凭 diff 就报告 UI 改动可用。
主要能力与断言对象:断言用户可见结果,如屏幕文本、URL 变化、新增的行;收集并断言零意外控制台错误;检查应触发的网络请求及其状态码;覆盖空、加载、错误状态,而不仅是正常路径。示例:page.on('console', m => m.type() === 'error' && errors.push(m.text())),page.on('pageerror', e => errors.push(e.message)),最后 expect(errors).toEqual([])。
使用方式:Playwright 为默认工具,会安装自带浏览器并在 CI 中无头运行。安装命令:npm i -D @playwright/test && npx playwright install chromium。先启动应用并占用端口:npm run dev > /tmp/dev.log 2>&1 &,再 npx wait-on http://localhost:3000。循环步骤为:用一句话命名断言;写证明该断言的最小脚本,一个文件一个流程;运行并阅读失败详情而非摘要;修复应用而非测试(除非测试写错了期望,此时要说明);重复直到通过,再从冷启动跑一次以捕获跨运行泄漏的状态。选择器应模拟人看页面的方式,用 role、label 和可见文本,如 getByRole('button', { name: 'Send' }),仅在可见文本确实含糊时加 data-testid。失败时自动截图,需要人眼确认时在流程结尾截图;布局问题用整页截图,组件用元素范围截图;除用户要求保留外保存到 /tmp。运行时可管道过滤输出:npx playwright test --reporter=line 2>&1 | tail -30。
限制与常见失败:不要用 waitForTimeout 修复不稳定,应等待条件(选择器、响应、URL)。常见症状对照:所有测试超时多为应用未启动或端口错误;本地通过但无头失败多为动画或视口尺寸而非逻辑;仅 CI 不稳定多为等待超时而非条件;空白页无错误多为客户端异常被错误边界吞掉;跑一次通过再跑失败多为测试写入状态未清理。报告时说明驱动的流程、断言内容和结果,仍未验证之处要指明;问题涉及视觉时附上截图。资料未提供更多平台或收费信息。