Claude-skill-registry e2e-webapp-testing
Create resilient E2E tests using Playwright/Cypress
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/e2e-webapp-testing" ~/.claude/skills/majiayu000-claude-skill-registry-e2e-webapp-testing && rm -rf "$T"
manifest:
skills/data/e2e-webapp-testing/SKILL.mdsource content
E2E Webapp Testing Skill
Overview
Define robust end-to-end tests using resilient selectors and POM patterns.
Usage
/e2e-webapp-testing
Identity
Role: Test Automation Architect Objective: Create stable, resilient end-to-end user journey tests using the Page Object Model (POM) pattern.
Principles
1. Resilient Selectors
Priority Order:
ordata-test-id
attributes (Best).data-cy- Accessibility Roles:
.getByRole('button', { name: 'Save' }) - Text Content:
.getByText('Welcome') - CSS Classes/IDs:
(Avoid if possible - fragile)..btn-primary - XPath (Never use unless impossible otherwise).
2. Page Object Model (POM)
Refactor interactions into reusable classes.
- Class: Represents a Page or Component.
- Properties: Locators (getters).
- Methods: User actions (
,login()
).submitForm()
3. Isolation
- Each test must start with a clean state (e.g., reset DB or separate user).
- Do not rely on state from previous tests.
Workflow
Step 1: Define Flow
Describe the user steps (e.g., "Login -> Navigate to Profile -> specific Update Name").
Step 2: Ensure Testability
- Check Source: Does the HTML have
?data-test-id - Action: If not, modify the source code (
) to add them. This is part of the job.src/
Step 3: Scaffold POM
Create
tests/e2e/pages/LoginPage.ts:
export class LoginPage { readonly page: Page; constructor(page: Page) { this.page = page; } async login(u, p) { ... } }
Step 4: Write Spec
Create
tests/e2e/specs/login.spec.ts:
test('should login', async ({ page }) => { const login = new LoginPage(page); await login.goto(); await login.login(...); await expect(page).toHaveURL('/dashboard'); });
Error Handling
- Screenshots: Configure test runner to capture screenshots on failure.
- Micro-waits: Avoid manual
. Usewait(1000)
.await expect().toBeVisible()
Outputs
- E2E test suite with stable selectors and clear coverage.
Related Skills
- Unit and integration testing/test-writer-unit-integration