Browser Automation with playwright-cli
Quick start
bashplaywright-cli open playwright-cli goto https://playwright.dev playwright-cli click e15 # use refs from snapshot playwright-cli type "search query" playwright-cli press Enter playwright-cli snapshot playwright-cli close
Commands
Core
bashplaywright-cli open [url] playwright-cli goto <url> playwright-cli type "<text>" playwright-cli click <ref> playwright-cli dblclick <ref> playwright-cli fill <ref> "<text>" [--submit] playwright-cli drag <ref> <ref> playwright-cli drop <ref> [--path=<file> | --data="mime=value"] playwright-cli hover <ref> playwright-cli select <ref> "<value>" playwright-cli upload <path> playwright-cli check <ref> playwright-cli uncheck <ref> playwright-cli snapshot playwright-cli find "<text>" | --regex "<pattern>" [--regex "/pattern/i"] playwright-cli eval "<js>" [ref] playwright-cli dialog-accept ["text"] playwright-cli dialog-dismiss playwright-cli resize <w> <h> playwright-cli close
Navigation & Keyboard
bashplaywright-cli go-back | go-forward | reload playwright-cli press <key> # Enter, ArrowDown, etc. playwright-cli keydown | keyup <key>
Mouse
bashplaywright-cli mousemove <x> <y> playwright-cli mousedown [right] playwright-cli mouseup [right] playwright-cli mousewheel <dx> <dy>
Save as
bashplaywright-cli screenshot [ref] [--filename=<f>] [--hires] playwright-cli pdf --filename=<f>
Tabs
bashplaywright-cli tab-list playwright-cli tab-new [url] playwright-cli tab-close [index] playwright-cli tab-select <index>
Storage
bashplaywright-cli state-save [file] | state-load <file> playwright-cli cookie-list [--domain=] | cookie-get <name> playwright-cli cookie-set <name> <val> [--domain= --httpOnly --secure] playwright-cli cookie-delete <name> | cookie-clear playwright-cli localstorage-list | localstorage-get <key> playwright-cli localstorage-set <key> <val> | localstorage-delete <key> | localstorage-clear playwright-cli sessionstorage-list | sessionstorage-get <key> playwright-cli sessionstorage-set <key> <val> | sessionstorage-delete <key> | sessionstorage-clear
Network
bashplaywright-cli route "<glob>" [--status= | --body=] playwright-cli route-list playwright-cli unroute ["<glob>"]
DevTools
bashplaywright-cli console [warning|error] playwright-cli requests playwright-cli request <index> playwright-cli run-code "<js>" | --filename=<f> playwright-cli tracing-start | tracing-stop playwright-cli recording-start # record user actions; print Playwright code on stop playwright-cli recording-stop playwright-cli video-start <file> | video-chapter "<title>" [--description= --duration=] | video-stop playwright-cli video-show-actions [--duration= --position=] | video-hide-actions playwright-cli show --annotate # UI review / design feedback playwright-cli generate-locator <ref> [--raw] playwright-cli highlight <ref> [--style=] | highlight <ref> --hide | highlight --hide
Raw output
--raw strips status/snapshot, returns only the result value.
bashplaywright-cli --raw eval "JSON.stringify(performance.timing)" playwright-cli --raw snapshot > before.yml playwright-cli click e5 playwright-cli --raw snapshot > after.yml diff before.yml after.yml
For JSON wrapping: playwright-cli list --json
Open parameters
bashplaywright-cli open --browser=chrome|firefox|webkit|msedge playwright-cli open --mobile | --device="iPhone 15" playwright-cli open --persistent | --profile=/path/to/profile playwright-cli attach --extension=chrome | --cdp=chrome|msedge|http://host:port playwright-cli open --config=<file> playwright-cli delete-data
Windows: See
references/windows-notes.mdfor URL escaping rules.
Snapshots
After each command, playwright-cli provides a snapshot of the current browser state.
bashplaywright-cli snapshot [ref] [--filename=] [--depth=N] [--boxes] playwright-cli find "<text>" playwright-cli find --regex "\\$[0-9]+\\.[0-9]{2}"
Targeting elements
bashplaywright-cli click e15 # ref from snapshot playwright-cli click "#main > button.submit" # CSS selector playwright-cli click "getByRole('button', { name: 'Submit' })" # role locator playwright-cli click "getByTestId('submit-button')" # test id
Browser sessions
bashplaywright-cli -s=<name> open [url] [--persistent | --profile=<dir>] playwright-cli -s=<name> click e6 playwright-cli -s=<name> close playwright-cli list playwright-cli close-all playwright-cli kill-all
Installation
bash# Check local version npx --no-install playwright --version # Use local npx playwright cli # Install global npm install -g @playwright/cli@latest
When NOT to Use This Skill
- Authoring or maintaining versioned
@playwright/testspec files (useplaywright-e2e-testing). - Selenium/Java browser automation (use
webapp-selenium-testing). - Governing a large regression suite, tiers, or CI sharding (use
playwright-regression-testing). - Long-running recorded test suites — playwright-cli drives a single live, interactive session, not a parallel run.
Red Flags
- Relying on
--debug=clias a permanent test runner — it is an exploration/debug aid, not a CI executor. - Leaving background debug sessions running between scenarios — they leak state and ports; always stop them.
- Opening the app URL directly instead of going through the seed test — custom setup in the test is then missed.
- Using sleeps or
networkidleas a fix for timing issues — prefer web-first assertions.
References
- Playwright tests references/playwright-tests.md
- Request mocking references/request-mocking.md
- Running code references/running-code.md
- Session management references/session-management.md
- Storage state references/storage-state.md
- Test generation references/test-generation.md
- Tracing references/tracing.md
- Video recording references/video-recording.md
- Element attributes references/element-attributes.md
- Spec-driven testing references/spec-driven-testing.md
- Spec-driven healing references/spec-driven-heal.md
Verification
- Session lifecycle managed — every
playwright-cli open/-s=<name> openis paired with aclose/close-all; no orphan sessions left running. - Elements addressed by ref — interactions use snapshot refs (
e15) or generated locators, not guessed CSS selectors. - Evidence captured where needed — screenshots, traces, or console/request logs recorded for the task at hand.
- Background debug sessions stopped —
--debug=cliruns are terminated before moving on or finishing.

