| name | playwright-cli |
| description | Use when the user needs to automate browser interactions — navigating websites, filling forms, taking screenshots,
testing web applications, or extracting information from web pages. Also use for visual verification of UI changes,
interactive debugging of web apps, or any task requiring a real browser.
|
| allowed-tools | Bash(playwright-cli:*) |
Browser Automation with playwright-cli
Prerequisites — Dev Server
Before using playwright-cli for testing the ArchCanvas app, you MUST ensure the dev server is running:
npm run dev
Do NOT run npm run dev directly — it spawns a new Vite process every time and causes OOM when multiple agents are working.
When done with browser testing, do NOT stop the dev server — other agents may be using it.
Quick start
playwright-cli open
playwright-cli goto https://playwright.dev
playwright-cli click e15
playwright-cli type "page.click"
playwright-cli press Enter
playwright-cli screenshot
playwright-cli close
Commands
Core
playwright-cli open
playwright-cli open https://example.com/
playwright-cli goto https://playwright.dev
playwright-cli type "search query"
playwright-cli click e3
playwright-cli dblclick e7
playwright-cli fill e5 "user@example.com"
playwright-cli drag e2 e8
playwright-cli hover e4
playwright-cli select e9 "option-value"
playwright-cli upload ./document.pdf
playwright-cli check e12
playwright-cli uncheck e12
playwright-cli snapshot
playwright-cli snapshot --filename=after-click.yaml
playwright-cli eval "document.title"
playwright-cli eval "el => el.textContent" e5
playwright-cli dialog-accept
playwright-cli dialog-accept "confirmation text"
playwright-cli dialog-dismiss
playwright-cli resize 1920 1080
playwright-cli close
Navigation
playwright-cli go-back
playwright-cli go-forward
playwright-cli reload
Keyboard
playwright-cli press Enter
playwright-cli press ArrowDown
playwright-cli keydown Shift
playwright-cli keyup Shift
Mouse
playwright-cli mousemove 150 300
playwright-cli mousedown
playwright-cli mousedown right
playwright-cli mouseup
playwright-cli mouseup right
playwright-cli mousewheel 0 100
Save as
playwright-cli screenshot
playwright-cli screenshot e5
playwright-cli screenshot --filename=page.png
playwright-cli pdf --filename=page.pdf
Tabs
playwright-cli tab-list
playwright-cli tab-new
playwright-cli tab-new https://example.com/page
playwright-cli tab-close
playwright-cli tab-close 2
playwright-cli tab-select 0
Storage
playwright-cli state-save
playwright-cli state-save auth.json
playwright-cli state-load auth.json
playwright-cli cookie-list
playwright-cli cookie-list --domain=example.com
playwright-cli cookie-get session_id
playwright-cli cookie-set session_id abc123
playwright-cli cookie-set session_id abc123 --domain=example.com --httpOnly --secure
playwright-cli cookie-delete session_id
playwright-cli cookie-clear
playwright-cli localstorage-list
playwright-cli localstorage-get theme
playwright-cli localstorage-set theme dark
playwright-cli localstorage-delete theme
playwright-cli localstorage-clear
playwright-cli sessionstorage-list
playwright-cli sessionstorage-get step
playwright-cli sessionstorage-set step 3
playwright-cli sessionstorage-delete step
playwright-cli sessionstorage-clear
Network
playwright-cli route "**/*.jpg" --status=404
playwright-cli route "https://api.example.com/**" --body='{"mock": true}'
playwright-cli route-list
playwright-cli unroute "**/*.jpg"
playwright-cli unroute
DevTools
playwright-cli console
playwright-cli console warning
playwright-cli network
playwright-cli run-code "async page => await page.context().grantPermissions(['geolocation'])"
playwright-cli tracing-start
playwright-cli tracing-stop
playwright-cli video-start
playwright-cli video-stop video.webm
Install
playwright-cli install --skills
playwright-cli install-browser
Configuration
playwright-cli open --browser=chrome
playwright-cli open --browser=firefox
playwright-cli open --browser=webkit
playwright-cli open --browser=msedge
playwright-cli open --extension
playwright-cli open --persistent
playwright-cli open --profile=/path/to/profile
playwright-cli open --config=my-config.json
playwright-cli close
playwright-cli delete-data
Browser Sessions
playwright-cli -s=mysession open example.com --persistent
playwright-cli -s=mysession open example.com --profile=/path/to/profile
playwright-cli -s=mysession click e6
playwright-cli -s=mysession close
playwright-cli -s=mysession delete-data
playwright-cli list
playwright-cli close-all
playwright-cli kill-all
ArchCanvas-Specific Patterns
Opening the App
npm run dev
playwright-cli open https://localhost:5173
playwright-cli snapshot
Key DOM Selectors
The app uses these data-testid attributes:
[data-testid="canvas"] — The main React Flow canvas area
[data-testid="drop-zone-overlay"] — File drop overlay (visible during drag)
.react-flow__node — All rendered architecture nodes
.react-flow__edge — All rendered edges
.react-flow__renderer — The React Flow render container
Common ArchCanvas Workflows
Verify canvas loads with nodes:
playwright-cli open https://localhost:5173
playwright-cli snapshot
playwright-cli eval "document.querySelectorAll('.react-flow__node').length"
Interact with toolbar:
playwright-cli snapshot
playwright-cli click e<ref>
playwright-cli snapshot
Test keyboard shortcuts:
playwright-cli press Control+s
playwright-cli press Control+z
playwright-cli press Control+k
playwright-cli press Escape
playwright-cli press Delete
Test file drop (synthetic):
playwright-cli run-code "async page => {
const dt = new DataTransfer();
dt.items.add(new File(['test'], 'test.archc'));
const canvas = await page.waitForSelector('[data-testid=\"canvas\"]');
await canvas.dispatchEvent('dragenter', { dataTransfer: dt });
}"
playwright-cli snapshot
E2E Test Files
Playwright e2e tests live in test/e2e/ and use .spec.ts extension:
test/e2e/
feature-371-drag-drop.spec.ts # Existing: file drag & drop
Config: playwright.config.ts — runs npm run build && npx vite preview --port 5173,
uses HTTPS, single Chromium worker, serial execution (fullyParallel: false).
To run existing e2e tests:
npx playwright test
npx playwright test test/e2e/some-test.spec.ts
npx playwright test --trace on
Gotchas
- The app uses HTTPS locally (
https://localhost:5173), not HTTP
- React Flow nodes render asynchronously — always wait after navigation:
await page.waitForTimeout(1000) or await page.waitForSelector('.react-flow__node')
- The canvas uses SVG and absolute-positioned divs — standard text selectors
won't find node labels. Use
page.evaluate() for complex DOM queries.
- File System Access API dialogs (open/save) can't be automated by Playwright.
Test file operations via drag-and-drop or programmatic store manipulation.
Specific tasks