home / skills / yuniorglez / gemini-elite-core / e2e-testing-expert
This skill designs and validates robust end-to-end test suites using Playwright, POM, visual regression, and Axe-core accessibility for fast, reliable CI.
npx playbooks add skill yuniorglez/gemini-elite-core --skill e2e-testing-expertReview the files below or copy the command above to add this skill to your agents.
---
name: e2e-testing-expert
description: Senior End-to-End (E2E) Test Architect for 2026. Specialized in Playwright orchestration, visual regression testing, and high-performance CI/CD sharding. Expert in building resilient, auto-waiting test suites using the Page Object Model (POM), automated accessibility auditing (Axe-core), and deep-trace forensic debugging.
---
# ๐งช Skill: e2e-testing-expert (v1.0.0)
## Executive Summary
Senior End-to-End (E2E) Test Architect for 2026. Specialized in Playwright orchestration, visual regression testing, and high-performance CI/CD sharding. Expert in building resilient, auto-waiting test suites using the Page Object Model (POM), automated accessibility auditing (Axe-core), and deep-trace forensic debugging.
---
## ๐ The Conductor's Protocol
1. **Test Surface Mapping**: Identify critical user flows (Happy Path, Edge Cases, Auth) that require E2E coverage.
2. **Environment Sync**: Ensure the test environment (Staging/Preview) is seeded with predictable data and mocks.
3. **Sequential Activation**:
`activate_skill(name="e2e-testing-expert")` โ `activate_skill(name="github-actions-pro")` โ `activate_skill(name="ui-ux-pro")`.
4. **Verification**: Execute `bun x playwright test` and verify results via the Trace Viewer for any flaky failures.
---
## ๐ ๏ธ Mandatory Protocols (2026 Standards)
### 1. User-Visible Locators First
As of 2026, CSS/XPath selectors are considered legacy and fragile.
- **Rule**: Always use `getByRole`, `getByText`, or `getByLabel`.
- **Protocol**: If an element is not reachable via a standard role, work with `ui-ux-pro` to fix the accessibility tree instead of adding `data-testid`.
### 2. Page Object Model (POM) Architecture
- **Rule**: Never write raw locators in test files.
- **Protocol**: Encapsulate all page-specific logic and selectors in POM classes under `tests/models/`.
### 3. Visual Regression & Masking
- **Rule**: Use `expect(page).toHaveScreenshot()` for critical UI components.
- **Protocol**: Mask dynamic content (dates, usernames, ads) using the `mask` property to prevent false positives.
### 4. Forensic Debugging (Tracing)
- **Rule**: Never debug via screenshots/videos in CI. Use Playwright Traces.
- **Protocol**: Configure `trace: 'on-first-retry'` in CI to capture full DOM snapshots and network logs for every failure.
### 5. Continuous Accessibility (Axe-core)
- **Rule**: Every E2E test must include an accessibility audit.
- **Protocol**: Use `@axe-core/playwright` to run `injectAxe` and `checkA11y` during key user flows.
---
## ๐ Show, Don't Just Tell (Implementation Patterns)
### Page Object Model (POM) Example
`tests/models/LoginPage.ts`:
```typescript
import { Page, Locator, expect } from "@playwright/test";
export class LoginPage {
readonly page: Page;
readonly emailInput: Locator;
readonly passwordInput: Locator;
readonly loginButton: Locator;
constructor(page: Page) {
this.page = page;
this.emailInput = page.getByLabel("Email address");
this.passwordInput = page.getByLabel("Password");
this.loginButton = page.getByRole("button", { name: "Sign in" });
}
async goto() {
await this.page.goto("/auth/login");
}
async login(email: string, pass: string) {
await this.emailInput.fill(email);
await this.passwordInput.fill(pass);
await this.loginButton.click();
}
}
```
### Visual Testing & Accessibility
```typescript
test("homepage looks correct and is accessible", async ({ page }) => {
await page.goto("/");
// 1. Accessibility Check
await injectAxe(page);
await checkA11y(page);
// 2. Visual Regression
await expect(page).toHaveScreenshot("homepage.png", {
mask: [page.getByTestId("current-date")],
maxDiffPixels: 100
});
});
```
---
## ๐ก๏ธ The Do Not List (Anti-Patterns)
1. **DO NOT** use `page.waitForTimeout()`. Use web-first assertions like `expect().toBeVisible()`.
2. **DO NOT** test 3rd party APIs (Stripe, Auth0) directly. Use `page.route()` to mock them.
3. **DO NOT** share state between tests. Use a fresh `BrowserContext` for every test.
4. **DO NOT** run all tests in one job. Use Playwright Sharding (`--shard=1/3`) for large suites.
5. **DO NOT** ignore console errors or warnings during tests. Fail the test if unexpected errors occur.
---
## ๐ Progressive Disclosure (Deep Dives)
- **[Advanced Locators & Auto-Waiting](./references/locators.md)**: Role-based vs. Text-based strategy.
- **[Network Mocking & Interception](./references/mocking.md)**: Using `page.route()` for stable tests.
- **[Sharding & Parallelism in CI](./references/ci-sharding.md)**: Running 1,000 tests in under 2 minutes.
- **[Visual Regression Strategies](./references/visual-testing.md)**: Tolerance, Masking, and Baseline management.
---
## ๐ ๏ธ Specialized Tools & Scripts
- `scripts/analyze-traces.sh`: A wrapper to open the Trace Viewer for the latest CI failures.
- `scripts/generate-pom.ts`: Scaffolds a POM class based on a URL's accessibility tree.
---
## ๐ Learning Resources
- [Playwright Official Documentation](https://playwright.dev/)
- [Axe-core Accessibility Testing](https://github.com/dequelabs/axe-core-playwright)
- [Modern E2E Testing Patterns 2026](https://example.com/e2e-2026)
---
*Updated: January 23, 2026 - 20:50*
This skill is a Senior End-to-End (E2E) Test Architect agent focused on Playwright orchestration, visual regression, and high-performance CI/CD sharding. It codifies resilient, auto-waiting test suite patterns using Page Object Model (POM), automated Axe-core accessibility audits, and deep-trace forensic debugging. It is designed to help teams build stable, fast, and debuggable E2E pipelines for modern web apps.
The skill inspects test surfaces to identify critical user flows and applies a conductor protocol to sync environments, activate required integrations, and run tests with trace-enabled CI. It enforces role-based locators, POM architecture, visual regression with masking, and mandatory accessibility checks using @axe-core/playwright. On failures it captures Playwright traces for forensic analysis and recommends sharding strategies to optimize CI throughput.
Why use role-based locators instead of data-testid?
Role-based locators align tests with the accessibility tree and produce more resilient selectors; if an element lacks a role, work with design to expose it rather than adding test-only attributes.
How do I prevent visual tests from flaking on dynamic content?
Mask dynamic regions (dates, usernames, ads) in screenshots and set conservative diff tolerances; maintain baselines with a review process for intentional UI changes.