Playwright Pro

Production-grade Playwright testing toolkit.

How to use it

Claude Code
  1. Run the line below. It pulls the whole folder into ~/.claude/skills/pw, including the files SKILL.md points to.
  2. Describe your job in plain words. Claude Code follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit alirezarezvani/claude-skills/engineering-team/playwright-pro/skills/pw#main ~/.claude/skills/pw

For one project only, change the path to .claude/skills/pw. This skill also uses golden-rules.md, locators.md, assertions.md, fixtures.md, common-pitfalls.md, flaky-tests.md — copying SKILL.md alone won't be enough. See the folder on GitHub.

Claude (web or desktop app)
  1. On this page open ⋯ → Download .md.
  2. Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
  3. Pick the file and Save. Claude shows the name and description and runs a security scan.
  4. Check the skill is switched on.
  5. Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
  1. ChatGPT: make a Project and paste it into Instructions.
  2. Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Source of Playwright Pro

Show the full text132 lines
namedescription
playwright-proProduction-grade Playwright testing toolkit. Use when the user mentions Playwright tests, end-to-end testing, browser automation, fixing flaky tests, test migration, CI/CD testing, or test suites. Generate tests, fix flaky failures, migrate from Cypress/Selenium, sync with TestRail, run on BrowserStack. 55 templates, 3 agents, smart reporting.

Playwright Pro

Production-grade Playwright testing toolkit for AI coding agents.

Available Commands

When installed as a Claude Code plugin, these are available as /pw: commands:

Command What it does
/pw:pw-init Set up Playwright — detects framework, generates config, CI, first test
/pw:generate <spec> Generate tests from user story, URL, or component
/pw:pw-review Review tests for anti-patterns and coverage gaps
/pw:fix <test> Diagnose and fix failing or flaky tests
/pw:migrate Migrate from Cypress or Selenium to Playwright
/pw:coverage Analyze what's tested vs. what's missing
/pw:testrail Sync with TestRail — read cases, push results
/pw:browserstack Run on BrowserStack, pull cross-browser reports
/pw:report Generate test report in your preferred format

Quick Start Workflow

The recommended sequence for most projects:

1. /pw:pw-init          → scaffolds config, CI pipeline, and a first smoke test
2. /pw:generate      → generates tests from your spec or URL
3. /pw:pw-review        → validates quality and flags anti-patterns      ← always run after generate
4. /pw:fix <test>    → diagnoses and repairs any failing/flaky tests  ← run when CI turns red

Validation checkpoints:

  • After /pw:generate — always run /pw:pw-review before committing; it catches locator anti-patterns and missing assertions automatically.
  • After /pw:fix — re-run the full suite locally (npx playwright test) to confirm the fix doesn't introduce regressions.
  • After /pw:migrate — run /pw:coverage to confirm parity with the old suite before decommissioning Cypress/Selenium tests.
Example: Generate → Review → Fix
# 1. Generate tests from a user story
/pw:generate "As a user I can log in with email and password"

# Generated: tests/auth/login.spec.ts
# → Playwright Pro creates the file using the auth template.

# 2. Review the generated tests
/pw:pw-review tests/auth/login.spec.ts

# → Flags: one test used page.locator('input[type=password]') — suggests getByLabel('Password')
# → Fix applied automatically.

# 3. Run locally to confirm
npx playwright test tests/auth/login.spec.ts --headed

# 4. If a test is flaky in CI, diagnose it
/pw:fix tests/auth/login.spec.ts
# → Identifies missing web-first assertion; replaces waitForTimeout(2000) with expect(locator).toBeVisible()

Golden Rules

  1. getByRole() over CSS/XPath — resilient to markup changes
  2. Never page.waitForTimeout() — use web-first assertions
  3. expect(locator) auto-retries; expect(await locator.textContent()) does not
  4. Isolate every test — no shared state between tests
  5. baseURL in config — zero hardcoded URLs
  6. Retries: 2 in CI, 0 locally
  7. Traces: 'on-first-retry' — rich debugging without slowdown
  8. Fixtures over globals — test.extend() for shared state
  9. One behavior per test — multiple related assertions are fine
  10. Mock external services only — never mock your own app

