mcpField
P
playwright

playwright

github.com/partme-aiTesting & quality71898 installsUpdated 4w ago
Repository

About playwright

A skill guide for writing and running Playwright end-to-end browser tests. It covers cross-browser testing, reusable page objects, and debugging with traces and screenshots.

Key features

  1. 01Chromium, Firefox, and WebKit tests
  2. 02Auto-waiting locators and assertions
  3. 03Multiple pages and browser contexts
  4. 04CI projects with traces and screenshots
  5. 05Page Object Model guidance

Use cases

  1. 01Test a website's login flow
  2. 02Run browser tests in CI
  3. 03Debug failures with traces and screenshots
  4. 04Organize maintainable tests with page objects

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/partme-ai/full-stack-skills --skill playwright

After installing, type/playwrightin Claude Code to confirm it loaded.

Bundled filesLICENSE.txt

Details

From the project README

When to use this skill

Use this skill whenever the user wants to:

  • Write end-to-end browser tests with Playwright (Chromium, Firefox, WebKit)
  • Use auto-waiting locators and built-in assertions
  • Handle multiple pages, tabs, and browser contexts
  • Configure Playwright projects for CI execution with traces and screenshots
  • Implement the Page Object Model pattern for maintainable tests

How to use this skill

Workflow
  1. Initialize Playwright: npm init playwright to generate config and sample tests
  2. Write tests using auto-wait locators (getByRole, getByLabel, getByText)
  3. Run tests: npx playwright test in headless, headed, or UI mode
  4. Debug failures using traces, screenshots, and the Playwright Inspector
1. Basic Test
import { test, expect } from '@playwright/test';

test('homepage has title', async ({ page }) => {
  await page.goto('https://example.com');
  await expect(page).toHaveTitle(/Example/);
});

test('login flow', async ({ page }) => {
  await page.goto('https://example.com/login');
  await page.getByLabel('Username').fill('testuser');
  await page.getByLabel('Password').fill('secret');
  await page.getByRole('button', { name: 'Sign in' }).click();
  await expect(page.getByText('Dashboard')).toBeVisible();
});
2. Page Object Model
class LoginPage {
  constructor(private page: Page) {}

  async login(username: string, password: string) {
    await this.page.getByLabel('Username').fill(username);
    await this.page.getByLabel('Password').fill(password);
    await this.page.getByRole('button', { name: 'Sign in' }).click();
  }
}
3. Configuration
// playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
  testDir: './tests',
  retries: 2,
  use: {
    baseURL: 'https://example.com',
    trace: 'on-first-retry',
    screenshot: 'only-on-failure',
  },
  projects: [
    { name: 'chromium', use: { browserName: 'chromium' } },
    { name: 'firefox', use: { browserName: 'firefox' } },
    { name: 'webkit', use: { browserName: 'webkit' } },
  ],
});
4. Running Tests
npx playwright test                    # Run all tests headless
npx playwright test --headed           # Run with browser visible
npx playwright test --ui               # Interactive UI mode
npx playwright show-report             # View HTML report

Best Practices

  • Prefer role-based locators (getByRole, getByLabel) over fragile XPath or CSS selectors
  • Keep tests independent and repeatable; use beforeEach or fixtures to prepare state
  • Install browsers and dependencies in CI (npx playwright install --with-deps)
  • Retain traces and screenshots on failure for debugging
  • Use Playwright's built-in expect assertions — they auto-retry

Resources

Keywords

playwright, E2E, end-to-end testing, cross-browser, auto-wait, locators, getByRole, trace, Page Object Model, Chromium, Firefox, WebKit

Comments

Markdown supported