Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Comprehensive Playwright testing guide covering E2E, component, API, visual, accessibility, and security tests.
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
SKILL.md
1---2name: playwright-best-practices3description: 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 uploads/downloads, 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), test tags (@smoke, @fast, @critical, filtering with --grep), 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.4license: MIT5metadata:6author: currents.dev7version: "1.1"8---910# Playwright Best Practices1112This skill provides comprehensive guidance for all aspects of Playwright test development, from writing new tests to debugging and maintaining existing test suites.1314## Activity-Based Reference Guide1516Consult these references based on what you're doing:1718### Writing New Tests1920**When to use**: Creating new test files, writing test cases, implementing test scenarios2122| Activity | Reference Files |23| ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |24| **Writing E2E tests** | [test-suite-structure.md](core/test-suite-structure.md), [locators.md](core/locators.md), [assertions-waiting.md](core/assertions-waiting.md) |25| **Writing component tests** | [component-testing.md](testing-patterns/component-testing.md), [test-suite-structure.md](core/test-suite-structure.md) |26| **Writing API tests** | [api-testing.md](testing-patterns/api-testing.md), [test-suite-structure.md](core/test-suite-structure.md) |27| **Writing GraphQL tests** | [graphql-testing.md](testing-patterns/graphql-testing.md), [api-testing.md](testing-patterns/api-testing.md) |28| **Writing visual regression tests** | [visual-regression.md](testing-patterns/visual-regression.md), [canvas-webgl.md](testing-patterns/canvas-webgl.md) |29| **Structuring test code with POM** | [page-object-model.md](core/page-object-model.md), [test-suite-structure.md](core/test-suite-structure.md) |30| **Setting up test data/fixtures** | [fixtures-hooks.md](core/fixtures-hooks.md), [test-data.md](core/test-data.md) |31| **Handling authentication** | [authentication.md](advanced/authentication.md), [authentication-flows.md](advanced/authentication-flows.md) |32| **Testing date/time features** | [clock-mocking.md](advanced/clock-mocking.md) |33| **Testing file upload/download** | [file-operations.md](testing-patterns/file-operations.md), [file-upload-download.md](testing-patterns/file-upload-download.md) |34| **Testing forms/validation** | [forms-validation.md](testing-patterns/forms-validation.md) |35| **Testing drag and drop** | [drag-drop.md](testing-patterns/drag-drop.md) |36| **Testing accessibility** | [accessibility.md](testing-patterns/accessibility.md) |37| **Testing security (XSS, CSRF)** | [security-testing.md](testing-patterns/security-testing.md) |38| **Using test annotations** | [annotations.md](core/annotations.md) |39| **Using test tags** | [test-tags.md](core/test-tags.md) |40| **Testing iframes** | [iframes.md](browser-apis/iframes.md) |41| **Testing canvas/WebGL** | [canvas-webgl.md](testing-patterns/canvas-webgl.md) |42| **Internationalization (i18n)** | [i18n.md](testing-patterns/i18n.md) |43| **Testing Electron apps** | [electron.md](testing-patterns/electron.md) |44| **Testing browser extensions** | [browser-extensions.md](testing-patterns/browser-extensions.md) |4546### Mobile & Responsive Testing4748**When to use**: Testing mobile devices, touch interactions, responsive layouts4950| Activity | Reference Files |51| ------------------------------- | -------------------------------------------------------------------------------- |52| **Device emulation** | [mobile-testing.md](advanced/mobile-testing.md) |53| **Touch gestures (swipe, tap)** | [mobile-testing.md](advanced/mobile-testing.md) |54| **Viewport/breakpoint testing** | [mobile-testing.md](advanced/mobile-testing.md) |55| **Mobile-specific UI** | [mobile-testing.md](advanced/mobile-testing.md), [locators.md](core/locators.md) |5657### Real-Time & Browser APIs5859**When to use**: Testing WebSockets, geolocation, permissions, multi-tab flows6061| Activity | Reference Files |62| ------------------------------- | ---------------------------------------------------------------------------------------- |63| **WebSocket/real-time testing** | [websockets.md](browser-apis/websockets.md) |64| **Geolocation mocking** | [browser-apis.md](browser-apis/browser-apis.md) |65| **Permission handling** | [browser-apis.md](browser-apis/browser-apis.md) |66| **Clipboard testing** | [browser-apis.md](browser-apis/browser-apis.md) |67| **Camera/microphone mocking** | [browser-apis.md](browser-apis/browser-apis.md) |68| **Multi-tab/popup flows** | [multi-context.md](advanced/multi-context.md) |69| **OAuth popup handling** | [third-party.md](advanced/third-party.md), [multi-context.md](advanced/multi-context.md) |7071### Debugging & Troubleshooting7273**When to use**: Test failures, element not found, timeouts, unexpected behavior7475| Activity | Reference Files |76| ------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |77| **Debugging test failures** | [debugging.md](debugging/debugging.md), [assertions-waiting.md](core/assertions-waiting.md) |78| **Fixing flaky tests** | [flaky-tests.md](debugging/flaky-tests.md), [debugging.md](debugging/debugging.md), [assertions-waiting.md](core/assertions-waiting.md) |79| **Debugging flaky parallel runs** | [flaky-tests.md](debugging/flaky-tests.md), [performance.md](infrastructure-ci-cd/performance.md), [fixtures-hooks.md](core/fixtures-hooks.md) |80| **Ensuring test isolation / avoiding state leak** | [flaky-tests.md](debugging/flaky-tests.md), [fixtures-hooks.md](core/fixtures-hooks.md), [performance.md](infrastructure-ci-cd/performance.md) |81| **Fixing selector issues** | [locators.md](core/locators.md), [debugging.md](debugging/debugging.md) |82| **Investigating timeout issues** | [assertions-waiting.md](core/assertions-waiting.md), [debugging.md](debugging/debugging.md) |83| **Using trace viewer** | [debugging.md](debugging/debugging.md) |84| **Debugging race conditions** | [flaky-tests.md](debugging/flaky-tests.md), [debugging.md](debugging/debugging.md), [assertions-waiting.md](core/assertions-waiting.md) |85| **Debugging console/JS errors** | [console-errors.md](debugging/console-errors.md), [debugging.md](debugging/debugging.md) |8687### Error & Edge Case Testing8889**When to use**: Testing error states, offline mode, network failures, validation9091| Activity | Reference Files |92| ------------------------------ | ----------------------------------------------------------------------------------------------------- |93| **Error boundary testing** | [error-testing.md](debugging/error-testing.md) |94| **Network failure simulation** | [error-testing.md](debugging/error-testing.md), [network-advanced.md](advanced/network-advanced.md) |95| **Offline mode testing** | [error-testing.md](debugging/error-testing.md), [service-workers.md](browser-apis/service-workers.md) |96| **Service worker testing** | [service-workers.md](browser-apis/service-workers.md) |97| **Loading state testing** | [error-testing.md](debugging/error-testing.md) |98| **Form validation testing** | [error-testing.md](debugging/error-testing.md) |99100### Multi-User & Collaboration Testing101102**When to use**: Testing features involving multiple users, roles, or real-time collaboration103104| Activity | Reference Files |105| ------------------------------ | ------------------------------------------------------------------------------------ |106| **Multiple users in one test** | [multi-user.md](advanced/multi-user.md) |107| **Real-time collaboration** | [multi-user.md](advanced/multi-user.md), [websockets.md](browser-apis/websockets.md) |108| **Role-based access testing** | [multi-user.md](advanced/multi-user.md) |109| **Concurrent action testing** | [multi-user.md](advanced/multi-user.md) |110111### Architecture Decisions112113**When to use**: Choosing test patterns, deciding between approaches, planning test architecture114115| Activity | Reference Files |116| ---------------------------- | --------------------------------------------------------- |117| **POM vs fixtures decision** | [pom-vs-fixtures.md](architecture/pom-vs-fixtures.md) |118| **Test type selection** | [test-architecture.md](architecture/test-architecture.md) |119| **Mock vs real services** | [when-to-mock.md](architecture/when-to-mock.md) |120| **Test suite structure** | [test-suite-structure.md](core/test-suite-structure.md) |121122### Framework-Specific Testing123124**When to use**: Testing React, Angular, Vue, or Next.js applications125126| Activity | Reference Files |127| ------------------------- | ----------------------------------- |128| **Testing React apps** | [react.md](frameworks/react.md) |129| **Testing Angular apps** | [angular.md](frameworks/angular.md) |130| **Testing Vue/Nuxt apps** | [vue.md](frameworks/vue.md) |131| **Testing Next.js apps** | [nextjs.md](frameworks/nextjs.md) |132133### Refactoring & Maintenance134135**When to use**: Improving existing tests, code review, reducing duplication136137| Activity | Reference Files |138| ------------------------------------ | ---------------------------------------------------------------------------------------------------------- |139| **Refactoring to Page Object Model** | [page-object-model.md](core/page-object-model.md), [test-suite-structure.md](core/test-suite-structure.md) |140| **Improving test organization** | [test-suite-structure.md](core/test-suite-structure.md), [page-object-model.md](core/page-object-model.md) |141| **Extracting common setup/teardown** | [fixtures-hooks.md](core/fixtures-hooks.md) |142| **Replacing brittle selectors** | [locators.md](core/locators.md) |143| **Removing explicit waits** | [assertions-waiting.md](core/assertions-waiting.md) |144| **Creating test data factories** | [test-data.md](core/test-data.md) |145| **Configuration setup** | [configuration.md](core/configuration.md) |146147### Infrastructure & Configuration148149**When to use**: Setting up projects, configuring CI/CD, optimizing performance150151| Activity | Reference Files |152| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |153| **Configuring Playwright project** | [configuration.md](core/configuration.md), [projects-dependencies.md](core/projects-dependencies.md) |154| **Setting up CI/CD pipelines** | [ci-cd.md](infrastructure-ci-cd/ci-cd.md), [github-actions.md](infrastructure-ci-cd/github-actions.md) |155| **GitHub Actions setup** | [github-actions.md](infrastructure-ci-cd/github-actions.md) |156| **GitLab CI setup** | [gitlab.md](infrastructure-ci-cd/gitlab.md) |157| **Other CI providers** | [other-providers.md](infrastructure-ci-cd/other-providers.md) |158| **Docker/container setup** | [docker.md](infrastructure-ci-cd/docker.md) |159| **Global setup & teardown** | [global-setup.md](core/global-setup.md) |160| **Project dependencies** | [projects-dependencies.md](core/projects-dependencies.md) |161| **Optimizing test performance** | [performance.md](infrastructure-ci-cd/performance.md), [test-suite-structure.md](core/test-suite-structure.md) |162| **Configuring parallel execution** | [parallel-sharding.md](infrastructure-ci-cd/parallel-sharding.md), [performance.md](infrastructure-ci-cd/performance.md) |163| **Isolating test data between workers** | [fixtures-hooks.md](core/fixtures-hooks.md), [performance.md](infrastructure-ci-cd/performance.md) |164| **Test coverage** | [test-coverage.md](infrastructure-ci-cd/test-coverage.md) |165| **Test reporting/artifacts** | [reporting.md](infrastructure-ci-cd/reporting.md) |166167### Advanced Patterns168169**When to use**: Complex scenarios, API mocking, network interception170171| Activity | Reference Files |172| ------------------------------------ | ------------------------------------------------------------------------------------------------------------ |173| **Mocking API responses** | [test-suite-structure.md](core/test-suite-structure.md), [network-advanced.md](advanced/network-advanced.md) |174| **Network interception** | [network-advanced.md](advanced/network-advanced.md), [assertions-waiting.md](core/assertions-waiting.md) |175| **GraphQL mocking** | [network-advanced.md](advanced/network-advanced.md) |176| **HAR recording/playback** | [network-advanced.md](advanced/network-advanced.md) |177| **Custom fixtures** | [fixtures-hooks.md](core/fixtures-hooks.md) |178| **Advanced waiting strategies** | [assertions-waiting.md](core/assertions-waiting.md) |179| **OAuth/SSO mocking** | [third-party.md](advanced/third-party.md), [multi-context.md](advanced/multi-context.md) |180| **Payment gateway mocking** | [third-party.md](advanced/third-party.md) |181| **Email/SMS verification mocking** | [third-party.md](advanced/third-party.md) |182| **Failing on console errors** | [console-errors.md](debugging/console-errors.md) |183| **Security testing (XSS, CSRF)** | [security-testing.md](testing-patterns/security-testing.md) |184| **Performance budgets & Web Vitals** | [performance-testing.md](testing-patterns/performance-testing.md) |185| **Lighthouse integration** | [performance-testing.md](testing-patterns/performance-testing.md) |186| **Test annotations (skip, fixme)** | [annotations.md](core/annotations.md) |187| **Test tags (@smoke, @fast)** | [test-tags.md](core/test-tags.md) |188| **Test steps for reporting** | [annotations.md](core/annotations.md) |189190## Quick Decision Tree191192```193What are you doing?194│195├─ Writing a new test?196│ ├─ E2E test → core/test-suite-structure.md, core/locators.md, core/assertions-waiting.md197│ ├─ Component test → testing-patterns/component-testing.md198│ ├─ API test → testing-patterns/api-testing.md, core/test-suite-structure.md199│ ├─ GraphQL test → testing-patterns/graphql-testing.md200│ ├─ Visual regression → testing-patterns/visual-regression.md201│ ├─ Visual/canvas test → testing-patterns/canvas-webgl.md, core/test-suite-structure.md202│ ├─ Accessibility test → testing-patterns/accessibility.md203│ ├─ Mobile/responsive test → advanced/mobile-testing.md204│ ├─ i18n/locale test → testing-patterns/i18n.md205│ ├─ Electron app test → testing-patterns/electron.md206│ ├─ Browser extension test → testing-patterns/browser-extensions.md207│ ├─ Multi-user test → advanced/multi-user.md208│ ├─ Form validation test → testing-patterns/forms-validation.md209│ └─ Drag and drop test → testing-patterns/drag-drop.md210│211├─ Testing specific features?212│ ├─ File upload/download → testing-patterns/file-operations.md, testing-patterns/file-upload-download.md213│ ├─ Date/time dependent → advanced/clock-mocking.md214│ ├─ WebSocket/real-time → browser-apis/websockets.md215│ ├─ Geolocation/permissions → browser-apis/browser-apis.md216│ ├─ OAuth/SSO mocking → advanced/third-party.md, advanced/multi-context.md217│ ├─ Payments/email/SMS → advanced/third-party.md218│ ├─ iFrames → browser-apis/iframes.md219│ ├─ Canvas/WebGL/charts → testing-patterns/canvas-webgl.md220│ ├─ Service workers/PWA → browser-apis/service-workers.md221│ ├─ i18n/localization → testing-patterns/i18n.md222│ ├─ Security (XSS, CSRF) → testing-patterns/security-testing.md223│ └─ Performance/Web Vitals → testing-patterns/performance-testing.md224│225├─ Architecture decisions?226│ ├─ POM vs fixtures → architecture/pom-vs-fixtures.md227│ ├─ Test type selection → architecture/test-architecture.md228│ ├─ Mock vs real services → architecture/when-to-mock.md229│ └─ Test suite structure → core/test-suite-structure.md230│231├─ Framework-specific testing?232│ ├─ React app → frameworks/react.md233│ ├─ Angular app → frameworks/angular.md234│ ├─ Vue/Nuxt app → frameworks/vue.md235│ └─ Next.js app → frameworks/nextjs.md236│237├─ Authentication testing?238│ ├─ Basic auth patterns → advanced/authentication.md239│ └─ Complex flows (MFA, reset) → advanced/authentication-flows.md240│241├─ Test is failing/flaky?242│ ├─ Flaky test investigation → debugging/flaky-tests.md243│ ├─ Element not found → core/locators.md, debugging/debugging.md244│ ├─ Timeout issues → core/assertions-waiting.md, debugging/debugging.md245│ ├─ Race conditions → debugging/flaky-tests.md, debugging/debugging.md246│ ├─ Flaky only with multiple workers → debugging/flaky-tests.md, infrastructure-ci-cd/performance.md247│ ├─ State leak / isolation → debugging/flaky-tests.md, core/fixtures-hooks.md248│ ├─ Console/JS errors → debugging/console-errors.md, debugging/debugging.md249│ └─ General debugging → debugging/debugging.md250│251├─ Testing error scenarios?252│ ├─ Network failures → debugging/error-testing.md, advanced/network-advanced.md253│ ├─ Offline (unexpected) → debugging/error-testing.md254│ ├─ Offline-first/PWA → browser-apis/service-workers.md255│ ├─ Error boundaries → debugging/error-testing.md256│ └─ Form validation → testing-patterns/forms-validation.md, debugging/error-testing.md257│258├─ Refactoring existing code?259│ ├─ Implementing POM → core/page-object-model.md260│ ├─ Improving selectors → core/locators.md261│ ├─ Extracting fixtures → core/fixtures-hooks.md262│ ├─ Creating data factories → core/test-data.md263│ └─ Configuration setup → core/configuration.md264│265├─ Setting up infrastructure?266│ ├─ CI/CD → infrastructure-ci-cd/ci-cd.md267│ ├─ GitHub Actions → infrastructure-ci-cd/github-actions.md268│ ├─ GitLab CI → infrastructure-ci-cd/gitlab.md269│ ├─ Other CI providers → infrastructure-ci-cd/other-providers.md270│ ├─ Docker/containers → infrastructure-ci-cd/docker.md271│ ├─ Sharding/parallel → infrastructure-ci-cd/parallel-sharding.md272│ ├─ Reporting/artifacts → infrastructure-ci-cd/reporting.md273│ ├─ Global setup/teardown → core/global-setup.md274│ ├─ Project dependencies → core/projects-dependencies.md275│ ├─ Test performance → infrastructure-ci-cd/performance.md276│ ├─ Test coverage → infrastructure-ci-cd/test-coverage.md277│ └─ Project config → core/configuration.md, core/projects-dependencies.md278│279├─ Organizing tests?280│ ├─ Skip/fixme/slow tests → core/annotations.md281│ ├─ Test tags (@smoke, @fast) → core/test-tags.md282│ ├─ Filtering tests (--grep) → core/test-tags.md283│ ├─ Test steps → core/annotations.md284│ └─ Conditional execution → core/annotations.md285│286└─ Running subset of tests?287├─ By tag (@smoke, @critical) → core/test-tags.md288├─ Exclude slow/flaky tests → core/test-tags.md289├─ PR vs nightly tests → core/test-tags.md, infrastructure-ci-cd/ci-cd.md290└─ Project-specific filtering → core/test-tags.md, core/configuration.md291```292293## Test Validation Loop294295After writing or modifying tests:2962971. **Run tests**: `npx playwright test --reporter=list`2982. **If tests fail**:299- Review error output and trace (`npx playwright show-trace`)300- Fix locators, waits, or assertions301- Re-run tests3023. **Only proceed when all tests pass**3034. **Run multiple times** for critical tests: `npx playwright test --repeat-each=5`304