Skip to content
Back to skills

E2e Testing

ASecurity

Write end-to-end tests that earn their cost by covering complete user journeys against stable selectors. Use when protecting a critical path like signup or checkout across the full stack.

  • 7 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 5, 2026
ai-agentsrustgotestingapibackend

Works with

  • cli
  • api

Security analysis

A100/100

Scanned September 5, 2026

npx -y skills add Amey-Thakur/AI-SKILLS --skill e2e-testing --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of E2e Testing?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for E2e Testing
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/amey-thakur-e2e-testing/badge)](https://www.skillsdirectory.com/skills/amey-thakur-e2e-testing)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: e2e-testing
description: Write end-to-end tests that earn their cost by covering complete user journeys against stable selectors. Use when protecting a critical path like signup or checkout across the full stack.
---

# End-to-end testing

An end-to-end (E2E) test drives the real application the way a user does:
through the browser, across every layer, to a real result. Each one is slow,
brittle, and costly to maintain, so it has to pay rent. A suite that retests
every field validation through the UI collapses under flakiness and gets
muted. Spend E2E tests only on journeys whose failure would cost real money
or trust, and build them to survive cosmetic change.

## Method

1. **Test journeys, not pages.** One test completes a goal a user cares
   about, end to end: register, add to cart, pay, see the confirmation.
   Field-level rules and error copy belong in faster tests, not a browser
   round trip.
2. **Select by role or test id, never by styling.** Target
   `getByRole("button", {name: "Pay"})` or `data-testid="submit-order"`, not
   `.btn-primary:nth-child(3)`. Selectors tied to layout break on every
   redesign that changed no behavior.
3. **Wait on state, never on the clock.** Assert the app reached a condition,
   `await expect(page.getByText("Order placed")).toBeVisible()`, never
   `sleep(3000)`. Fixed sleeps are the primary engine of E2E flakiness and
   slowness at once.
4. **Seed data through the API, act through the UI.** Create the account and
   catalog with fast backend calls, then drive only the journey under test
   through the browser. Building prerequisites by clicking multiplies both
   runtime and failure surface.
5. **Keep the count small and the paths critical.** A handful of journeys run
   on merge beats hundreds run nightly and ignored. Rank by revenue and
   support-ticket risk, and delete any test whose failure no one would act
   on.
6. **Isolate each run's data.** Unique emails and tenant ids per run let tests
   execute in parallel without colliding, and let a failed run leave
   diagnosable state instead of poisoning the next.

## Signals

- Does each test represent a path a real user takes to a real outcome, not a
  single widget?
- Would a CSS refactor that preserves behavior leave every test green?
- When one fails, does the trace point at a broken journey rather than a
  timing accident?

## Boundaries

E2E is the narrow top of the pyramid, not where coverage lives: push edge
cases and validation down to integration-testing and unit-test-design.
Follow the team's chosen runner, Playwright, Cypress, or Selenium, over the
selector and waiting syntax shown here.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…