Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
laurigates avatar

Playwright Testing

  • 94 installs
  • 49 repo stars
  • Updated August 4, 2026
  • laurigates/claude-plugins

Helps with testing & qa tasks.

About

playwright-testing is a Claude Code skill for testing & qa. It helps solo builders move faster with AI-assisted development.

  • playwright-testing
  • Testing & QA
  • AI-coding skill

Playwright Testing by the numbers

  • 94 all-time installs (skills.sh)
  • Ranked #1,019 of 2,153 Testing & QA skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/laurigates/claude-plugins --skill playwright-testing

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs94
repo stars49
Last updatedAugust 4, 2026
Repositorylaurigates/claude-plugins

What it does

Helps with testing & qa tasks.

Files

SKILL.mdMarkdownGitHub ↗

Playwright Testing

Playwright is a modern end-to-end testing framework for web applications. It provides reliable, fast, and cross-browser testing with excellent developer experience.

When to Use This Skill

Use this skill when...Use another skill instead when...
Writing E2E browser testsWriting unit tests (use vitest-testing)
Testing across Chromium, Firefox, WebKitTesting Python code (use python-testing)
Setting up visual regression testingAnalyzing test quality (use test-quality-analysis)
Mocking network requests in E2E testsGenerating property-based tests (use property-based-testing)
Testing mobile viewportsTesting API contracts only (use api-testing)

Core Expertise

  • Cross-browser: Test on Chromium, Firefox, WebKit (Safari)
  • Reliable: Auto-wait, auto-retry, no flaky tests
  • Fast: Parallel execution, browser context isolation
  • Modern: TypeScript-first, async/await, auto-complete
  • Multi-platform: Windows, macOS, Linux

Installation

bun create playwright                  # Initialize (recommended)
bun add --dev @playwright/test         # Or install manually
bunx playwright install                # Install browsers
bunx playwright install --with-deps    # With system deps (Linux)
bunx playwright --version              # Verify

Configuration (playwright.config.ts)

import { defineConfig, devices } from '@playwright/test';

export default defineConfig({
  testDir: './tests',
  timeout: 30000,
  use: {
    baseURL: 'http://localhost:3000',
    trace: 'on-first-retry',
  },
  projects: [
    {
      name: 'chromium',
      use: { ...devices['Desktop Chrome'] },
    },
  ],
});

Essential Commands

bunx playwright test                           # Run all tests
bunx playwright test tests/login.spec.ts       # Specific file
bunx playwright test --headed                  # See browser
bunx playwright test --debug                   # Debug mode
bunx playwright test --project=chromium        # Specific browser
bunx playwright test --ui                      # UI mode
bunx playwright codegen http://localhost:3000  # Record tests
bunx playwright show-report                    # Last report
bunx playwright show-trace trace.zip           # Trace viewer
bunx playwright test --update-snapshots        # Update snapshots

Writing Tests

Basic Test Structure

import { test, expect } from '@playwright/test';

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

test.describe('login flow', () => {
  test('should login successfully', async ({ page }) => {
    await page.goto('/login');
    await page.fill('input[name="email"]', 'user@example.com');
    await page.fill('input[name="password"]', 'password123');
    await page.click('button[type="submit"]');
    await expect(page).toHaveURL('/dashboard');
  });
});

Selectors and Locators

// Text/Role selectors (recommended)
await page.getByText('Sign in').click();
await page.getByRole('button', { name: 'Submit' }).click();
await page.getByLabel('Email').fill('user@example.com');
await page.getByPlaceholder('Enter your name').fill('John');
await page.getByTestId('login-button').click();

// CSS/XPath selectors
await page.locator('.button-primary').click();
await page.locator('xpath=//button[text()="Submit"]').click();

// Chaining
await page.locator('.card').filter({ hasText: 'Product' }).getByRole('button').click();

Key Assertions

AssertionDescription
toHaveTitle(title)Page title
toHaveURL(url)Page URL
toBeVisible()Element visible
toBeEnabled()Element enabled
toHaveText(text)Element text
toContainText(text)Partial text
toHaveAttribute(name, value)Attribute value
toHaveClass(class)CSS class
toHaveValue(value)Input value
toBeEmpty()Empty input
toHaveCount(n)Element count
not.toBeDisabled()Negation

Agentic Optimizations

ContextCommand
Quick testbunx playwright test --reporter=line --bail
CI testbunx playwright test --reporter=github
Single browserbunx playwright test --project=chromium --reporter=line
Debug failingbunx playwright test --trace on --reporter=line
Headed debugbunx playwright test --headed --debug

For detailed examples, advanced patterns, and best practices, see REFERENCE.md.

References

  • Official docs: https://playwright.dev
  • Configuration: https://playwright.dev/docs/test-configuration
  • API reference: https://playwright.dev/docs/api/class-test
  • Best practices: https://playwright.dev/docs/best-practices
  • CI/CD: https://playwright.dev/docs/ci
  • Trace viewer: https://playwright.dev/docs/trace-viewer

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.