E2e
End-to-end testing skill. Activates for browser-based E2E tests, cross-browser testing, flaky test fixes, or page object models. Supports Playwright, Cypress, Selenium. Triggers on: /godmode:e2e, "E2E test", "browser test", "Playwright test", "Cypress test".From its SKILL.md
npx -y skills add arbazkhan971/godmode --skill e2eAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
6.1 KB, as published. Nobody here has run it
E2E — End-to-End Testing
Activate When
- User invokes
/godmode:e2e - User says "end to end", "end-to-end", "e2e test", "user flow test", "checkout flow"
- User says "E2E test", "browser test", "integration test"
- User asks about Playwright, Cypress, or Selenium
- User needs to fix flaky E2E tests
- Ship skill needs user-flow validation
Workflow
Step 1: Assess E2E Test State
# Find existing E2E tests
find . -name "*.e2e.*" -o -name "*.spec.*" \
| grep -i -E "e2e|playwright|cypress" \
| grep -v node_modules
# Check for test framework config
ls playwright.config.* cypress.config.* wdio.conf.* \
2>/dev/null
# Count existing test files
find e2e/ tests/ -name "*.spec.ts" 2>/dev/null | wc -l
E2E TEST STATE:
Framework: <Playwright | Cypress | Selenium | none>
Config file: <path or none>
Test count: <N>
Page objects: <N> (or none)
Flaky tests: <N known flaky | unknown>
IF test count == 0: scaffold from scratch
IF test count > 0 AND flaky > 3: prioritize remediation
IF framework == none: default to Playwright
Step 2: Design Test Architecture
e2e/
├── tests/ # By feature
│ ├── auth/
│ │ ├── login.spec.ts
│ │ └── registration.spec.ts
│ ├── checkout/
│ │ ├── cart.spec.ts
│ │ └── payment.spec.ts
│ └── dashboard/
│ └── navigation.spec.ts
├── pages/ # Page Object Models
│ ├── base.page.ts
│ ├── login.page.ts
│ └── dashboard.page.ts
└── fixtures/
└── test-data.ts
Step 3: Page Object Model
All locators live in page objects. Tests call methods only.
Step 4: Write E2E Tests
Simulate real user journeys (login, add to cart, checkout), not individual page checks.
Step 5: Flakiness Remediation
FLAKINESS DIAGNOSIS:
| Symptom | Fix |
|----------------------|------------------------------|
| Element not found | Use auto-waiting locators |
| Timeout on nav | waitForLoadState, bump limit |
| Stale element ref | Re-query after action |
| Test order deps | Isolate data in beforeEach |
ANTI-FLAKINESS RULES:
- Never use fixed sleep — use auto-waiting assertions
- Never depend on execution order — independent tests
- Never use CSS selectors — use data-testid, roles
- Always seed test data via API, not through the UI
- Always retry failed tests in CI (investigate repeats)
- Always record traces/screenshots on failure
THRESHOLDS:
Pass rate target: 100% over 10 consecutive runs
Max flaky tolerance: 0 (zero flaky tests in suite)
Retry budget in CI: 2 retries per test max
Step 6: Cross-Browser Testing
BROWSER MATRIX:
| Browser | Engine | Status |
|---------------|----------|------------|
| Chrome | Chromium | <PASS/FAIL>|
| Firefox | Gecko | <PASS/FAIL>|
| Safari | WebKit | <PASS/FAIL>|
| Mobile Chrome | Chromium | <PASS/FAIL>|
| Mobile Safari | WebKit | <PASS/FAIL>|
Step 7: Generate E2E Report
E2E REPORT — <project>
Framework: <Playwright | Cypress>
Total: <N> tests, Passing: <N>, Failing: <N>
Duration: <X>s (parallel: <N> workers)
Cross-browser: chromium PASS, firefox PASS, webkit PASS
Commit: "e2e: <project> — <N> tests across <N> flows"
# Run end-to-end tests
npx playwright test --reporter=list
npx cypress run --browser chrome
Key Behaviors
Never ask to continue. Loop autonomously until done.
- Page objects mandatory. No selectors in test files.
- Test user journeys, not pages.
- Stability over speed. Fix flakiness before adding tests.
- Use auto-waiting. Never use
sleep(). - Test data isolation. Each test owns its data.
- Fail with context. Screenshots + traces on failure.
HARD RULES
- Never use CSS selectors as test locators.
- Never use fixed
sleep()orwaitForTimeout(). - Never depend on test execution order.
- Never put selectors directly in test files.
- Never skip flaky test investigation — fix or delete within 48 hours.
Keep/Discard Discipline
After EACH test spec or flakiness fix:
1. MEASURE: Run 10 times — pass rate?
2. DECIDE:
KEEP if: 100% pass rate AND no timing waits
DISCARD if: <100% OR uses sleep/waitForTimeout
3. COMMIT kept. Delete discarded before adding more.
Loop Protocol
test_flow_queue = detect_untested_user_flows()
WHILE test_flow_queue is not empty:
batch = test_flow_queue.take(3)
FOR each flow in batch:
1. Create Page Objects for the flow
2. Write spec: happy + error + edge cases
3. Run across browser matrix
4. IF flaky: diagnose, apply fix
5. IF pass rate < 100%: discard and rewrite
IF queue empty: run full suite, generate report
Auto-Detection
1. Check for: playwright.config.*, cypress.config.*
2. Scan for: *.e2e.*, *.spec.* in e2e/ or tests/
3. Detect frontend: Next.js, React, Vue, Angular
4. Check for page objects: e2e/pages/
5. Detect app URL from config or package.json
Output Format
Print: E2E: {tests} tests, {flows} flows, {browsers} browsers. Pass: {rate}%. Flaky: {count}. Verdict: {verdict}.
TSV Logging
Log to .godmode/e2e-results.tsv:
iteration flow browser tests_passing flaky status
Stop Conditions
STOP when ANY of:
- All critical flows covered at 100% pass rate
- Cross-browser matrix passes (chromium, firefox, webkit)
- User requests stop
- Max 10 iterations reached
<!-- tier-3 -->
Error Recovery
- Tests fail on first run: check dev server, baseURL,
run
npx playwright install. - Element not found: switch to accessible locators.
- Timeout: increase actionTimeout, check network.
- Flaky: run
--repeat-each=10, fix root cause. - CI failures: compare browser versions, enable traces.