playwright-e2e-testing
Playwright E2E Testing
Quick Start
Test a login flow with evidence collection:
You: "Test the login flow at http://localhost:3000"
Claude: [Runs E2E test with]:
1. Initial state capture (snapshot + screenshot)
2. Form interaction (username/password)
3. Console error monitoring
4. Network request verification
5. Final state capture
6. Comprehensive test report
Result: Complete test report with screenshots, console logs, network activity, and pass/fail status.
Table of Contents
- When to Use This Skill
- What This Skill Does
- E2E Testing Workflow 3.1. Initial State Capture 3.2. Test Execution 3.3. Evidence Collection 3.4. Final Verification 3.5. Report Generation
- Common Test Scenarios
- Supporting Files
- Expected Outcomes
- Requirements
- Red Flags to Avoid
When to Use This Skill
Explicit Triggers
- "Test the user flow for [feature]"
- "Run E2E test on [URL]"
- "Validate the [workflow/form/checkout] process"
- "Check if [feature] works end-to-end"
- "Automated testing for [scenario]"
- "Verify [user journey]"
Implicit Triggers
- Need to validate multi-step workflows (login, checkout, signup)
- Regression testing after changes
- Collecting evidence for bug reports
- Verifying form submissions work correctly
- Testing SPA navigation and state changes
- Validating API interactions from browser
Debugging Triggers
- "Why is [feature] not working?"
- "Check console for errors during [action]"
- "Monitor network requests during [workflow]"
- "Capture evidence of [bug]"
What This Skill Does
This skill standardizes end-to-end testing with comprehensive evidence collection:
- State Capture - Takes snapshots and screenshots before and after tests
- Interaction Execution - Fills forms, clicks buttons, navigates pages
- Error Monitoring - Watches console for errors and warnings
- Network Verification - Tracks API calls and responses
- Evidence Collection - Generates reports with all artifacts
- Pass/Fail Determination - Validates expected outcomes
E2E Testing Workflow
3.1. Initial State Capture
Purpose: Establish baseline before test execution
Step 1: Navigate to application
browser_navigate(url="http://localhost:3000")
Step 2: Wait for page load
browser_wait_for(time=2)
Step 3: Capture accessibility snapshot
browser_snapshot()
→ Save as "initial-state.md"
Step 4: Take screenshot
browser_take_screenshot(filename="initial-state.png")
Why this matters: Initial state provides context for test failures and debugging.
3.2. Test Execution
Purpose: Execute user interactions systematically
Step 1: Identify form elements
browser_snapshot()
→ Find refs for input fields
Step 2: Fill form fields
browser_fill_form(fields=[
{name: "Email", ref: "ref_5", type: "textbox", value: "user@test.com"},
{name: "Password", ref: "ref_6", type: "textbox", value: "password123"}
])
Step 3: Submit form
browser_click(element="Login button", ref="ref_7")
Step 4: Wait for response
browser_wait_for(text="Welcome")
Pattern: Snapshot → Identify refs → Interact → Verify
3.3. Evidence Collection
Purpose: Gather diagnostic information during test
Step 1: Check console messages
browser_console_messages(level="error")
→ Capture any errors/warnings
Step 2: Monitor network requests
browser_network_requests()
→ Verify API calls succeeded
Step 3: Capture intermediate states
browser_take_screenshot(filename="step-2-after-login.png")
Evidence types:
- Console logs (errors, warnings, info)
- Network requests (status codes, URLs, timing)
- Screenshots (visual confirmation)
- Accessibility snapshots (DOM state)
3.4. Final Verification
Purpose: Validate test success criteria
Step 1: Verify expected elements
browser_snapshot()
→ Check for success indicators
Step 2: Capture final state
browser_take_screenshot(filename="final-state.png")
Step 3: Check for errors
browser_console_messages(level="error")
→ Ensure no errors during workflow
Success criteria:
- Expected text/elements present
- No console errors
- Network requests succeeded (2xx status codes)
- Final state matches expectations
3.5. Report Generation
Purpose: Create comprehensive test documentation
Use scripts/generate_test_report.py:
python scripts/generate_test_report.py \
--test-name "Login Flow" \
--initial-snapshot initial-state.md \
--final-snapshot final-state.md \
--screenshots initial-state.png,final-state.png \
--console-logs console.json \
--network-requests network.json \
--output test-report.md
Report includes:
- Test metadata (name, URL, timestamp)
- Pass/fail status with reasoning
- Console error summary
- Network request summary
- Screenshot gallery
- Accessibility snapshots
- Recommendations for failures
See references/report-template.md for structure.
Common Test Scenarios
Login Flow: Navigate → Capture state → Fill credentials → Submit → Wait for success → Verify console/network → Capture final state → Report
Form Submission: Navigate → Capture state → Fill fields → Submit → Wait for confirmation → Verify POST request → Check validation → Capture state → Report
Multi-Step Checkout: Add to cart → Checkout → Fill shipping/payment (capture each) → Submit order → Verify confirmation → Check all APIs → Report
SPA Navigation: Navigate → Click nav links → Verify URL changes → Check content updates → Monitor console/network → Capture states → Report
See examples/examples.md for 10+ detailed scenarios with complete code.
Supporting Files
scripts/ - generate_test_report.py (creates markdown reports), setup_test_env.py (initializes directories)
references/ - report-template.md (report structure), troubleshooting.md (common issues/solutions)
examples/ - examples.md (10+ complete test scenarios with code)
Expected Outcomes
Successful Test
✅ Test Passed: Login Flow
Test Summary:
- URL: http://localhost:3000/login
- Duration: 5.2 seconds
- Steps: 4
- Console Errors: 0
- Network Failures: 0
Evidence:
- Initial state: initial-state.png
- Final state: final-state.png
- Accessibility snapshots: 2
- Network requests: 3 (all 200 OK)
Verification:
✅ "Welcome, User" text found
✅ No console errors
✅ POST /api/login returned 200
✅ Dashboard loaded successfully
Full report: test-reports/login-flow-2025-12-20.md
Failed Test
❌ Test Failed: Login Flow
Test Summary:
- URL: http://localhost:3000/login
- Duration: 3.1 seconds (stopped early)
- Steps: 2 of 4 completed
- Console Errors: 2
- Network Failures: 1
Failure Reason:
Network request POST /api/login returned 401 Unauthorized
Console Errors:
1. [Error] Authentication failed: Invalid credentials
2. [Error] Uncaught TypeError: Cannot read property 'token' of undefined
Evidence:
- Initial state: initial-state.png
- Error state: error-state.png
- Network log: network.json
Recommendations:
1. Check API endpoint credentials
2. Verify authentication token handling
3. Add error handling for failed login attempts
Full report: test-reports/login-flow-failed-2025-12-20.md
Requirements
Tools:
- Playwright MCP tools (browser_navigate, browser_snapshot, etc.)
- Python 3.8+ (for report generation scripts)
- Write access to test output directory
Environment:
- Application running and accessible (local or remote)
- Network connectivity for API calls
- Sufficient disk space for screenshots
Knowledge:
- Basic understanding of web application flows
- Familiarity with CSS selectors or accessibility roles
- Understanding of HTTP status codes
Red Flags to Avoid
Testing Anti-Patterns:
- Starting test without capturing initial state
- Ignoring console errors during test execution
- Not verifying network requests succeeded
- Skipping final state capture
- Proceeding with test after clear failure
- Not waiting for async operations to complete
- Using hardcoded waits instead of
wait_fortext/elements - Generating report without all evidence files
Evidence Collection:
- Missing screenshots for critical steps
- Not checking console messages after interactions
- Ignoring network request failures
- Not capturing intermediate states for multi-step flows
Report Quality:
- Vague test names ("Test 1", "Flow 2")
- Missing pass/fail criteria
- No recommendations for failures
- Incomplete evidence references
Security:
- Including credentials in screenshots
- Committing sensitive test data to git
- Exposing API keys in network logs
- Sharing test reports with PII
Notes
Best Practices:
- Always capture initial and final state (snapshot + screenshot)
- Check console after every significant interaction
- Verify network requests for expected status codes
- Use descriptive test names and step descriptions
- Generate reports immediately after test completion
- Store test artifacts in organized directory structure
Performance Tips:
- Use
browser_wait_for(text="...")instead of fixed time waits - Take screenshots only at key steps (not every interaction)
- Filter console messages by level to reduce noise
- Clear network requests between test runs
Integration:
- Combine with CI/CD for automated regression testing
- Use with bug tracking to attach evidence to issues
- Share reports with team for test documentation
- Archive test artifacts for historical analysis