fix · alirezarezvani — Claude skill: repair failing Playwright tests
Sorts a failing or flaky Playwright test into a category, applies the matching fix, then proves it holds. Useful when a test fails in CI but passes locally.
/plugin marketplace add alirezarezvani/claude-skills
/plugin install pw@claude-code-skillsWhat fix does
The skill runs the test to capture the error, then repeats it and runs it with parallel workers — that separates a real break from flakiness. Next it captures a trace with --trace=on --retries=0 and reads it.
Failures land in four buckets: timing and async, test isolation, environment, infrastructure. Each has its own fixes. For timing, waitForTimeout() gets replaced with web-first assertions and missing await calls get added. For isolation, shared mutable state comes out and test data gets created per test. For environment, viewport sizes and font rendering are matched between local and CI. For infrastructure, timeouts and retries go up.
After the fix the test runs 10 times via --repeat-each=10; all 10 must pass or you go back to categorizing. At the end the skill suggests prevention: retries: 2 in CI, trace: 'on-first-retry' in the config. You need Playwright installed and tests run through npx playwright test. Worth installing if you already have tests that break now and then; skip it if the project doesn't use Playwright.
What it helps with
- figure out why a test fails in CI but passes locally
- remove flakiness from a Playwright suite
- trace an intermittent failure back to its cause
- fix a test that only breaks under parallel workers
- lock in a fix by verifying 10 repeat runs
Example prompts for the agent
- fix the failing test in e2e/login.spec.ts
- the checkout test fails in CI but passes locally, dig in
- this test passes sometimes, find out why
How to install fix
1Plugin marketplace
/plugin marketplace add alirezarezvani/claude-skills/plugin install pw@claude-code-skillsThis installs the whole pw plugin with all its skills
2Skills CLI (Vercel)
npx skills add alirezarezvani/claude-skills --skill fix -a claude-code3Manually: put the files in place
~/.claude/skills/fix/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/fix/
Manually: put the files in place
.agents/skills/fix/SKILL.mdFor all projects use ~/.agents/skills/
Manually: put the files in place
.cursor/skills/fix/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install alirezarezvani/claude-skills fix2Manually: put the files in place
.github/skills/fix/SKILL.mdPlatform CLI
gemini skills install https://github.com/alirezarezvani/claude-skills --path engineering-team/playwright-pro/skills/fixManually: put the files in place
.devin/skills/fix/SKILL.mdThe legacy .windsurf/skills/ path still works
Claude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set349
The whole set →Other versions of fix
Similar
Questions about fix
How do I install fix in Claude?
Through the plugin marketplace: /plugin marketplace add alirezarezvani/claude-skills, then /plugin install pw@claude-code-skills. Or directly: npx skills add alirezarezvani/claude-skills --skill fix -a claude-code.
What does the fix skill do?
It diagnoses a failing or flaky Playwright test, assigns the failure to one of four categories, and applies the fix for that category. Then it verifies stability with 10 repeat runs.
What do I need for it to work?
Playwright in the project — tests run via npx playwright test. The skill takes a test file path, a test name, or a description of the failure.
Source text
SKILL.md · MIT
--- name: "fix" description: >- Fix failing or flaky Playwright tests. Use when user says "fix test", "flaky test", "test failing", "debug test", "test broken", "test passes sometimes", or "intermittent failure". --- # Fix Failing or Flaky Tests Diagnose and fix a Playwright test that fails or passes intermittently using a systematic taxonomy. ## Input `$ARGUMENTS` contains: - A test file path: `e2e/login.spec.ts` - A test name: ""should redirect after login"` - A description: `"the checkout test fails in CI but passes locally"` ## Steps ### 1. Reproduce the Failure Run the test to capture the error: ```bash npx playwright test <file> --reporter=list ``` If the test passes, it's likely flaky. Run burn-in: ```bash npx playwright test <file> --repeat-each=10 --reporter=list ``` If it still passes, try with parallel workers: ```bash npx playwright test --fully-parallel --workers=4 --repeat-each=5 ``` ### 2. Capture Trace Run with full tracing: ```bash npx playwright test <file> --trace=on --retries=0 ``` Read the trace output. Use `/debug` to analyze trace files if available. ### 3. Categorize the Failure Load `flaky-taxonomy.md` from this skill directory. Every failing test falls into one of four categories: | Category | Symptom | Diagnosis | |---|---|---| | **Timing/Async** | Fails intermittently everywhere | `--repeat-each=20` reproduces locally | | **Test Isolation** | Fails in suite, passes alone | `--workers=1 --grep "test name"` passes | | **Environment** | Fails in CI, passes locally | Compare CI vs local screenshots/traces | | **Infrastructure** | Random, no pattern | Error references browser internals | ### 4. Apply Targeted Fix **Timing/Async:** - Replace `waitForTimeout()` with web-first assertions - Add `await` to missing Playwright calls - Wait for specific network responses before asserting - Use `toBeVisible()` before interacting with elements **Test Isolation:** - Remove shared mutable state between tests - Create test data per-test via API or fixtures - Use unique identifiers (timestamps, random strings) for test data - Check for database state leaks **Environment:** - Match viewport sizes between local and CI - Account for font rendering differences in screenshots - Use `docker` locally to match CI environment - Check for timezone-dependent assertions **Infrastructure:** - Increase timeout for slow CI runners - Add retries in CI config (`retries: 2`) - Check for browser OOM (reduce parallel workers) - Ensure browser dependencies are installed ### 5. Verify the Fix Run the test 10 times to confirm stability: ```bash npx playwright test <file> --repeat-each=10 --reporter=list ``` All 10 must pass. If any fail, go back to step 3. ### 6. Prevent Recurrence Suggest: - Add to CI with `retries: 2` if not already - Enable `trace: 'on-first-retry'` in config - Add the fix pattern to project's test conventions doc ## Output - Root cause category and specific issue - The fix applied (with diff) - Verification result (10/10 passes) - Prevention recommendation
© Alireza Rezvani · MIT · alirezarezvani/claude-skills