| name | playwright-best-practices |
| description | Provides guidance for writing, debugging, and maintaining Playwright tests in TypeScript. Use when writing Playwright tests, fixing flaky tests, debugging failures, implementing Page Object Model, configuring CI/CD, optimizing performance, mocking APIs, handling authentication or OAuth, testing accessibility (axe-core), file upload/download, date/time mocking, WebSockets, geolocation, permissions, multi-tab/popup flows, mobile/responsive layouts, touch gestures, GraphQL, error handling, offline mode, multi-user collaboration, third-party services (payments, email verification), console error monitoring, global setup/teardown, test annotations (skip/fixme/slow), project dependencies, security testing (XSS, CSRF, auth), performance budgets (Web Vitals, Lighthouse), iframes, component testing, canvas/WebGL, service workers/PWA, test coverage, i18n/localization, Electron apps, or browser extension testing. Covers E2E, component, API, visual, accessibility, security, Electron, and extension testing. |
| license | MIT |
| metadata | {"author":"currents.dev","version":"1.0"} |
Playwright Best Practices
This skill provides comprehensive guidance for all aspects of Playwright test development, from writing new tests to debugging and maintaining existing test suites.
Activity-Based Reference Guide
Consult these references based on what you're doing:
Writing New Tests
When to use: Creating new test files, writing test cases, implementing test scenarios
Mobile & Responsive Testing
When to use: Testing mobile devices, touch interactions, responsive layouts
Real-Time & Browser APIs
When to use: Testing WebSockets, geolocation, permissions, multi-tab flows
Debugging & Troubleshooting
When to use: Test failures, element not found, timeouts, unexpected behavior
Error & Edge Case Testing
When to use: Testing error states, offline mode, network failures, validation
Multi-User & Collaboration Testing
When to use: Testing features involving multiple users, roles, or real-time collaboration
Refactoring & Maintenance
When to use: Improving existing tests, code review, reducing duplication
Infrastructure & Configuration
When to use: Setting up projects, configuring CI/CD, optimizing performance
Advanced Patterns
When to use: Complex scenarios, API mocking, network interception
Quick Decision Tree
What are you doing?
│
├─ Writing a new test?
│ ├─ E2E test → test-organization.md, locators.md, assertions-waiting.md
│ ├─ Component test → component-testing.md
│ ├─ API test → test-organization.md, assertions-waiting.md
│ ├─ Visual/canvas test → canvas-webgl.md, test-organization.md
│ ├─ Accessibility test → accessibility.md
│ ├─ Mobile/responsive test → mobile-testing.md
│ ├─ i18n/locale test → i18n.md
│ ├─ Electron app test → electron.md
│ ├─ Browser extension test → browser-extensions.md
│ └─ Multi-user test → multi-user.md
│
├─ Testing specific features?
│ ├─ File upload/download → file-operations.md
│ ├─ Date/time dependent → clock-mocking.md
│ ├─ WebSocket/real-time → websockets.md
│ ├─ Geolocation/permissions → browser-apis.md
│ ├─ OAuth/SSO mocking → third-party.md, multi-context.md
│ ├─ Payments/email/SMS → third-party.md
│ ├─ iFrames → iframes.md
│ ├─ Canvas/WebGL/charts → canvas-webgl.md
│ ├─ Service workers/PWA → service-workers.md
│ ├─ i18n/localization → i18n.md
│ ├─ Security (XSS, CSRF) → security-testing.md
│ └─ Performance/Web Vitals → performance-testing.md
│
├─ Test is failing/flaky?
│ ├─ Flaky test investigation → flaky-tests.md
│ ├─ Element not found → locators.md, debugging.md
│ ├─ Timeout issues → assertions-waiting.md, debugging.md
│ ├─ Race conditions → flaky-tests.md, debugging.md
│ ├─ Flaky only with multiple workers → flaky-tests.md, performance.md
│ ├─ State leak / isolation → flaky-tests.md, fixtures-hooks.md
│ ├─ Console/JS errors → console-errors.md, debugging.md
│ └─ General debugging → debugging.md
│
├─ Testing error scenarios?
│ ├─ Network failures → error-testing.md, network-advanced.md
│ ├─ Offline (unexpected) → error-testing.md
│ ├─ Offline-first/PWA → service-workers.md
│ ├─ Error boundaries → error-testing.md
│ └─ Form validation → error-testing.md
│
├─ Refactoring existing code?
│ ├─ Implementing POM → page-object-model.md
│ ├─ Improving selectors → locators.md
│ ├─ Extracting fixtures → fixtures-hooks.md
│ └─ Creating data factories → test-data.md
│
├─ Setting up infrastructure?
│ ├─ CI/CD → ci-cd.md
│ ├─ Global setup/teardown → global-setup.md
│ ├─ Project dependencies → projects-dependencies.md
│ ├─ Test performance → performance.md
│ ├─ Test coverage → test-coverage.md
│ └─ Project config → test-organization.md, projects-dependencies.md
│
└─ Organizing tests?
├─ Skip/fixme/slow tests → annotations.md
├─ Test steps → annotations.md
└─ Conditional execution → annotations.md
Test Validation Loop
After writing or modifying tests:
- Run tests:
npx playwright test --reporter=list
- If tests fail:
- Review error output and trace (
npx playwright show-trace)
- Fix locators, waits, or assertions
- Re-run tests
- Only proceed when all tests pass
- Run multiple times for critical tests:
npx playwright test --repeat-each=5