关于 playwright-best-practices
面向开发者和命令行 Agent 的 Playwright 测试实践指南,涵盖稳健定位器、自动等待断言、测试隔离及精简输出。
主要功能
- 01选择稳健的定位器
- 02使用 Web 优先断言
- 03隔离测试并采用 Fixtures
- 04复用已认证状态
- 05使用精简命令行报告器
适用场景
- 01检查 Playwright 测试写法
- 02减少命令行 Agent 的测试输出
- 03避免脆弱选择器和固定等待
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ alleneubank/ claude-code --skill playwright-best-practices安装后在 Claude Code 中输入/playwright-best-practices确认已加载。
附带文件playwright-patterns.md
详细介绍
Playwright 最佳实践
CLI 上下文:防止上下文溢出
通过 Claude Code 或任何 CLI Agent 运行 Playwright 测试时,始终使用精简报告器,避免冗长的输出占用上下文窗口。
通过 CLI 运行测试时使用 --reporter=line 或 --reporter=dot。 在 playwright.config.ts 中配置:当设置了 CI 或 CLAUDE 环境变量时,默认使用精简报告器——配置代码片段请参见 playwright-patterns.md。
定位器优先级(从最可靠到最不可靠)
始终优先使用面向用户的属性:
page.getByRole('button', { name: 'Submit' })— 无障碍角色page.getByLabel('Email')— 表单控件标签page.getByPlaceholder('Search...')— 输入框占位符page.getByText('Welcome')— 可见文本(非交互元素)page.getByAltText('Logo')— 图片替代文本page.getByTitle('Settings')— 标题属性page.getByTestId('submit-btn')— 显式测试约定- CSS/XPath — 最后选择,尽量避免
核心规则
- 优先使用 Web 断言:始终使用
await expect(locator).toBeVisible(),不要使用expect(await locator.isVisible()).toBe(true)— Web 优先匹配器会自动等待并重试 - 测试隔离:每个测试都创建自己的数据;测试之间绝不共享状态
- 复用身份验证状态:通过 setup project +
storageState保存已验证身份的状态;不要在每个测试中都通过 UI 登录 - 优先使用 Fixtures 而非 beforeEach:Fixtures 封装设置和清理,按需运行,并且可以组合
反模式
page.waitForTimeout(ms)— 改用自动等待的定位器page.locator('.class')— 改用 role/label/testid- XPath 选择器 — 不可靠,应使用面向用户的属性
- 测试之间共享状态 — 每个测试都创建自己的数据
- 每个测试都通过 UI 登录 — 使用 setup project + storageState
- 不使用 await 的手动断言 — 改用 Web 优先断言
- 硬编码等待 — 依赖 Playwright 的自动等待
- CI/Agent 中使用默认报告器 — 使用
--reporter=line或--reporter=dot
检查清单
- 定位器使用 role/label/testid,而非 CSS 类或 XPath
- 所有断言都使用
await expect()Web 优先匹配器 - 页面对象在构造函数中定义定位器
- 不使用
page.waitForTimeout()— 改用自动等待 - 测试彼此隔离 — 不共享状态
- 通过 setup project 复用身份验证状态
- 在导航前设置网络模拟
- 每个测试单独创建测试数据,或通过 Fixtures 创建
- 为复杂流程添加调试日志
- 在 CI/Agent 环境中使用精简报告器(
line/dot)
页面对象模型、Fixtures、网络模拟和配置示例请参见 playwright-patterns.md。
评论
支持 Markdown