playwright-expert
Jeffallan/claude-skills
Use when writing E2E tests with Playwright, setting up test infrastructure, or debugging flaky browser tests. Invoke for browser automation, E2E tests, Page Object Model, test flakiness, visual testing. Keywords: Playwright, E2E, browser testing, automation, Page Object.
...Expand allAbout playwright-expert
The 'playwright-expert' skill is designed to assist in writing and managing End-to-End (E2E) tests using the Playwright framework. It solves common challenges such as setting up test infrastructure, debugging flaky tests, and ensuring maintainable browser automation. By utilizing this skill, users can streamline the process of writing robust, reliable, and fast tests for web applications, which is critical for CI/CD workflows and continuous testing. It also focuses on improving the quality and maintainability of tests, helping testers tackle issues like flaky browser behavior, performance bottlenecks, and integration issues with various web services.
Main features of the 'playwright-expert' skill include expertise in Page Object Model (POM) patterns, API mocking, visual regression testing, and test configuration for Playwright. The skill helps users implement best practices, such as leveraging auto-waiting to avoid arbitrary timeouts, writing independent tests, and using role-based selectors to ensure reliable test executions. Additionally, this skill provides recommendations for handling debugging, enabling traces and screenshots for quick test analysis, and parallel execution of tests to optimize performance.
This skill is primarily aimed at senior QA automation engineers, especially those with extensive experience in browser testing and Playwright. It's valuable for users who are responsible for building test infrastructure, debugging flaky tests, implementing POM patterns, and performing API mocking and visual regression testing. Developers and testers working on end-to-end tests for web applications, particularly in CI/CD environments, will find this skill highly beneficial.
FAQ
How do I set up Playwright for E2E testing?
You can set up Playwright by following the configuration guidelines in the 'references/configuration.md' document, which includes setting up playwright.config.ts for proper test execution.
What is the Page Object Model (POM) and how does it help in testing?
The Page Object Model is a design pattern for creating test classes that represent web pages. It helps organize and maintain tests by providing a central location for page interactions, making tests more readable and maintainable.
Can I integrate this skill into my CI/CD pipeline?
Yes, this skill is designed with CI/CD integration in mind. The tests written using Playwright can be easily integrated into your CI/CD pipeline, ensuring continuous testing and faster feedback cycles.
Are there any performance considerations when using Playwright?
It is recommended to run tests in parallel to optimize test performance. Playwright also supports auto-waiting, reducing unnecessary timeouts and improving overall test efficiency.
Is there any restriction on test selectors in this skill?
Yes, it is advised to avoid relying on brittle selectors like CSS class names. Instead, you should use role-based selectors whenever possible to ensure that tests are stable and maintainable.
Playwright Expert
E2E testing specialist with deep expertise in Playwright for robust, maintainable browser automation.
Core Workflow
- Analyze requirements - Identify user flows to test
- Setup - Configure Playwright with proper settings
- Write tests - Use POM pattern, proper selectors, auto-waiting
- Debug - Run test → check trace → identify issue → fix → verify fix
- Integrate - Add to CI/CD pipeline
Reference Guide
Load detailed guidance based on context:
| Topic | Reference | Load When |
|---|---|---|
| Selectors | references/selectors-locators.md | Writing selectors, locator priority |
| Page Objects | references/page-object-model.md | POM patterns, fixtures |
| API Mocking | references/api-mocking.md | Route interception, mocking |
| Configuration | references/configuration.md | playwright.config.ts setup |
| Debugging | references/debugging-flaky.md | Flaky tests, trace viewer |
Constraints
MUST DO
- Use role-based selectors when possible
- Leverage auto-waiting (don't add arbitrary timeouts)
- Keep tests independent (no shared state)
- Use Page Object Model for maintainability
- Enable traces/screenshots for debugging
- Run tests in parallel
MUST NOT DO
- Use
waitForTimeout()(use proper waits) - Rely on CSS class selectors (brittle)
- Share state between tests
- Ignore flaky tests
- Use
first(),nth()without good reason
Code Examples
Selector: Role-based (correct) vs CSS class (brittle)
// ✅ Role-based selector — resilient to styling changesawait page.getByRole('button', { name: 'Submit' }).click();await page.getByLabel('Email address').fill('[email protected]');// ❌ CSS class selector — breaks on refactorawait page.locator('.btn-primary.submit-btn').click();await page.locator('.email-input').fill('[email protected]');
Page Object Model + Test File
// pages/LoginPage.tsimport { type Page, type Locator } from '@playwright/test';export class LoginPage { readonly page: Page; readonly emailInput: Locator; readonly passwordInput: Locator; readonly submitButton: Locator; readonly errorMessage: Locator; constructor(page: Page) { this.page = page; this.emailInput = page.getByLabel('Email address'); this.passwordInput = page.getByLabel('Password'); this.submitButton = page.getByRole('button', { name: 'Sign in' }); this.errorMessage = page.getByRole('alert'); } async goto() { await this.page.goto('/login'); } async login(email: string, password: string) { await this.emailInput.fill(email); await this.passwordInput.fill(password); await this.submitButton.click(); }}
// tests/login.spec.tsimport { test, expect } from '@playwright/test';import { LoginPage } from '../pages/LoginPage';test.describe('Login', () => { let loginPage: LoginPage; test.beforeEach(async ({ page }) => { loginPage = new LoginPage(page); await loginPage.goto(); }); test('successful login redirects to dashboard', async ({ page }) => { await loginPage.login('[email protected]', 'correct-password'); await expect(page).toHaveURL('/dashboard'); }); test('invalid credentials shows error', async () => { await loginPage.login('[email protected]', 'wrong-password'); await expect(loginPage.errorMessage).toBeVisible(); await expect(loginPage.errorMessage).toContainText('Invalid credentials'); });});
Debugging Workflow for Flaky Tests
// 1. Run failing test with trace enabled// playwright.config.tsuse: { trace: 'on-first-retry', screenshot: 'only-on-failure',}// 2. Re-run with retries to capture trace// npx playwright test --retries=2// 3. Open trace viewer to inspect timeline// npx playwright show-trace test-results/.../trace.zip// 4. Common fix — replace arbitrary timeout with proper wait// ❌ Flakyawait page.waitForTimeout(2000);await page.getByRole('button', { name: 'Save' }).click();// ✅ Reliable — waits for element stateawait page.getByRole('button', { name: 'Save' }).waitFor({ state: 'visible' });await page.getByRole('button', { name: 'Save' }).click();// 5. Verify fix — run test 10x to confirm stability// npx playwright test --repeat-each=10
Output Templates
When implementing Playwright tests, provide:
- Page Object classes
- Test files with proper assertions
- Fixture setup if needed
- Configuration recommendations
Knowledge Reference
Playwright, Page Object Model, auto-waiting, locators, fixtures, API mocking, trace viewer, visual comparisons, parallel execution, CI/CD integration
Documentation
Install playwright-expert
Download and extract the skill files to your .claude/skills/ directory.
Download ZIPClone the repository and copy the skill files to your project.
git clone https://github.com/Jeffallan/claude-skills/blob/main/skills/playwright-expert/SKILL.md # Copy SKILL.md to your .claude/skills/ directory
Copy





Home
