Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generate e2e test suites using Playwright, Cypress, or Selenium with page objects, accessibility checks, visual regression, and cross-browser testing
.claude/skills/williamzujkowski-end-to-end-testing-framework-generator/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 64% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 191% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 37% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 99% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 18% | 0% |
Trigger conditions:
Scope: Generates production-ready test suites with framework-specific best practices, reusable page models, accessibility checks, and CI integration. Supports Playwright (recommended), Cypress, and Selenium WebDriver.
Not for: Unit tests, API tests (use dedicated skills), performance testing, or load testing.
Required before execution:
NOW_ET using NIST/time.gov semantics (America/New_York, ISO-8601)framework must be one of: playwright, cypress, seleniumapplication_type must be one of: web, spa, mobile-webtest_scope must be one of: smoke, critical-path, full-regressionfeatures array must not be empty (if provided)accessibility_level valid for WCAG standardsNOW_ET)NOW_ET)NOW_ET)NOW_ET)Abort if: Framework choice conflicts with application_type (e.g., Selenium for component testing), or accessibility_level requirements exceed framework capabilities.
Fast path for 80% of common cases:
Output: Working test suite with 1-3 smoke tests, reusable page object pattern, runnable locally.
Extended validation with accessibility and visual regression:
loginAsAdmin(), createEntity())await expect(page).toPassA11yChecks({ wcagLevel: 'AA' })Output: Comprehensive test suite with 10-20 tests covering critical paths, accessibility validation, visual regression, and multi-browser support.
Deep dive for production deployment:
--shard=1/4)Output: Production-ready test suite with CI integration, parallel execution, comprehensive reporting, and flaky test handling. Ready for continuous deployment pipelines.
Framework selection matrix:
| Requirement | Playwright | Cypress | Selenium | |------------|-----------|---------|----------| | Modern web/SPA | ✓ Best | ✓ Good | ○ OK | | Component testing | ○ Limited | ✓ Best | ✗ No | | Cross-browser (built-in) | ✓ Yes | ○ Chromium-only free | ✓ Yes | | Mobile emulation | ✓ Excellent | ✓ Good | ○ Limited | | Network interception | ✓ Built-in | ✓ Built-in | ✗ Requires proxy | | Debugging DX | ✓ Excellent | ✓ Excellent | ○ Basic | | Legacy browser support | ○ Limited | ✗ No | ✓ Yes |
Test scope thresholds:
Accessibility validation thresholds:
Abort conditions:
Required fields:
typescript{ test_suite: { files: string[], // Array of generated test file paths framework_config: object, // Framework-specific config object test_count: number, // Total number of test scenarios coverage_areas: string[] // List of tested features }, page_objects: { models: Array<{ // Page object classes name: string, path: string, methods: string[] }>, helpers: Array<{ // Utility functions name: string, description: string }> }, ci_config: { pipeline_file: string, // Path to CI config (e.g., .github/workflows/e2e.yml) parallelization_strategy: string, // "sharding" | "splitting" | "grid" browser_matrix: string[], // ["chromium", "firefox", "webkit"] estimated_duration_minutes: number }, a11y_checks: { rules: Array<{ // axe-core rules configuration id: string, impact: "critical" | "serious" | "moderate" | "minor" }>, compliance_level: "wcag-a" | "wcag-aa" | "wcag-aaa", reporter: string, // HTML, JSON, or custom violation_handling: "fail" | "warn" | "log" } }
Optional fields:
visual_regression: Screenshot comparison configurationtest_data: Fixture file paths and seeding strategiesenvironment_config: Environment-specific variables (staging, production)Example 1: Playwright Admin Dashboard Test (≤30 lines)
typescriptimport { test, expect } from '@playwright/test'; import { LoginPage } from '../pages/login-page'; import { DashboardPage } from '../pages/dashboard-page'; import { injectAxe, checkA11y } from 'axe-playwright'; test.describe('Admin Dashboard E2E', () => { test('authenticated user can view and create entities with WCAG AA compliance', async ({ page }) => { const loginPage = new LoginPage(page); await loginPage.navigate(); await loginPage.login('admin@example.com', process.env.ADMIN_PASSWORD); const dashboard = new DashboardPage(page); await expect(dashboard.welcomeMessage).toContainText('Welcome, Admin'); await injectAxe(page); await checkA11y(page, null, { detailedReport: true, wcagLevel: 'AA' }); await dashboard.clickCreateButton(); await dashboard.fillEntityForm({ name: 'Test Entity', type: 'Standard' }); await dashboard.submitForm(); await expect(dashboard.successToast).toBeVisible(); await expect(dashboard.entityList).toContainText('Test Entity'); await expect(page).toHaveScreenshot('dashboard-with-entity.png'); }); });
See /skills/e2e-testing-generator/examples/ for additional patterns and page object implementations.
Token budgets (enforced):
Safety checks:
Auditability requirements:
Determinism checks:
cy.wait(5000) or page.waitForTimeout(5000) without justificationPerformance criteria:
Official Documentation:
Best Practices and Patterns:
CI/CD Integration Examples:
Visual Regression Tools:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 15,960 | 11,677 | -27% | 1 | 1 | 0% | 4,040 | 6,619 | +64% | 0 | 0 | — |
case-07 | fail→pass | 8,255 | 7,160 | -13% | 1 | 1 | 0% | 1,741 | 5,069 | +191% | 0 | 0 | — |
case-02 | fail→pass | 19,487 | 14,575 | -25% | 1 | 1 | 0% | 5,464 | 7,495 | +37% | 0 | 0 | — |
case-03 | fail→pass | 12,648 | 9,969 | -21% | 1 | 1 | 0% | 3,089 | 6,132 | +99% | 0 | 0 | — |
case-04 | fail→fail | 14,839 | 14,547 | -2% | 1 | 1 | 0% | 3,749 | 6,905 | +84% | 0 | 0 | — |
case-05 | fail→fail | 14,620 | 6,088 | -58% | 1 | 1 | 0% | 3,725 | 4,591 | +23% | 0 | 0 | — |
case-06 | fail→fail | 11,826 | 7,806 | -34% | 1 | 1 | 0% | 2,320 | 4,955 | +114% | 0 | 0 | — |
case-08 | pass→pass | 8,603 | 5,465 | -36% | 1 | 1 | 0% | 1,730 | 4,681 | +171% | 0 | 0 | — |
case-09 | fail→fail | 7,680 | 6,432 | -16% | 1 | 1 | 0% | 1,456 | 4,682 | +222% | 0 | 0 | — |
case-10 | fail→fail | 12,086 | 7,765 | -36% | 1 | 1 | 0% | 2,984 | 5,426 | +82% | 0 | 0 | — |
case-11 | fail→fail | 7,786 | 4,968 | -36% | 1 | 1 | 0% | 1,673 | 4,586 | +174% | 0 | 0 | — |
case-22 | pass→pass | 10,042 | 5,596 | -44% | 1 | 1 | 0% | 1,704 | 4,552 | +167% | 0 | 0 | — |
case-12 | fail→pass | 27,101 | 15,631 | -42% | 1 | 1 | 0% | 6,204 | 7,300 | +18% | 0 | 0 | — |
case-13 | fail→pass | 9,086 | 10,145 | +12% | 1 | 1 | 0% | 2,270 | 5,902 | +160% | 0 | 0 | — |
case-14 | fail→fail | 13,224 | 7,589 | -43% | 1 | 1 | 0% | 2,461 | 4,932 | +100% | 0 | 0 | — |
case-15 | fail→fail | 7,896 | 8,126 | +3% | 1 | 1 | 0% | 1,607 | 4,894 | +205% | 0 | 0 | — |
case-16 | fail→pass | 8,272 | 3,462 | -58% | 1 | 1 | 0% | 1,681 | 4,109 | +144% | 0 | 0 | — |
case-17 | fail→pass | 9,086 | 1,987 | -78% | 1 | 1 | 0% | 795 | 3,865 | +386% | 0 | 0 | — |
case-18 | fail→pass | 12,806 | 3,225 | -75% | 1 | 1 | 0% | 726 | 4,116 | +467% | 0 | 0 | — |
case-19 | fail→pass | 8,051 | 5,260 | -35% | 1 | 1 | 0% | 1,689 | 4,605 | +173% | 0 | 0 | — |
case-20 | pass→pass | 13,682 | 12,209 | -11% | 1 | 1 | 0% | 2,469 | 5,927 | +140% | 0 | 0 | — |
case-21 | pass→fail | 12,057 | 7,125 | -41% | 1 | 1 | 0% | 2,250 | 5,022 | +123% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +41 percentage points is the difference between those two pass rates over the 21 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.