testing-e2e
E2E Testing Patterns
End-to-end testing with Playwright 1.58+, visual regression, accessibility, and AI agent workflows.
Quick Reference
| Category | Rules | Impact | When to Use |
|---|---|---|---|
| Playwright Core | rules/e2e-playwright.md |
HIGH | Semantic locators, auto-wait, flaky detection |
| Page Objects | rules/e2e-page-objects.md |
HIGH | Encapsulate page interactions, visual regression |
| AI Agents | rules/e2e-ai-agents.md |
HIGH | Planner/Generator/Healer, init-agents |
| A11y Playwright | rules/a11y-playwright.md |
MEDIUM | Full-page axe-core scanning with WCAG 2.2 AA |
| A11y CI/CD | rules/a11y-testing.md |
MEDIUM | CI gates, jest-axe unit tests, PR blocking |
| End-to-End Types | rules/validation-end-to-end.md |
HIGH | tRPC, Prisma, Pydantic type safety |
Total: 6 rules, 4 references, 3 checklists, 3 examples, 1 script
Playwright Quick Start
import { test, expect } from '@playwright/test';
test('user can complete checkout', async ({ page }) => {
await page.goto('/products');
await page.getByRole('button', { name: 'Add to cart' }).click();
await page.getByRole('link', { name: 'Checkout' }).click();
await page.getByLabel('Email').fill('test@example.com');
await page.getByRole('button', { name: 'Submit' }).click();
await expect(page.getByRole('heading', { name: 'Order confirmed' })).toBeVisible();
});
Locator Priority: getByRole() > getByLabel() > getByPlaceholder() > getByTestId()
Playwright Core
Semantic locator patterns and best practices for resilient tests.
| Rule | File | Key Pattern |
|---|---|---|
| Playwright E2E | rules/e2e-playwright.md |
Semantic locators, auto-wait, new 1.58+ features |
Anti-patterns (FORBIDDEN):
- Hardcoded waits:
await page.waitForTimeout(2000) - CSS selectors for interactions:
await page.click('.submit-btn') - XPath locators
Page Objects
Encapsulate page interactions into reusable classes.
| Rule | File | Key Pattern |
|---|---|---|
| Page Object Model | rules/e2e-page-objects.md |
Locators in constructor, action methods, assertion methods |
const checkout = new CheckoutPage(page);
await checkout.fillEmail('test@example.com');
await checkout.submit();
await checkout.expectConfirmation();
AI Agents
Playwright 1.58+ AI agent framework for test planning, generation, and self-healing.
| Rule | File | Key Pattern |
|---|---|---|
| AI Agents | rules/e2e-ai-agents.md |
Planner, Generator, Healer workflow |
npx playwright init-agents --loop=claude # For Claude Code
Workflow: Planner (explores app, creates specs) -> Generator (reads spec, tests live app) -> Healer (fixes failures, updates selectors).
Accessibility (Playwright)
Full-page accessibility validation with axe-core in E2E tests.
| Rule | File | Key Pattern |
|---|---|---|
| Playwright + axe | rules/a11y-playwright.md |
WCAG 2.2 AA, interactive state testing |
import AxeBuilder from '@axe-core/playwright';
test('page meets WCAG 2.2 AA', async ({ page }) => {
await page.goto('/');
const results = await new AxeBuilder({ page })
.withTags(['wcag2a', 'wcag2aa', 'wcag22aa'])
.analyze();
expect(results.violations).toEqual([]);
});
Accessibility (CI/CD)
CI pipeline integration and jest-axe unit-level component testing.
| Rule | File | Key Pattern |
|---|---|---|
| CI Gates + jest-axe | rules/a11y-testing.md |
PR blocking, component state testing |
End-to-End Types
Type safety across API layers to eliminate runtime type errors.
| Rule | File | Key Pattern |
|---|---|---|
| Type Safety | rules/validation-end-to-end.md |
tRPC, Zod, Pydantic, schema rejection tests |
Visual Regression
Native Playwright screenshot comparison without external services.
await expect(page).toHaveScreenshot('checkout-page.png', {
maxDiffPixels: 100,
mask: [page.locator('.dynamic-content')],
});
See references/visual-regression.md for full configuration, CI/CD workflows, cross-platform handling, and Percy migration guide.
Key Decisions
| Decision | Recommendation |
|---|---|
| E2E framework | Playwright 1.58+ with semantic locators |
| Locator strategy | getByRole > getByLabel > getByTestId |
| Browser | Chromium (Chrome for Testing in 1.58+) |
| Page pattern | Page Object Model for complex pages |
| Visual regression | Playwright native toHaveScreenshot() |
| A11y testing | axe-core (E2E) + jest-axe (unit) |
| CI retries | 2-3 in CI, 0 locally |
| Flaky detection | failOnFlakyTests: true in CI |
| AI agents | Planner/Generator/Healer via init-agents |
| Type safety | tRPC for end-to-end, Zod for runtime validation |
References
| Resource | Description |
|---|---|
references/playwright-1.57-api.md |
Playwright 1.58+ API: locators, assertions, AI agents, auth, flaky detection |
references/playwright-setup.md |
Installation, MCP server, seed tests, agent initialization |
references/visual-regression.md |
Screenshot config, CI/CD workflows, cross-platform, Percy migration |
references/a11y-testing-tools.md |
jest-axe setup, Playwright axe-core, CI pipelines, manual checklists |
Checklists
| Checklist | Description |
|---|---|
checklists/e2e-checklist.md |
Locator strategy, page objects, CI/CD, visual regression |
checklists/e2e-testing-checklist.md |
Comprehensive: planning, implementation, SSE, responsive, maintenance |
checklists/a11y-testing-checklist.md |
Automated + manual: keyboard, screen reader, color contrast, WCAG |
Examples
| Example | Description |
|---|---|
examples/e2e-test-patterns.md |
User flows, page objects, auth fixtures, API mocking, multi-tab, file upload |
examples/a11y-testing-examples.md |
jest-axe components, Playwright axe E2E, custom rules, CI pipeline |
examples/orchestkit-e2e-tests.md |
OrchestKit analysis flow: page objects, SSE progress, error handling |
Scripts
| Script | Description |
|---|---|
scripts/create-page-object.md |
Generate Playwright page object with auto-detected patterns |
Related Skills
testing-unit- Unit testing patterns with mocking, fixtures, and data factoriestest-standards-enforcer- AAA and naming enforcementrun-tests- Test execution orchestration