Loading...
Loading...
Systematically test all pages for errors, functionality, and proper rendering using Playwright MCP
npx skill4agent add mwguerra/claude-code-plugins page-testtests/e2e-test-plan.mdtests/e2e-test-plan.mdtest-plantests/e2e-test-plan.mdLook for package.json in project root
If found, assets likely need buildingnpm install # If node_modules missing
npm run build # Compile production assets
# or for dev server:
npm run dev # Start Vite/webpack dev servernpm install && npm run buildbrowser_navigate({ url: base_url })
browser_snapshot()Common ports to try:
- http://localhost:8000 (Laravel/Django)
- http://localhost:8080 (Common alternative)
- http://localhost:3000 (Node.js/React/Next.js)
- http://localhost:5173 (Vite dev server)
- http://localhost:5174 (Vite alternative port)
- http://localhost:5000 (Flask/Python)
- http://localhost:4200 (Angular)
- http://localhost:8888 (Jupyter/custom)browser_navigate({ url: "http://localhost:{port}" })
browser_snapshot()
// Check if this matches the expected application
// If yes, use this as the new base URL.envpackage.jsonvite.config.js/tsdocker-compose.yml.env.examplebrowser_navigate({ url: "/page-path" })browser_wait_for({ text: "Expected content" })
OR
browser_wait_for({ time: 2 })browser_snapshot()browser_console_messages({ level: "error" })browser_network_requests()For each link on page:
browser_click on link
browser_snapshot to verify destination
browser_navigate_backFor each button:
browser_click on button
Verify expected action occurs
Check for errorsbrowser_fill_form with test data
browser_click submit
Verify success or validation errorsbrowser_select_option on dropdowns
Verify selection appliedbrowser_console_messages({ level: "error" })
Common errors to detect:
- Uncaught exceptions
- Failed to load resource
- CORS errors
- API errors
- Component errorsbrowser_network_requests()
Check for:
- 4xx errors (client errors)
- 5xx errors (server errors)
- Failed requests
- Timeout errorsbrowser_snapshot()
Look for:
- Broken layout
- Missing images
- Overlapping elements
- Unreadable textbrowser_resize({ width: 1920, height: 1080 })
browser_navigate to page
browser_snapshot
Verify desktop layoutbrowser_resize({ width: 768, height: 1024 })
browser_navigate to page
browser_snapshot
Verify tablet layoutbrowser_resize({ width: 375, height: 812 })
browser_navigate to page
browser_snapshot
Verify mobile layout
Verify mobile menu works// Step 1: Check if assets need building
1. Check for package.json in project root
2. If node_modules missing: run npm install
3. Run npm run build (or npm run prod)
// Step 2: Verify assets after page load
4. browser_navigate to any page
5. browser_snapshot() - check for styled content
6. browser_console_messages({ level: "error" })
- Look for "Failed to load resource"
- Look for "404 (Not Found)"
- Look for module/import errors
7. browser_network_requests()
- Check for 404s on .js, .css, .png files
- Check for failed requests to /build/, /dist/, /assets/
// If assets missing:
8. STOP testing
9. Report: "Assets not built. Run: npm install && npm run build"
10. After build, restart testing// Step 1: Try provided URL
1. browser_navigate({ url: base_url })
2. snapshot = browser_snapshot()
// Step 2: Check if correct application
3. If snapshot shows:
- "Welcome to nginx!" → WRONG URL
- "It works!" → WRONG URL
- "Apache2 Ubuntu Default Page" → WRONG URL
- "This site can't be reached" → CONNECTION ERROR
- Expected app content → CORRECT URL ✓
// Step 3: Port discovery if needed
4. If WRONG URL:
ports = [8000, 8080, 3000, 5173, 5174, 5000, 4200]
for port in ports:
browser_navigate({ url: `http://localhost:${port}` })
snapshot = browser_snapshot()
if snapshot shows expected app content:
base_url = `http://localhost:${port}`
break
// Step 4: Report result
5. If correct URL found:
Log: "Application verified at {base_url}"
Continue with testing
6. If no correct URL:
STOP TESTING
Report: "Cannot find application. Ports tried: ..."1. browser_navigate({ url: "/page" })
2. browser_wait_for({ time: 2 }) // Wait for load
3. snapshot = browser_snapshot()
4. errors = browser_console_messages({ level: "error" })
5. requests = browser_network_requests()
// Verify
Assert: snapshot contains expected elements
Assert: errors is empty
Assert: no failed requests in network1. browser_navigate({ url: "/form-page" })
2. browser_snapshot() // Verify form present
// Test empty submission
3. browser_click({ element: "Submit button", ref: "[submit-ref]" })
4. browser_snapshot() // Should show validation errors
// Test valid submission
5. browser_fill_form({
fields: [
{ name: "Name", type: "textbox", ref: "[name-ref]", value: "Test User" },
{ name: "Email", type: "textbox", ref: "[email-ref]", value: "test@example.com" }
]
})
6. browser_click({ element: "Submit button", ref: "[submit-ref]" })
7. browser_wait_for({ text: "Success" })
8. browser_snapshot() // Verify success1. browser_navigate({ url: "/" })
2. browser_snapshot() // Get all navigation refs
For each nav link:
3. browser_click({ element: "Nav link", ref: "[link-ref]" })
4. browser_snapshot() // Verify correct page loaded
5. browser_navigate_back()1. browser_navigate({ url: "/data-page" })
2. browser_wait_for({ text: "Loading..." }) // Wait for loading state
3. browser_wait_for({ textGone: "Loading..." }) // Wait for content
4. browser_snapshot() // Verify data displayed
5. browser_console_messages({ level: "error" }) // Check for errorsExpected Elements:
- Hero section with headline
- Feature highlights
- Call-to-action buttons
- Navigation header
- Footer
Tests:
- [ ] Hero content visible
- [ ] CTA buttons clickable
- [ ] Navigation works
- [ ] Footer links workExpected Elements:
- Email/username field
- Password field
- Submit button
- Forgot password link
- Register link
Tests:
- [ ] Form displays correctly
- [ ] Empty submission shows errors
- [ ] Invalid credentials show error
- [ ] Valid credentials redirect
- [ ] Forgot password link worksExpected Elements:
- Welcome message
- Statistics/widgets
- Navigation sidebar
- User menu
- Action buttons
Tests:
- [ ] Loads for authenticated users
- [ ] Redirects unauthenticated users
- [ ] Widgets display data
- [ ] Actions are functionalExpected Elements:
- Data table or list
- Pagination
- Search/filter
- Action buttons (edit, delete)
Tests:
- [ ] Data displays correctly
- [ ] Pagination works
- [ ] Search filters data
- [ ] Actions are functional
- [ ] Empty state handledExpected Elements:
- Form fields
- Labels
- Validation messages
- Submit button
- Cancel button
Tests:
- [ ] All fields editable
- [ ] Validation works
- [ ] Submit saves data
- [ ] Cancel returns to list
- [ ] Required fields enforced# Page Test Results
## Pre-Test Verification
### Asset Build Status
- Build command run: npm run build ✓
- Assets compiled: Yes
- CSS loaded: Yes
- JavaScript loaded: Yes
- No 404 errors on assets: Yes
(or if assets were missing:)
- Build command run: No ⚠️
- Assets compiled: No
- Issue: Missing /build/assets/app.js (404)
- Resolution: Ran `npm install && npm run build`
- Retested: All assets now loading ✓
### URL Verification
- Provided URL: http://localhost:8000
- Verified URL: http://localhost:8000 ✓
- Status: Application confirmed
(or if port was different:)
- Provided URL: http://localhost:8000
- Verified URL: http://localhost:3000 ⚠️
- Status: Application found on different port
- Note: Server appears to be running on port 3000
## Summary
- Total Pages: 25
- Passed: 23
- Failed: 2
- Skipped: 0
## Detailed Results
### Public Pages
#### Home (/)
- Status: PASSED
- Load Time: 1.2s
- Console Errors: 0
- Network Errors: 0
- Elements Verified:
- [x] Header navigation
- [x] Hero section
- [x] Feature cards
- [x] Footer
#### About (/about)
- Status: PASSED
- Load Time: 0.8s
- Console Errors: 0
- Network Errors: 0
- Elements Verified:
- [x] Page title
- [x] Content sections
- [x] Team members
### Authenticated Pages
#### Dashboard (/dashboard)
- Status: FAILED
- Load Time: 2.5s
- Console Errors: 1
- Error: "Cannot read property 'name' of undefined"
- Network Errors: 0
- Elements Verified:
- [x] Welcome message
- [ ] Statistics widget - MISSING
- [x] Recent activity
#### Profile (/profile)
- Status: PASSED
- Load Time: 1.1s
- Console Errors: 0
- Network Errors: 0
- Elements Verified:
- [x] User information
- [x] Edit button
- [x] Avatar
### Responsive Tests
#### Home Page
- Desktop (1920x1080): PASSED
- Tablet (768x1024): PASSED
- Mobile (375x812): FAILED
- Issue: Navigation menu overlaps content
## Errors Found
1. **Dashboard Widget Error**
- Page: /dashboard
- Error: Cannot read property 'name' of undefined
- Likely Cause: User data not loaded before rendering
2. **Mobile Navigation Issue**
- Page: /home
- Issue: Navigation overlaps on mobile
- Likely Cause: CSS media query issue
## Recommendations
1. Fix Dashboard data loading sequence
2. Adjust mobile navigation CSS
3. Add loading states for async data