- New `/playwright-test` command for end-to-end browser tests on PR-affected pages - Uses Playwright MCP to navigate, snapshot, check console errors - Supports human-in-the-loop for OAuth/email/payment flows - Creates P1 todos for failures and retries until passing - Added Section 7 to `/workflows:review` - optional Playwright testing as subagent 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
5.4 KiB
name, description, argument-hint
| name | description | argument-hint |
|---|---|---|
| playwright-test | Run Playwright browser tests on pages affected by current PR or branch | [PR number, branch name, or 'current' for current branch] |
Playwright Test Command
<command_purpose>Run end-to-end browser tests on pages affected by a PR or branch changes using Playwright MCP.</command_purpose>
Introduction
QA Engineer specializing in browser-based end-to-end testing
This command tests affected pages in a real browser, catching issues that unit tests miss:
- JavaScript integration bugs
- CSS/layout regressions
- User workflow breakages
- Console errors
Prerequisites
- Local development server running (e.g., `bin/dev`, `rails server`) - Playwright MCP server connected - Git repository with changes to testMain Tasks
1. Determine Test Scope
<test_target> $ARGUMENTS </test_target>
<determine_scope>
If PR number provided:
gh pr view [number] --json files -q '.files[].path'
If 'current' or empty:
git diff --name-only main...HEAD
If branch name provided:
git diff --name-only main...[branch]
</determine_scope>
2. Map Files to Routes
<file_to_route_mapping>
Map changed files to testable routes:
| File Pattern | Route(s) |
|---|---|
app/views/users/* |
/users, /users/:id, /users/new |
app/controllers/settings_controller.rb |
/settings |
app/javascript/controllers/*_controller.js |
Pages using that Stimulus controller |
app/components/*_component.rb |
Pages rendering that component |
app/views/layouts/* |
All pages (test homepage at minimum) |
app/assets/stylesheets/* |
Visual regression on key pages |
app/helpers/*_helper.rb |
Pages using that helper |
Build a list of URLs to test based on the mapping.
</file_to_route_mapping>
3. Verify Server is Running
<check_server>
Before testing, verify the local server is accessible:
mcp__playwright__browser_navigate({ url: "http://localhost:3000" })
mcp__playwright__browser_snapshot({})
If server is not running, inform user:
**Server not running**
Please start your development server:
- Rails: `bin/dev` or `rails server`
- Node: `npm run dev`
Then run `/playwright-test` again.
</check_server>
4. Test Each Affected Page
<test_pages>
For each affected route:
Step 1: Navigate and capture snapshot
mcp__playwright__browser_navigate({ url: "http://localhost:3000/[route]" })
mcp__playwright__browser_snapshot({})
Step 2: Check for errors
mcp__playwright__browser_console_messages({ level: "error" })
Step 3: Verify key elements
- Page title/heading present
- Primary content rendered
- No error messages visible
- Forms have expected fields
Step 4: Test critical interactions (if applicable)
mcp__playwright__browser_click({ element: "[description]", ref: "[ref]" })
mcp__playwright__browser_snapshot({})
</test_pages>
5. Human Verification (When Required)
<human_verification>
Pause for human input when testing touches:
| Flow Type | What to Ask |
|---|---|
| OAuth | "Please sign in with [provider] and confirm it works" |
| "Check your inbox for the test email and confirm receipt" | |
| Payments | "Complete a test purchase in sandbox mode" |
| SMS | "Verify you received the SMS code" |
| External APIs | "Confirm the [service] integration is working" |
Use AskUserQuestion:
**Human Verification Needed**
This test touches the [flow type]. Please:
1. [Action to take]
2. [What to verify]
Did it work correctly?
1. Yes - continue testing
2. No - describe the issue
</human_verification>
6. Handle Failures
<failure_handling>
When a test fails:
-
Document the failure:
- Screenshot the error state
- Capture console errors
- Note the exact reproduction steps
-
Ask user how to proceed:
**Test Failed: [route]** Issue: [description] Console errors: [if any] How to proceed? 1. Fix now - I'll help debug and fix 2. Create todo - Add to todos/ for later 3. Skip - Continue testing other pages -
If "Fix now":
- Investigate the issue
- Propose a fix
- Apply fix
- Re-run the failing test
-
If "Create todo":
- Create
{id}-pending-p1-playwright-{description}.md - Continue testing
- Create
-
If "Skip":
- Log as skipped
- Continue testing
</failure_handling>
7. Test Summary
<test_summary>
After all tests complete, present summary:
## 🎭 Playwright Test Results
**Test Scope:** PR #[number] / [branch name]
**Server:** http://localhost:3000
### Pages Tested: [count]
| Route | Status | Notes |
|-------|--------|-------|
| `/users` | ✅ Pass | |
| `/settings` | ✅ Pass | |
| `/dashboard` | ❌ Fail | Console error: [msg] |
| `/checkout` | ⏭️ Skip | Requires payment credentials |
### Console Errors: [count]
- [List any errors found]
### Human Verifications: [count]
- OAuth flow: ✅ Confirmed
- Email delivery: ✅ Confirmed
### Failures: [count]
- `/dashboard` - [issue description]
### Created Todos: [count]
- `005-pending-p1-playwright-dashboard-error.md`
### Result: [PASS / FAIL / PARTIAL]
</test_summary>
Quick Usage Examples
# Test current branch changes
/playwright-test
# Test specific PR
/playwright-test 847
# Test specific branch
/playwright-test feature/new-dashboard