| name | playwright-browser |
| description | Playwright CLI and MCP tools for headless browser automation, E2E testing, screenshots, and web scraping. Use for CI-safe browser operations. |
| license | MIT |
| metadata | {"author":"NodeJS-Starter-V1","version":"1.0.0","locale":"en-AU"} |
Playwright Browser Automation
Headless browser automation using Playwright CLI and MCP tools for E2E testing, UI verification, screenshots, and web scraping.
When to Apply
Positive Triggers
- E2E test execution (
test:e2e, playwright test)
- UI screenshot capture for review or regression
- Web scraping / content extraction
- Form submission testing
- Visual regression testing
- Lighthouse / performance auditing via browser
- Multi-page workflow validation
Negative Triggers (Do NOT Apply)
- Unit tests (use Vitest/Pytest)
- API-only tests (use httpx/fetch)
- Personal browser sessions (use
claude-browser skill)
- Static code analysis
Core Principles
- Headless by default — use
--headed only when debugging
- Screenshot at each step — capture visual evidence for review
- Parallel sessions — leverage Playwright's built-in parallelism
- Persistent profiles — reuse auth state across test runs
- CI-safe — all operations must work in headless CI environments
MCP Playwright Tools
These tools are available via the mcp__playwright__* namespace:
| Tool | Purpose |
|---|
browser_navigate | Navigate to URL |
browser_click | Click element by selector or text |
browser_fill_form | Fill form fields |
browser_take_screenshot | Capture page screenshot |
browser_snapshot | Get accessibility tree snapshot |
browser_evaluate | Execute JavaScript in page context |
browser_press_key | Simulate keyboard input |
browser_type | Type text into focused element |
browser_select_option | Select dropdown option |
browser_wait_for | Wait for element/condition |
browser_network_requests | Inspect network activity |
browser_console_messages | Read console output |
browser_hover | Hover over element |
browser_drag | Drag and drop |
browser_handle_dialog | Accept/dismiss dialogs |
browser_file_upload | Upload files |
browser_tabs | Manage browser tabs |
browser_navigate_back | Go back |
browser_resize | Resize viewport |
browser_close | Close browser |
browser_install | Install browser binaries |
browser_run_code | Run Playwright code snippet |
Usage Pattern
1. Load tools: ToolSearch "playwright"
2. Navigate: browser_navigate to target URL
3. Interact: browser_click, browser_fill_form, browser_type
4. Capture: browser_take_screenshot at each significant step
5. Verify: browser_snapshot for accessibility tree, browser_evaluate for assertions
6. Clean up: browser_close when done
CLI Playwright Commands
npx playwright install chromium
npx playwright test
npx playwright test tests/e2e/login.spec.ts
npx playwright test --headed
npx playwright codegen http://localhost:3000
npx playwright show-report
npx playwright test --project=chromium
Screenshot Workflow
Naming Convention
{step-number}-{description}.png
Examples: 01-login-page.png, 02-form-filled.png, 03-dashboard-loaded.png
Storage
ai-review/screenshots/ # Automated review screenshots
test-results/ # Playwright test artifacts
playwright-report/ # HTML report with traces
Capture Strategy
- Before action: Capture initial state
- After action: Capture result state
- On failure: Automatic screenshot (Playwright default)
- Full page: Use
fullPage: true for long pages
Session Management
Auth State Reuse
await page.context().storageState({ path: 'auth-state.json' });
const context = await browser.newContext({
storageState: 'auth-state.json'
});
Persistent Contexts
For multi-step workflows that span multiple tool calls, maintain browser context between operations. Close explicitly when done.
Parallel Execution
Playwright supports parallel test execution natively:
npx playwright test --workers=4
npx playwright test --workers=1
For MCP tool usage, open multiple browser tabs for parallel story validation.
Project Integration
| File | Purpose |
|---|
apps/web/playwright.config.ts | Playwright configuration |
apps/web/tests/e2e/ | E2E test directory |
apps/web/package.json | test:e2e script |
Anti-Patterns
- Running headed browsers in CI — always use headless
- Hardcoding selectors — prefer
data-testid or accessible roles
- Ignoring timeouts — set explicit timeouts per action
- Skipping screenshots — always capture evidence for review
- Using
page.waitForTimeout() — prefer page.waitForSelector() or browser_wait_for
Pre-Merge Checklist