Iterative UI testing using Playwright MCP server for automated browser interaction and visual verification
This skill enables iterative UI testing using the Playwright MCP server. Instead of manually copying/pasting screenshots, the agent can:
# Install the official Playwright MCP server (in project)
bun add -d @playwright/mcp
# or globally
npm install -g @playwright/mcp
Create a project-level .mcp.json in the workspace root:
{
"servers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"]
}
}
}
Or add to Claude Desktop settings (~/.claude/settings.json):
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"]
}
}
}
After adding the MCP config, restart to load the server.
bun dev on port 5173)playwright_navigate
- url: string (required) - URL to navigate to
playwright_screenshot
- name: string (required) - Name for the screenshot
- selector?: string - CSS selector to screenshot (optional, defaults to full page)
- fullPage?: boolean - Capture full scrollable page
playwright_click
- selector: string (required) - CSS selector to click
playwright_fill
- selector: string (required) - CSS selector of input
- value: string (required) - Value to fill
playwright_select
- selector: string (required) - CSS selector of select element
- value: string (required) - Value to select
playwright_hover
- selector: string (required) - CSS selector to hover
playwright_evaluate
- script: string (required) - JavaScript to execute in browser context
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā PLAYWRIGHT ITERATIVE TEST LOOP ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¤
ā ā
ā 1. START dev server (if not running) ā
ā ā ā
ā 2. NAVIGATE to app URL ā
ā playwright_navigate ā http://localhost:5173 ā
ā ā ā
ā 3. SCREENSHOT current state ā
ā playwright_screenshot ā "initial-state" ā
ā ā ā
ā 4. ANALYZE screenshot for issues ā
ā - Check if UI renders correctly ā
ā - Check for error messages ā
ā - Check if data displays ā
ā ā ā
ā 5. EVALUATE results: ā
ā āāā All good? ā Test complete ā
ā
ā āāā Issues? ā Fix code, goto step 3 ā
ā ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
Runs the iterative test loop:
Interactive debugging:
Compare current state to expected:
User: "Test UI"
Agent:
1. Run: bun dev (background)
2. Wait for server ready
3. playwright_navigate ā http://localhost:5173
4. playwright_screenshot ā "app-loaded"
5. Analyze: "Chart area is empty, no candlesticks visible"
6. Fix: Edit CandlestickChart.svelte
7. playwright_screenshot ā "after-fix-1"
8. Analyze: "Charts now display data correctly"
9. Report: ā
UI test passed
User: "Test crypto selector"
Agent:
1. playwright_navigate ā http://localhost:5173
2. playwright_screenshot ā "before-click"
3. playwright_click ā "button:has-text('ETH')"
4. Wait 2 seconds for data load
5. playwright_screenshot ā "after-eth-selected"
6. Analyze: "ETH data loaded, chart updated"
7. Report: ā
Crypto selector works
User: "Check for JS errors"
Agent:
1. playwright_navigate ā http://localhost:5173
2. playwright_evaluate ā "window.__errors = []; window.onerror = (m) => __errors.push(m)"
3. Wait for app to load
4. playwright_evaluate ā "return window.__errors"
5. Report errors found (if any)
The Playwright tester integrates with the Assembler iteration loop:
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā ASSEMBLER + PLAYWRIGHT INTEGRATION ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¤
ā ā
ā FOR each Work Order: ā
ā 1. IMPLEMENT code changes ā
ā 2. RUN Playwright test: ā
ā - Navigate to app ā
ā - Screenshot ā
ā - Check for errors ā
ā - Verify acceptance criteria ā
ā 3. EVALUATE: ā
ā āāā Pass? ā Next WO ā
ā āāā Fail? ā Fix and re-test ā
ā ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
// Navigation
'nav button' // Nav buttons
'button:has-text("BTC")' // Crypto selector buttons
'button:has-text("ETH")'
// Charts
'.bg-surface' // Chart containers
'[style*="height: 400px"]' // Main chart
'[style*="height: 150px"]' // Indicator charts
// Settings
'.text-sm:has-text("Settings")' // Settings panel
'input[type="range"]' // Sliders
'input[type="checkbox"]' // Toggles
// Events
'.text-sm:has-text("Detected Events")' // Event list
| Issue | Detection | Resolution |
|---|---|---|
| Blank page | Screenshot shows empty | Check console errors |
| Chart not rendering | No canvas content | Check data loading |
| API error | Error message visible | Check network/CORS |
| Layout broken | Elements misaligned | Check CSS/Tailwind |
If page doesn't load in 10 seconds:
1. Check if dev server is running
2. Check port availability
3. Restart server and retry
assembler-agent/ITERATION.md ā Iteration loop integrationvalidator-agent/SKILL.md ā Validation report generation