关于 playwright-best-practices
为编写、调试和维护 Playwright 测试的开发者提供参考指南。按活动整理的内容涵盖测试类型、浏览器场景、架构和项目配置。
主要功能
- 01E2E、组件和 API 测试指南
- 02移动端与浏览器 API 参考
- 03调试及不稳定测试建议
- 04测试架构与维护指导
- 05CI、配置和性能参考
适用场景
- 01规划新的 Playwright 测试套件
- 02排查不稳定测试和超时
- 03选择测试架构模式
- 04配置 CI 和并行执行
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ currents-dev/ playwright-best-practices-skill --skill playwright-best-practices安装后在 Claude Code 中输入/playwright-best-practices确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
advanced/authentication-flows.mdauthentication.mdclock-mocking.mdmobile-testing.mdmulti-context.mdmulti-user.mdnetwork-advanced.mdthird-party.mdarchitecture/pom-vs-fixtures.mdtest-architecture.mdwhen-to-mock.mdbrowser-apis/browser-apis.mdiframes.mdservice-workers.mdwebsockets.mdcore/annotations.mdassertions-waiting.mdconfiguration.mdfixtures-hooks.mdglobal-setup.mdlocators.mdpage-object-model.mdprojects-dependencies.mdtest-data.mdtest-suite-structure.mdtest-tags.mddebugging/console-errors.mddebugging.mderror-testing.mdflaky-tests.md详细介绍
Playwright 最佳实践
本技能全面介绍 Playwright 测试开发的各个方面,从编写新测试到调试和维护现有测试套件。
按活动分类的参考指南
根据当前任务查阅以下参考内容:
编写新测试
适用场景:创建新的测试文件、编写测试用例、实现测试场景
| 活动 | 参考文件 |
|---|---|
| 编写端到端测试 | test-suite-structure.md, locators.md, assertions-waiting.md |
| 编写组件测试 | component-testing.md, test-suite-structure.md |
| 编写 API 测试 | api-testing.md, test-suite-structure.md |
| 编写 GraphQL 测试 | graphql-testing.md, api-testing.md |
| 编写视觉回归测试 | visual-regression.md, canvas-webgl.md |
| 使用 POM 组织测试代码 | page-object-model.md, test-suite-structure.md |
| 设置测试数据/夹具 | fixtures-hooks.md, test-data.md |
| 处理身份验证 | authentication.md, authentication-flows.md |
| 测试日期/时间功能 | clock-mocking.md |
| 测试文件上传/下载 | file-operations.md, file-upload-download.md |
| 测试表单/验证 | forms-validation.md |
| 测试拖放操作 | drag-drop.md |
| 测试无障碍功能 | accessibility.md |
| 测试安全性(XSS、CSRF) | security-testing.md |
| 使用测试注解 | annotations.md |
| 使用测试标签 | test-tags.md |
| 测试 iframe | iframes.md |
| 测试 canvas/WebGL | canvas-webgl.md |
| 国际化(i18n) | i18n.md |
| 测试 Electron 应用 | electron.md |
| 测试浏览器扩展 | browser-extensions.md |
移动端与响应式测试
使用场景:测试移动设备、触控交互和响应式布局
| 活动 | 参考文件 |
|---|---|
| 设备模拟 | mobile-testing.md |
| 触控手势(滑动、轻触) | mobile-testing.md |
| 视口/断点测试 | mobile-testing.md |
| 移动端专属 UI | mobile-testing.md, locators.md |
实时功能与浏览器 API
使用场景:测试 WebSocket、地理位置、权限和多标签页流程
| 活动 | 参考文件 |
|---|---|
| WebSocket/实时功能测试 | websockets.md |
| 模拟地理位置 | browser-apis.md |
| 权限处理 | browser-apis.md |
| 剪贴板测试 | browser-apis.md |
| 模拟摄像头/麦克风 | browser-apis.md |
| 多标签页/弹出窗口流程 | multi-context.md |
| OAuth 弹出窗口处理 | third-party.md, multi-context.md |
调试与故障排除
适用场景:测试失败、未找到元素、超时、行为异常
| 活动 | 参考文件 |
|---|---|
| 调试测试失败 | debugging.md、assertions-waiting.md |
| 修复不稳定的测试 | flaky-tests.md、debugging.md、assertions-waiting.md |
| 调试不稳定的并行运行 | flaky-tests.md、performance.md、fixtures-hooks.md |
| 确保测试隔离 / 避免状态泄漏 | flaky-tests.md、fixtures-hooks.md、performance.md |
| 修复选择器问题 | locators.md、debugging.md |
| 排查超时问题 | assertions-waiting.md、debugging.md |
| 使用跟踪查看器 | debugging.md |
| 调试竞态条件 | flaky-tests.md、debugging.md、assertions-waiting.md |
| 调试控制台 / JS 错误 | console-errors.md、debugging.md |
错误与边缘情况测试
适用场景:测试错误状态、离线模式、网络故障、验证
| 活动 | 参考文件 |
|---|---|
| 错误边界测试 | error-testing.md |
| 模拟网络故障 | error-testing.md、network-advanced.md |
| 离线模式测试 | error-testing.md、service-workers.md |
| Service Worker 测试 | service-workers.md |
| 加载状态测试 | error-testing.md |
| 表单验证测试 | error-testing.md |
多用户与协作测试
适用场景:测试涉及多个用户、角色或实时协作的功能
| 活动 | 参考文件 |
|---|---|
| 在一个测试中使用多个用户 | multi-user.md |
| 实时协作 | multi-user.md、websockets.md |
| 基于角色的访问测试 | multi-user.md |
| 并发操作测试 | multi-user.md |
架构决策
适用场景:选择测试模式、决定采用哪种方案或规划测试架构
| 活动 | 参考文件 |
|---|---|
| POM 与 fixtures 的取舍 | pom-vs-fixtures.md |
| 选择测试类型 | test-architecture.md |
| 模拟服务与真实服务的取舍 | when-to-mock.md |
| 测试套件结构 | test-suite-structure.md |
特定框架的测试
适用场景:测试 React、Angular、Vue 或 Next.js 应用
| 活动 | 参考文件 |
|---|---|
| 测试 React 应用 | react.md |
| 测试 Angular 应用 | angular.md |
| 测试 Vue/Nuxt 应用 | vue.md |
| 测试 Next.js 应用 | nextjs.md |
重构与维护
适用场景:改进现有测试、进行代码审查、减少重复
| 活动 | 参考文件 |
|---|---|
| 重构为页面对象模型 | page-object-model.md、test-suite-structure.md |
| 改进测试组织方式 | test-suite-structure.md、page-object-model.md |
| 提取通用的设置/清理逻辑 | fixtures-hooks.md |
| 替换脆弱的选择器 | locators.md |
| 移除显式等待 | assertions-waiting.md |
| 创建测试数据工厂 | test-data.md |
| 配置设置 | configuration.md |
基础设施与配置
适用场景:搭建项目、配置 CI/CD、优化性能
| 活动 | 参考文件 |
|---|---|
| 配置 Playwright 项目 | configuration.md, projects-dependencies.md |
| 设置 CI/CD 流水线 | ci-cd.md, github-actions.md |
| GitHub Actions 设置 | github-actions.md |
| GitLab CI 设置 | gitlab.md |
| 其他 CI 提供商 | other-providers.md |
| Docker/容器设置 | docker.md |
| 全局设置与清理 | global-setup.md |
| 项目依赖项 | projects-dependencies.md |
| 优化测试性能 | performance.md, test-suite-structure.md |
| 配置并行执行 | parallel-sharding.md, performance.md |
| 隔离不同工作进程之间的测试数据 | fixtures-hooks.md, performance.md |
| 测试覆盖率 | test-coverage.md |
| 测试报告/制品 | reporting.md |
高级模式
适用场景:复杂场景、API 模拟、网络拦截
| 活动 | 参考文件 |
|---|---|
| 模拟 API 响应 | test-suite-structure.md, network-advanced.md |
| 网络拦截 | network-advanced.md, assertions-waiting.md |
| GraphQL 模拟 | network-advanced.md |
| HAR 录制/回放 | network-advanced.md |
| 自定义 fixtures | fixtures-hooks.md |
| 高级等待策略 | assertions-waiting.md |
| OAuth/SSO 模拟 | third-party.md, multi-context.md |
| 支付网关模拟 | third-party.md |
| 电子邮件/SMS 验证模拟 | third-party.md |
| 遇到控制台错误时失败 | console-errors.md |
| 安全测试(XSS、CSRF) | security-testing.md |
| 性能预算与 Web Vitals | performance-testing.md |
| Lighthouse 集成 | performance-testing.md |
| 测试注解(skip、fixme) | annotations.md |
| 测试标签(@smoke、@fast) | test-tags.md |
| 用于报告的测试步骤 | annotations.md |
快速决策树
What are you doing?
│
├─ Writing a new test?
│ ├─ E2E test → core/test-suite-structure.md, core/locators.md, core/assertions-waiting.md
│ ├─ Component test → testing-patterns/component-testing.md
│ ├─ API test → testing-patterns/api-testing.md, core/test-suite-structure.md
│ ├─ GraphQL test → testing-patterns/graphql-testing.md
│ ├─ Visual regression → testing-patterns/visual-regression.md
│ ├─ Visual/canvas test → testing-patterns/canvas-webgl.md, core/test-suite-structure.md
│ ├─ Accessibility test → testing-patterns/accessibility.md
│ ├─ Mobile/responsive test → advanced/mobile-testing.md
│ ├─ i18n/locale test → testing-patterns/i18n.md
│ ├─ Electron app test → testing-patterns/electron.md
│ ├─ Browser extension test → testing-patterns/browser-extensions.md
│ ├─ Multi-user test → advanced/multi-user.md
│ ├─ Form validation test → testing-patterns/forms-validation.md
│ └─ Drag and drop test → testing-patterns/drag-drop.md
│
├─ Testing specific features?
│ ├─ File upload/download → testing-patterns/file-operations.md, testing-patterns/file-upload-download.md
│ ├─ Date/time dependent → advanced/clock-mocking.md
│ ├─ WebSocket/real-time → browser-apis/websockets.md
│ ├─ Geolocation/permissions → browser-apis/browser-apis.md
│ ├─ OAuth/SSO mocking → advanced/third-party.md, advanced/multi-context.md
│ ├─ Payments/email/SMS → advanced/third-party.md
│ ├─ iFrames → browser-apis/iframes.md
│ ├─ Canvas/WebGL/charts → testing-patterns/canvas-webgl.md
│ ├─ Service workers/PWA → browser-apis/service-workers.md
│ ├─ i18n/localization → testing-patterns/i18n.md
│ ├─ Security (XSS, CSRF) → testing-patterns/security-testing.md
│ └─ Performance/Web Vitals → testing-patterns/performance-testing.md
│
├─ Architecture decisions?
│ ├─ POM vs fixtures → architecture/pom-vs-fixtures.md
│ ├─ Test type selection → architecture/test-architecture.md
│ ├─ Mock vs real services → architecture/when-to-mock.md
│ └─ Test suite structure → core/test-suite-structure.md
│
├─ Framework-specific testing?
│ ├─ React app → frameworks/react.md
│ ├─ Angular app → frameworks/angular.md
│ ├─ Vue/Nuxt app → frameworks/vue.md
│ └─ Next.js app → frameworks/nextjs.md
│
├─ Authentication testing?
│ ├─ Basic auth patterns → advanced/authentication.md
│ └─ Complex flows (MFA, reset) → advanced/authentication-flows.md
│
├─ Test is failing/flaky?
│ ├─ Flaky test investigation → debugging/flaky-tests.md
│ ├─ Element not found → core/locators.md, debugging/debugging.md
│ ├─ Timeout issues → core/assertions-waiting.md, debugging/debugging.md
│ ├─ Race conditions → debugging/flaky-tests.md, debugging/debugging.md
│ ├─ Flaky only with multiple workers → debugging/flaky-tests.md, infrastructure-ci-cd/performance.md
│ ├─ State leak / isolation → debugging/flaky-tests.md, core/fixtures-hooks.md
│ ├─ Console/JS errors → debugging/console-errors.md, debugging/debugging.md
│ └─ General debugging → debugging/debugging.md
│
├─ Testing error scenarios?
│ ├─ Network failures → debugging/error-testing.md, advanced/network-advanced.md
│ ├─ Offline (unexpected) → debugging/error-testing.md
│ ├─ Offline-first/PWA → browser-apis/service-workers.md
│ ├─ Error boundaries → debugging/error-testing.md
│ └─ Form validation → testing-patterns/forms-validation.md, debugging/error-testing.md
│
├─ Refactoring existing code?
│ ├─ Implementing POM → core/page-object-model.md
│ ├─ Improving selectors → core/locators.md
│ ├─ Extracting fixtures → core/fixtures-hooks.md
│ ├─ Creating data factories → core/test-data.md
│ └─ Configuration setup → core/configuration.md
│
├─ Setting up infrastructure?
│ ├─ CI/CD → infrastructure-ci-cd/ci-cd.md
│ ├─ GitHub Actions → infrastructure-ci-cd/github-actions.md
│ ├─ GitLab CI → infrastructure-ci-cd/gitlab.md
│ ├─ Other CI providers → infrastructure-ci-cd/other-providers.md
│ ├─ Docker/containers → infrastructure-ci-cd/docker.md
│ ├─ Sharding/parallel → infrastructure-ci-cd/parallel-sharding.md
│ ├─ Reporting/artifacts → infrastructure-ci-cd/reporting.md
│ ├─ Global setup/teardown → core/global-setup.md
│ ├─ Project dependencies → core/projects-dependencies.md
│ ├─ Test performance → infrastructure-ci-cd/performance.md
│ ├─ Test coverage → infrastructure-ci-cd/test-coverage.md
│ └─ Project config → core/configuration.md, core/projects-dependencies.md
│
├─ Organizing tests?
│ ├─ Skip/fixme/slow tests → core/annotations.md
│ ├─ Test tags (@smoke, @fast) → core/test-tags.md
│ ├─ Filtering tests (--grep) → core/test-tags.md
│ ├─ Test steps → core/annotations.md
│ └─ Conditional execution → core/annotations.md
│
└─ Running subset of tests?
├─ By tag (@smoke, @critical) → core/test-tags.md
├─ Exclude slow/flaky tests → core/test-tags.md
├─ PR vs nightly tests → core/test-tags.md, infrastructure-ci-cd/ci-cd.md
└─ Project-specific filtering → core/test-tags.md, core/configuration.md
测试验证循环
编写或修改测试后:
- 运行测试:
npx playwright test --reporter=list - 如果测试失败:
- 查看错误输出和追踪记录(
npx playwright show-trace) - 修复定位器、等待或断言
- 重新运行测试
- 查看错误输出和追踪记录(
- 只有所有测试通过后才能继续
- 对关键测试运行多次:
npx playwright test --repeat-each=5
评论
支持 Markdown