New to Claude Skills? Learn how to install them →

alirezarezvani on GitHub

Generate Playwright Tests

Free

Automatically generate Playwright tests from user stories or components.

Get this skill

Free · Opens the source repo

What Generate Playwright Tests does

Generate Playwright Tests is a skill designed to streamline the process of writing end-to-end tests for web applications using Playwright. By inputting a user story, URL, component name, or feature description, developers can quickly create production-ready test scripts. The skill intelligently parses the input to identify the necessary context, such as user behaviors and component interactions, making it easier to ensure comprehensive test coverage.

The skill operates in several steps, starting with understanding the target based on the provided arguments. It then explores the codebase to gather relevant context, including configurations, existing tests, and component details. By leveraging templates for various testing scenarios, the skill adapts to the specific requirements of the application, replacing placeholders with actual selectors and data as needed.

Once the test structure is established, the skill generates the test code following best practices, ensuring that the resulting scripts are robust and maintainable. It prioritizes the use of semantic locators and includes error handling, making the tests reliable. Additionally, the skill can create supporting files like page objects and fixtures when necessary, further enhancing test organization and reusability.

This skill is particularly beneficial for developers who want to automate the testing process in their web applications. It reduces the time spent writing repetitive test cases and helps maintain a consistent testing approach across the codebase, ultimately leading to higher code quality and fewer bugs in production.

When to use it

Use this skill when you need to quickly generate Playwright tests based on user stories or component specifications.

When not to use it

This skill may not be suitable for projects that require highly customized or complex testing scenarios that cannot be captured by templates.

What you can build with it

Generate tests for a login feature

Input a user story like 'user can log in with email and password' to create tests that validate the login functionality.

Create tests for a checkout flow

Provide a description of the checkout process to automatically generate tests that cover various scenarios in the checkout flow.

Test a specific component

Use the path to a component, such as 'src/components/UserProfile.tsx', to generate tests that ensure its functionality works as expected.

How to install Generate Playwright Tests

View source

1. Install with the skills CLI

npx skills add alirezarezvani/claude-skills/generate --agent claude-code

2. Or install it manually

Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.

Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs

Inside SKILL.md

Written by alirezarezvani

Generate Playwright Tests

Generate production-ready Playwright tests from a user story, URL, component name, or feature description.

Input

$ARGUMENTS contains what to test. Examples:

  • "user can log in with email and password"
  • "the checkout flow"
  • "src/components/UserProfile.tsx"
  • "the search page with filters"

Steps

1. Understand the Target

Parse $ARGUMENTS to determine:

  • User story: Extract the behavior to verify
  • Component path: Read the component source code
  • Page/URL: Identify the route and its elements
  • Feature name: Map to relevant app areas

2. Explore the Codebase

Use the Explore subagent to gather context:

  • Read playwright.config.ts for testDir, baseURL, projects
  • Check existing tests in testDir for patterns, fixtures, and conventions
  • If a component path is given, read the component to understand its props, states, and interactions
  • Check for existing page objects in pages/
  • Check for existing fixtures in fixtures/
  • Check for auth setup (auth.setup.ts or storageState config)

3. Select Templates

Check templates/ in this plugin for matching patterns:

If testing...Load template from
Login/auth flow../pw/templates/auth/login.md
CRUD operationstemplates/crud/
Checkout/paymenttemplates/checkout/
Search/filter UItemplates/search/
Form submissiontemplates/forms/
Dashboard/datatemplates/dashboard/
Settings pagetemplates/settings/
Onboarding flowtemplates/onboarding/
API endpointstemplates/api/
Accessibilitytemplates/accessibility/

Adapt the template to the specific app — replace {{placeholders}} with actual selectors, URLs, and data.

4. Generate the Test

Follow these rules:

Structure:

import { test, expect } from '@playwright/test';
// Import custom fixtures if the project uses them

test.describe('Feature Name', () => {
  // Group related behaviors

  test('should <expected behavior>', async ({ page }) => {
    // Arrange: navigate, set up state
    // Act: perform user action
    // Assert: verify outcome
  });
});

Locator priority (use the first that works):

  1. getByRole() — buttons, links, headings, form elements
  2. getByLabel() — form fields with labels
  3. getByText() — non-interactive text content
  4. getByPlaceholder() — inputs with placeholder text
  5. getByTestId() — when semantic options aren't available

Assertions — always web-first:

// GOOD — auto-retries
await expect(page.getByRole('heading')).toBeVisible();
await expect(page.getByRole('alert')).toHaveText('Success');

// BAD — no retry
const text = await page.textContent('.msg');
expect(text).toBe('Success');

Never use:

  • page.waitForTimeout()
  • page.$(selector) or page.$$(selector)
  • Bare CSS selectors unless absolutely necessary
  • page.evaluate() for things locators can do

Always include:

  • Descriptive test names that explain the behavior
  • Error/edge case tests alongside happy path
  • Proper await on every Playwright call
  • baseURL-relative navigation (page.goto('/') not page.goto('http://...'))

5. Match Project Conventions

  • If project uses TypeScript → generate .spec.ts
  • If project uses JavaScript → generate .spec.js with require() imports
  • If project has page objects → use them instead of inline locators
  • If project has custom fixtures → import and use them
  • If project has a test data directory → create test data files there

6. Generate Supporting Files (If Needed)

  • Page object: If the test touches 5+ unique locators on one page, create a page object
  • Fixture: If the test needs shared setup (auth, data), create or extend a fixture
  • Test data: If the test uses structured data, create a JSON file in test-data/

7. Verify

Run the generated test:

npx playwright test <generated-file> --reporter=list

If it fails:

  1. Read the error
  2. Fix the test (not the app)
  3. Run again
  4. If it's an app issue, report it to the user

Output

  • Generated test file(s) with path
  • Any supporting files created (page objects, fixtures, data)
  • Test run result
  • Coverage note: what behaviors are now tested

Frequently asked questions about Generate Playwright Tests

Similar skills