Locator Priority

1. getByRole()        — buttons, links, headings, form elements
2. getByLabel()       — form fields with labels
3. getByText()        — non-interactive text
4. getByPlaceholder() — inputs with placeholder
5. getByTestId()      — when no semantic option exists
6. page.locator()     — CSS/XPath as last resort

What's Included

  • 9 skills with detailed step-by-step instructions
  • 3 specialized agents: test-architect, test-debugger, migration-planner
  • 55 test templates: auth, CRUD, checkout, search, forms, dashboard, settings, onboarding, notifications, API, accessibility
  • 2 MCP servers (TypeScript): TestRail and BrowserStack integrations (optional — not auto-registered; see Integration Setup)
  • Smart hooks: auto-validate test quality, auto-detect Playwright projects
  • 6 reference docs: golden rules, locators, assertions, fixtures, pitfalls, flaky tests
  • Migration guides: Cypress and Selenium mapping tables

Integration Setup

Not auto-registered (issue #978). The TestRail and BrowserStack MCP servers are no longer declared in the plugin's .mcp.json (they failed to connect for every user — no bundled node_modules). Exporting the env vars below is not enough: /pw:testrail / /pw:browserstack fail with "tool not found" until you enable the server manually (cd integrations/<name>-mcp && npm install, then register it in your own user/project MCP config). See CLAUDE.md → Integrations.

TestRail (Optional)
export TESTRAIL_URL="https://your-instance.testrail.io"
export TESTRAIL_USER="[email protected]"
export TESTRAIL_API_KEY="your-api-key"
BrowserStack (Optional)
export BROWSERSTACK_USERNAME="your-username"
export BROWSERSTACK_ACCESS_KEY="your-access-key"

Quick Reference

See reference/ directory for:

  • golden-rules.md — The 10 non-negotiable rules
  • locators.md — Complete locator priority with cheat sheet
  • assertions.md — Web-first assertions reference
  • fixtures.md — Custom fixtures and storageState patterns
  • common-pitfalls.md — Top 10 mistakes and fixes
  • flaky-tests.md — Diagnosis commands and quick fixes

See templates/README.md for the full template index.

1---
2name: "playwright-pro"
3description: "Production-grade Playwright testing toolkit. Use when the user mentions Playwright tests, end-to-end testing, browser automation, fixing flaky tests, test migration, CI/CD testing, or test suites. Generate tests, fix flaky failures, migrate from Cypress/Selenium, sync with TestRail, run on BrowserStack. 55 templates, 3 agents, smart reporting."
4---
5 
6# Playwright Pro
7 
8Production-grade Playwright testing toolkit for AI coding agents.
9 
10## Available Commands
11 
12When installed as a Claude Code plugin, these are available as `/pw:` commands:
13 
14| Command | What it does |
15|---|---|
16| `/pw:pw-init` | Set up Playwright — detects framework, generates config, CI, first test |
17| `/pw:generate <spec>` | Generate tests from user story, URL, or component |
18| `/pw:pw-review` | Review tests for anti-patterns and coverage gaps |
19| `/pw:fix <test>` | Diagnose and fix failing or flaky tests |
20| `/pw:migrate` | Migrate from Cypress or Selenium to Playwright |
21| `/pw:coverage` | Analyze what's tested vs. what's missing |
22| `/pw:testrail` | Sync with TestRail — read cases, push results |
23| `/pw:browserstack` | Run on BrowserStack, pull cross-browser reports |
24| `/pw:report` | Generate test report in your preferred format |
25 
26## Quick Start Workflow
27 
28The recommended sequence for most projects:
29 
30```
311. /pw:pw-init → scaffolds config, CI pipeline, and a first smoke test
322. /pw:generate → generates tests from your spec or URL
333. /pw:pw-review → validates quality and flags anti-patterns ← always run after generate
344. /pw:fix <test> → diagnoses and repairs any failing/flaky tests ← run when CI turns red
35```
36 
37**Validation checkpoints:**
38- After `/pw:generate` — always run `/pw:pw-review` before committing; it catches locator anti-patterns and missing assertions automatically.
39- After `/pw:fix` — re-run the full suite locally (`npx playwright test`) to confirm the fix doesn't introduce regressions.
40- After `/pw:migrate` — run `/pw:coverage` to confirm parity with the old suite before decommissioning Cypress/Selenium tests.
41 
42### Example: Generate → Review → Fix
43 
44```bash
45# 1. Generate tests from a user story
46/pw:generate "As a user I can log in with email and password"
47 
48# Generated: tests/auth/login.spec.ts
49# → Playwright Pro creates the file using the auth template.
50 
51# 2. Review the generated tests
52/pw:pw-review tests/auth/login.spec.ts
53 
54# → Flags: one test used page.locator('input[type=password]') — suggests getByLabel('Password')
55# → Fix applied automatically.
56 
57# 3. Run locally to confirm
58npx playwright test tests/auth/login.spec.ts --headed
59 
60# 4. If a test is flaky in CI, diagnose it
61/pw:fix tests/auth/login.spec.ts
62# → Identifies missing web-first assertion; replaces waitForTimeout(2000) with expect(locator).toBeVisible()
63```
64 
65## Golden Rules
66 
671. `getByRole()` over CSS/XPath — resilient to markup changes
682. Never `page.waitForTimeout()` — use web-first assertions
693. `expect(locator)` auto-retries; `expect(await locator.textContent())` does not
704. Isolate every test — no shared state between tests
715. `baseURL` in config — zero hardcoded URLs
726. Retries: `2` in CI, `0` locally
737. Traces: `'on-first-retry'` — rich debugging without slowdown
748. Fixtures over globals — `test.extend()` for shared state
759. One behavior per test — multiple related assertions are fine
7610. Mock external services only — never mock your own app
77 
78## Locator Priority
79 
80```
811. getByRole() — buttons, links, headings, form elements
822. getByLabel() — form fields with labels
833. getByText() — non-interactive text
844. getByPlaceholder() — inputs with placeholder
855. getByTestId() — when no semantic option exists
866. page.locator() — CSS/XPath as last resort
87```
88 
89## What's Included
90 
91- **9 skills** with detailed step-by-step instructions
92- **3 specialized agents**: test-architect, test-debugger, migration-planner
93- **55 test templates**: auth, CRUD, checkout, search, forms, dashboard, settings, onboarding, notifications, API, accessibility
94- **2 MCP servers** (TypeScript): TestRail and BrowserStack integrations *(optional — not auto-registered; see Integration Setup)*
95- **Smart hooks**: auto-validate test quality, auto-detect Playwright projects
96- **6 reference docs**: golden rules, locators, assertions, fixtures, pitfalls, flaky tests
97- **Migration guides**: Cypress and Selenium mapping tables
98 
99## Integration Setup
100 
101> **Not auto-registered (issue #978).** The TestRail and BrowserStack MCP servers
102> are no longer declared in the plugin's `.mcp.json` (they failed to connect for
103> every user — no bundled `node_modules`). Exporting the env vars below is not
104> enough: `/pw:testrail` / `/pw:browserstack` fail with "tool not found" until you
105> enable the server manually (`cd integrations/<name>-mcp && npm install`, then
106> register it in your own user/project MCP config). See `CLAUDE.md` → Integrations.
107 
108### TestRail (Optional)
109```bash
110export TESTRAIL_URL="https://your-instance.testrail.io"
111export TESTRAIL_USER="[email protected]"
112export TESTRAIL_API_KEY="your-api-key"
113```
114 
115### BrowserStack (Optional)
116```bash
117export BROWSERSTACK_USERNAME="your-username"
118export BROWSERSTACK_ACCESS_KEY="your-access-key"
119```
120 
121## Quick Reference
122 
123See `reference/` directory for:
124- `golden-rules.md` — The 10 non-negotiable rules
125- `locators.md` — Complete locator priority with cheat sheet
126- `assertions.md` — Web-first assertions reference
127- `fixtures.md` — Custom fixtures and storageState patterns
128- `common-pitfalls.md` — Top 10 mistakes and fixes
129- `flaky-tests.md` — Diagnosis commands and quick fixes
130 
131See `templates/README.md` for the full template index.
132 

Discussion

Alternatives

Also in TestingSee all 533 in Development →