e2e-qalisted
Install: claude install-skill alex-macra/ai-skills-assembly
# End-to-end QA
E2E tests exercise the real, running application through its public interface. They are expensive (slow, flaky, hard to debug). Use them deliberately - for the few critical flows that *must* work - and aggressively for everything else.
## What belongs in E2E
- The login → core action → logout golden path.
- Payment / checkout / signup - anything that loses revenue or trust when broken.
- A handful of cross-page flows that span auth + data + UI state.
What does **not** belong in E2E:
- Form validation (unit-test the validator).
- Pure rendering (component test).
- Backend logic (integration test against the real API).
- Anything you can cover faster at a lower level.
If you find yourself writing the 30th E2E test for the same page, the pyramid is upside-down. Push them down to component or integration.
## Locator discipline
- **Prefer accessible queries.** `page.getByRole('button', { name: 'Save' })`, `page.getByLabel('Email')`, `page.getByText(...)`. They double as accessibility checks.
- **Fall back to test-ids only when role/label is ambiguous.** Test-ids are coupling between test and DOM - keep them rare.
- **Never select by CSS class.** Classes change with refactors; tests should not.
- **One assertion-style locator per test.** Don't `await page.locator('div').nth(3)` - name the thing.
## Waiting and synchronization
- **Wait for state, not for time.** `await expect(locator).toBeVisible()` retries automatically. `await page.waitForTimeout(500)` is