e2e-check
Run E2E tests or interactive browser verification. Triggers on: 'run e2e', 'e2e test', 'browser test', 'check in browser', 'verify UI', 'interactive test'.
Install
mkdir -p .claude/skills/e2e-check && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/15981" && unzip -o skill.zip -d .claude/skills/e2e-check && rm skill.zipInstalls to .claude/skills/e2e-check
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Run E2E tests or interactive browser verification. Triggers on: 'run e2e', 'e2e test', 'browser test', 'check in browser', 'verify UI', 'interactive test'.About this skill
Run E2E tests or perform interactive browser-based verification using Playwright.
Mode Detection
Parse $ARGUMENTS to determine mode:
- Runner mode (default): Run the Playwright test suite via CLI
- Interactive mode: If
--interactiveorinteractiveappears in args, use Playwright MCP tools for manual browser walkthrough
Runner Mode
1. Detect project
From $ARGUMENTS or current working directory:
- Match project name from cwd (e.g.,
my-appif cwd containsmy-app) - Check
CLAUDE.mdin the project root for the configured dev port and test command - No match: ask which project to target
2. Pre-flight check
Check if the dev server is running on the expected port (read from CLAUDE.md or the project manifest):
Use: bash -c "curl -s -o /dev/null -w '%{http_code}' http://localhost:{port}/ 2>/dev/null" or equivalent.
If the server is NOT running:
- Report: "Dev server not running on port {port}. Start it with your project's dev command (e.g.
yarn dev/npm run dev,python manage.py runserver,bundle exec rails s,go run, etc.), then re-run /e2e-check." - Do NOT auto-start the dev server. Stop here.
3. Run tests
Run the E2E test command from CLAUDE.md or the project manifest (e.g., yarn test:e2e or npm run test:e2e for JS, or pytest tests/e2e for Python).
If a test filter was provided (e.g., auth), resolve it to the spec file path:
auth→tests/e2e/auth.spec.ts- Full path → use as-is
4. Parse output
Extract from Playwright output:
- Total, passed, failed, skipped counts
- Duration
- On failure: spec file name, test name, error message
5. Report
E2E Test Results -- {project}
================================
Total: X | Passed: X | Failed: X | Skipped: X
Duration: Xs
Baseline: {expected from CLAUDE.md} tests
[If failures:]
FAILURES:
- {spec-file} > {test-name}: {error summary}
[If screenshots saved:]
Screenshots: test-results/{spec-file}/
6. On failure
- Check
test-results/directory for saved screenshots - Analyze failure type: timeout? Element not found? Assertion mismatch? Network error?
- Suggest fix based on the failure pattern
Interactive Mode
Use Playwright MCP tools to manually verify a user journey in the browser.
1. Navigate
Use mcp__playwright__browser_navigate to open http://localhost:{port} (port from CLAUDE.md).
ALWAYS use localhost, NEVER 127.0.0.1 (cookie domain mismatch issues).
2. Default journey (if no specific flow in args)
- Navigate to login page
- Fill credentials using
mcp__playwright__browser_fill_form(use dev test credentials from.envor.env.test) - Submit login form via
mcp__playwright__browser_click - Wait for dashboard to load via
mcp__playwright__browser_wait_for - Take snapshot via
mcp__playwright__browser_snapshotto verify dashboard renders data (not empty state) - Navigate to a key page (e.g., main feature list, report list)
- Verify data is present (not loading spinner, not error)
- Take screenshot via
mcp__playwright__browser_take_screenshotas evidence
3. Custom journey
If args specify a flow (e.g., --interactive reports), walk through that specific flow step by step using:
mcp__playwright__browser_navigatefor page navigationmcp__playwright__browser_snapshotto read current page state (DOM)mcp__playwright__browser_fill_formfor form inputsmcp__playwright__browser_clickfor button/link clicksmcp__playwright__browser_select_optionfor dropdownsmcp__playwright__browser_wait_forfor loading/transition statesmcp__playwright__browser_take_screenshotfor visual evidence
4. Report
Summarize:
- What pages were visited
- What was verified (data rendered, forms worked, navigation succeeded)
- Any issues found (errors, empty states, broken elements)
- Screenshot paths for evidence
Rules
- Always
localhost, never127.0.0.1, due to cookie domain issues - Dev port: read from
CLAUDE.mdor the project manifest for the active project - Package manager: check
CLAUDE.mdor detect from lockfile (yarn.lock→ yarn,package-lock.json→ npm) (non-Node stacks: detect the build/install tool from the manifest type, e.g. Gemfile.lock, poetry.lock, Cargo.lock, go.sum, etc.) - Never auto-start dev servers: report and stop if not running
- E2E baselines: compare against baseline documented in
CLAUDE.md