/playwright-cli
Drive a live browser from the CLI with playwright-cli to navigate, interact, snapshot, and capture evidence. Use for ad-hoc browser commands, page inspection, screenshots, traces, network mocking, session management, or interactive debugging—not authoring @playwright/test specs.
$ npx -y skills add fugazi/test-automation-skills-agents --skill playwright-cli --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/playwright-cli
Context preview
The summary Claude sees to decide when to auto-load this skill.
Drive a live browser from the CLI with playwright-cli to navigate, interact, snapshot, and capture evidence. Use for ad-hoc browser commands, page inspection, screenshots, traces, network mocking, session management, or interactive debugging—not authoring @playwright/test specs.
SKILL.md
playwright-cli.SKILL.mdname: playwright-cli
description: 'Drive a live browser from the CLI with playwright-cli to navigate, interact, snapshot, and capture evidence. Use for ad-hoc browser commands, page inspection, screenshots, traces, network mocking, session management, or interactive debugging—not authoring @playwright/test specs. Keywords: playwright-cli, browser automation, live session, snapshot, console, tracing.'
license: 'Complete terms in LICENSE.txt'
Browser Automation with playwright-cli
Quick start
playwright-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
playwright-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
playwright-cli go-back | go-forward | reload
playwright-cli press <key> # Enter, ArrowDown, etc.
playwright-cli keydown | keyup <key>
Mouse
playwright-cli mousemove <x> <y>
playwright-cli mousedown [right]
playwright-cli mouseup [right]
playwright-cli mousewheel <dx> <dy>
Save as
playwright-cli screenshot [ref] [--filename=<f>] [--hires]
playwright-cli pdf --filename=<f>
Tabs
playwright-cli tab-list
playwright-cli tab-new [url]
playwright-cli tab-close [index]
playwright-cli tab-select <index>
Storage
playwright-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
playwright-cli route "<glob>" [--status= | --body=]
playwright-cli route-list
playwright-cli unroute ["<glob>"]
DevTools
playwright-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 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.
playwright-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
playwright-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.md`](references/windows-notes.md) for URL escaping rules.
Snapshots
After each command, playwright-cli provides a snapshot of the current browser state.
playwright-cli snapshot [ref] [--filename=] [--depth=N] [--boxes]
playwright-cli find "<text>"
playwright-cli find --regex "\\$[0-9]+\\.[0-9]{2}"Targeting elements
playwright-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 idBrowser sessions
playwright-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
# 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/test` spec files (use `playwright-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=cli` as 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 `networkidle` as a fix for timing issues — prefer web-fir
Read more
name: playwright-cli description: 'Drive a live browser from the CLI with playwright-cli to navigate, interact, snapshot, and capture evidence. Use for ad-hoc browser commands, page inspection, screenshots, traces, network mocking, session management, or interactive debugging—not authoring @playwright/test specs. Keywords: playwright-cli, browser automation, live session, snapshot, console, tracing.' license: 'Complete terms in LICENSE.txt'
Browser Automation with playwright-cli
Quick start
playwright-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
playwright-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
playwright-cli go-back | go-forward | reload playwright-cli press <key> # Enter, ArrowDown, etc. playwright-cli keydown | keyup <key>
Mouse
playwright-cli mousemove <x> <y> playwright-cli mousedown [right] playwright-cli mouseup [right] playwright-cli mousewheel <dx> <dy>
Save as
playwright-cli screenshot [ref] [--filename=<f>] [--hires] playwright-cli pdf --filename=<f>
Tabs
playwright-cli tab-list playwright-cli tab-new [url] playwright-cli tab-close [index] playwright-cli tab-select <index>
Storage
playwright-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
playwright-cli route "<glob>" [--status= | --body=] playwright-cli route-list playwright-cli unroute ["<glob>"]
DevTools
playwright-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 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.
playwright-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
playwright-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.md`](references/windows-notes.md) for URL escaping rules.
Snapshots
After each command, playwright-cli provides a snapshot of the current browser state.
playwright-cli snapshot [ref] [--filename=] [--depth=N] [--boxes]
playwright-cli find "<text>"
playwright-cli find --regex "\\$[0-9]+\\.[0-9]{2}"Targeting elements
playwright-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 idBrowser sessions
playwright-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
# 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/test` spec files (use `playwright-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=cli` as 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 `networkidle` as a fix for timing issues — prefer web-fir
A practical library of agents, instructions, and skills designed specifically for QA Automation Engineers, focusing on production-oriented solutions.
Repo: fugazi/test-automation-skills-agents
Other skills on test-automation-skills-agents.
- /a11y-playwright-testing
Accessibility testing for web applications using Playwright (@playwright/test), TypeScript, and axe-core. Use to write, run, or debug WCAG 2.2 AA checks, keyboard and focus tests, ARIA/semantic validation, accessible names, form labels, color contrast, or screen-reader test
Open skill - /accessibility-selenium-testing
Accessibility testing toolkit using Selenium WebDriver 4+ with Java 21+ and axe-core engine. Use when asked to validate WCAG 2.2 AA compliance, scan pages or components for a11y violations, test keyboard navigation, audit color contrast, check ARIA semantics, generate
Open skill - /api-testing
Test REST and GraphQL endpoint contracts using Playwright request fixture (TypeScript) or REST Assured (Java). Use for standalone API tests covering schemas, auth, status/error handling, pagination, idempotency, rate limits, or contract checks; not for browser E2E specs.
Open skill - /grill-me-qa
A guided interview to challenge and validate QA automation plans, test strategies, and framework designs before implementation. Use when the user wants to validate a test architecture, challenge a testing decision, prepare an AI-assisted testing rollout, or uses any "grill"
Open skill - /playwright-e2e-testing
Author and maintain versioned Playwright (@playwright/test) TypeScript UI specs for browser user flows. Use when asked to create, run, debug, or refactor E2E tests, form/navigation/auth flows, responsive checks, UI mocking, fixtures, Page Objects, or visual comparisons. Use
Open skill - /playwright-regression-testing
Govern Playwright TypeScript regression suites across many tests. Use when asked to plan, select, tier, execute, or optimize suites with risk/change analysis, tags, CI/CD, sharding, flaky-test management, or suite-health metrics; not for authoring one UI spec. Keywords:
Open skill

