Claude Code Plugins

Community-maintained marketplace

Feedback

Write Playwright tests, migrate from Cypress, and answer Playwright questions. Use when working with e2e tests, browser automation, Playwright, or migrating from Cypress.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name playwright
description Write Playwright tests, migrate from Cypress, and answer Playwright questions. Use when working with e2e tests, browser automation, Playwright, or migrating from Cypress.
user-invocable false

Playwright Testing Skill

Quick Start

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

test('example test', async ({ page }) => {
    await page.goto('https://example.com');
    await expect(page).toHaveTitle(/Example/);
    await page.getByRole('button', { name: 'Submit' }).click();
    await expect(page.getByText('Success')).toBeVisible();
});

Project Setup

# Initialize new project
npm init playwright@latest

# Install in existing project
npm install -D @playwright/test
npx playwright install

Core Concepts

Locators (Prefer User-Facing)

page.getByRole('button', { name: 'Submit' })  // Best: accessibility
page.getByText('Welcome')                      // By visible text
page.getByLabel('Email')                       // Form fields
page.getByTestId('submit-btn')                 // data-testid fallback
page.locator('css-selector')                   // Last resort

Assertions (Auto-Retry)

await expect(locator).toBeVisible();
await expect(locator).toHaveText('Hello');
await expect(page).toHaveURL(/dashboard/);

Test Structure

test.describe('Feature', () => {
    test.beforeEach(async ({ page }) => {
        await page.goto('/');
    });

    test('scenario', async ({ page }) => {
        // test code
    });
});

Reference Files

File Use When
REFERENCE.md Need API details for locators, assertions, config
CYPRESS-MIGRATION.md Converting Cypress tests to Playwright
PATTERNS.md Implementing POM, auth, mocking, visual tests

Common Commands

npx playwright test                    # Run all tests
npx playwright test --headed           # Run with browser visible
npx playwright test --ui               # Interactive UI mode
npx playwright test --debug            # Debug mode with inspector
npx playwright test -g "login"         # Run tests matching pattern
npx playwright codegen example.com     # Generate tests by recording
npx playwright show-report             # View HTML report

Best Practices

  1. Use role-based locators - Most resilient to DOM changes
  2. Avoid CSS/XPath - Brittle, break with refactoring
  3. Use auto-waiting assertions - expect(locator).toBeVisible() retries
  4. Isolate tests - Each test starts fresh, no shared state
  5. Mock external APIs - Use page.route() for reliability