Claude-skills generate
install
source · Clone the upstream repo
git clone https://github.com/alirezarezvani/claude-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/alirezarezvani/claude-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/engineering-team/playwright-pro/skills/generate" ~/.claude/skills/alirezarezvani-claude-skills-generate-887631 && rm -rf "$T"
manifest:
engineering-team/playwright-pro/skills/generate/SKILL.mdsource content
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
forplaywright.config.ts
,testDir
,baseURLprojects - Check existing tests in
for patterns, fixtures, and conventionstestDir - 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 (
orauth.setup.ts
config)storageState
3. Select Templates
Check
templates/ in this plugin for matching patterns:
| If testing... | Load template from |
|---|---|
| Login/auth flow | |
| CRUD operations | |
| Checkout/payment | |
| Search/filter UI | |
| Form submission | |
| Dashboard/data | |
| Settings page | |
| Onboarding flow | |
| API endpoints | |
| 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):
— buttons, links, headings, form elementsgetByRole()
— form fields with labelsgetByLabel()
— non-interactive text contentgetByText()
— inputs with placeholder textgetByPlaceholder()
— when semantic options aren't availablegetByTestId()
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()
orpage.$(selector)page.$$(selector)- Bare CSS selectors unless absolutely necessary
for things locators can dopage.evaluate()
Always include:
- Descriptive test names that explain the behavior
- Error/edge case tests alongside happy path
- Proper
on every Playwright callawait
-relative navigation (baseURL
notpage.goto('/')
)page.goto('http://...')
5. Match Project Conventions
- If project uses TypeScript → generate
.spec.ts - If project uses JavaScript → generate
with.spec.js
importsrequire() - 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:
- Read the error
- Fix the test (not the app)
- Run again
- 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