/ Directory / Playground / playwright-skill
● Community testdino-hq ⚡ Instant

playwright-skill

by testdino-hq · testdino-hq/playwright-skill

Claude Code skill teaching Playwright best practices — locators, network stubbing, trace viewer, parallelism — from the TestDino team.

TestDino Playwright Skill primes Claude Code with Playwright-first testing patterns: role-based locators, network stubbing, fixtures, trace capture, parallelism, retries, auth state reuse. Built from TestDino's test-platform experience, it biases Claude's code generation toward maintainable E2E tests.

Why use it

Key features

Live Demo

What it looks like in practice

playwright-skill-2.replay ▶ ready
0/0

Install

Author repository · Claude Skills documentation

Use Cases

Real-world ways to use playwright-skill

How to write a maintainable first E2E test

👤 Developers adding Playwright to a project for the first time ⏱ ~30 min beginner

When to use: You have a staging URL and a login flow; you want one solid test before scaling.

Flow
  1. Describe the flow
    Write a Playwright test for login at staging.example.com: email, password, expect dashboard heading. Use role-based locators only.✓ Copied
    → Test using getByRole, getByLabel; no .class or xpath
  2. Add auth reuse fixture
    Convert the login into a reusable auth fixture so other tests skip logging in.✓ Copied
    → storageState-based fixture + globalSetup
  3. Ensure non-flakiness
    Audit the test for waitFor* anti-patterns; switch to web-first assertions.✓ Copied
    → expect(locator).toBeVisible() rather than waitForSelector

Outcome: A robust first test plus a fixture the whole suite inherits.

Pitfalls
  • Claude reaches for page.waitForTimeout — Tell skill explicitly: no arbitrary waits, use web-first assertions

Stub a backend API to test frontend edge cases

👤 Frontend engineers testing empty/error/loading states ⏱ ~25 min intermediate

When to use: You can't easily put the real backend into each state.

Flow
  1. Stub the endpoint
    Stub GET /api/orders to return empty array, then assert the empty state renders.✓ Copied
    → route.fulfill with JSON body; assertion on empty-state element
  2. Vary responses per test
    Parameterize the stub: one test for 500 error, one for timeout, one for partial data.✓ Copied
    → Three tests sharing a helper

Outcome: Edge-state coverage without touching the backend.

Pitfalls
  • Stub leaks across tests — Set up in beforeEach or fixture scope, not in a module-level hook

Debug a flaky test using trace viewer

👤 Engineers triaging a flaky suite in CI ⏱ ~45 min intermediate

When to use: A test passes locally, fails 5% of the time in CI.

Flow
  1. Capture trace on retry
    Configure trace: 'on-first-retry' in playwright.config.ts.✓ Copied
    → Config diff
  2. Analyze the trace
    Download the trace.zip from the failed CI run; walk me through what's different from the successful run.✓ Copied
    → Concrete diff in network/DOM timing
  3. Fix
    Based on the trace, propose the minimal change to de-flake.✓ Copied
    → Specific locator or assertion change, not a blanket sleep

Outcome: A de-flaked test with a documented root cause.

Pitfalls
  • Treating flakes by bumping timeouts — Most flakes are hidden race conditions — the trace usually reveals a missing await

Combinations

Pair with other MCPs for X10 leverage

playwright-skill-2 + seo-audit-skill

Playwright captures pages, SEO audit runs against rendered HTML for JS-heavy apps

Use Playwright to authenticate and capture logged-in pages, then run seo-audit against each.✓ Copied

Tools

What this MCP exposes

ToolInputsWhen to callCost
Locator patterns - Writing new selectors 0
Network stubbing - Testing frontend edge states 0
Fixtures & auth reuse - Scaling a suite past 5 tests 0
Trace analysis trace.zip Debugging flakes 0
Parallelism & sharding - Suites running >5 min in CI 0

Cost & Limits

What this costs to run

API quota
None
Tokens per call
Test generation: 3-8k tokens
Monetary
Free
Tip
Generate one test manually, save as a template, and have Claude follow the template for others.

Security

Permissions, secrets, blast radius

Credential storage: Test credentials in .env (via dotenv). Never commit storageState.json with production auth.
Data egress: Tests hit your target URL. No third-party calls from the skill.

Troubleshooting

Common errors and fixes

Test is flaky on CI only

Enable trace: 'on-first-retry' and analyze the trace from the failing attempt.

Verify: npx playwright show-trace trace.zip
getByRole doesn't find an element that's clearly there

Element may lack an accessible name. Use Playwright Inspector to see the computed role/name.

Verify: npx playwright test --ui
Login fixture works locally, fails in CI

CI may need --headed=false and explicit browser install. Run npx playwright install --with-deps in CI.

Alternatives

playwright-skill vs others

AlternativeWhen to use it insteadTradeoff
CypressYou prefer Cypress's DX and real-browser debuggingDifferent locator philosophy; less parallelism

More

Resources

📖 Read the official README on GitHub

🐙 Browse open issues

🔍 Browse all 400+ MCP servers and Skills

Continue exploring

Related tools and workflows

Choose another guide for your workflow, or explore a collection.

Browse all topic collections → · See 29 new official additions →