Build, debug, and migrate Playwright automation with traces, reliable locators, isolation, and MCP control.
Browser
playwright
Automate real-browser navigation, interaction, capture, and UI-flow debugging from the terminal.
What it does
Automate a real browser from the terminal with Playwright CLI for navigation, form entry, screenshots, PDFs, traces, and multi-tab flows. The workflow checks for npx, opens a page, snapshots stable element refs, interacts through those refs, and re-snapshots after navigation or major DOM changes. It defaults to the bundled wrapper rather than Playwright test files.
When to use it
- Submitting a web form from the terminal
- Capturing screenshots or PDFs of browser pages
- Tracing a failing UI interaction flow
- Automating navigation across multiple tabs
The skill document
Playwright CLI Skill
Drive a real browser from the terminal using playwright-cli. Prefer the bundled wrapper script so the CLI works even when it is not globally installed.
Treat this skill as CLI-first automation. Do not pivot to @playwright/test unless the user explicitly asks for test files.
Prerequisite check (required)
Before proposing commands, check whether npx is available (the wrapper depends on it):
command -v npx >/dev/null 2>&1
If it is not available, pause and ask the user to install Node.js/npm (which provides npx). Provide these steps verbatim:
# Verify Node/npm are installed
node --version
npm --version
# If missing, install Node.js/npm, then:
npm install -g @playwright/cli@latest
playwright-cli --help
Once npx is present, proceed with the wrapper script. A global install of playwright-cli is optional.
Skill path (set once)
export CODEX_HOME="${CODEX_HOME:-$HOME/.codex}"
export PWCLI="$CODEX_HOME/skills/playwright/scripts/playwright_cli.sh"
User-scoped skills install under $CODEX_HOME/skills (default: ~/.codex/skills).
Quick start
Use the wrapper script:
"$PWCLI" open https://playwright.dev --headed
"$PWCLI" snapshot
"$PWCLI" click e15
"$PWCLI" type "Playwright"
"$PWCLI" press Enter
"$PWCLI" screenshot
If the user prefers a global install, this is also valid:
npm install -g @playwright/cli@latest
playwright-cli --help
Core workflow
- Open the page.
- Snapshot to get stable element refs.
- Interact using refs from the latest snapshot.
- Re-snapshot after navigation or significant DOM changes.
- Capture artifacts (screenshot, pdf, traces) when useful.
Minimal loop:
"$PWCLI" open https://example.com
"$PWCLI" snapshot
"$PWCLI" click e3
"$PWCLI" snapshot
When to snapshot again
Snapshot again after:
- navigation
- clicking elements that change the UI substantially
- opening/closing modals or menus
- tab switches
Refs can go stale. When a command fails due to a missing ref, snapshot again.
Recommended patterns
Form fill and submit
"$PWCLI" open https://example.com/form
"$PWCLI" snapshot
"$PWCLI" fill e1 "user@example.com"
"$PWCLI" fill e2 "password123"
"$PWCLI" click e3
"$PWCLI" snapshot
Debug a UI flow with traces
"$PWCLI" open https://example.com --headed
"$PWCLI" tracing-start
# ...interactions...
"$PWCLI" tracing-stop
Multi-tab work
"$PWCLI" tab-new https://example.com
"$PWCLI" tab-list
"$PWCLI" tab-select 0
"$PWCLI" snapshot
Wrapper script
The wrapper script uses npx --package @playwright/cli playwright-cli so the CLI can run without a global install:
"$PWCLI" --help
Prefer the wrapper unless the repository already standardizes on a global install.
References
Open only what you need:
- CLI command reference:
references/cli.md - Practical workflows and troubleshooting:
references/workflows.md
Guardrails
- Always snapshot before referencing element ids like
e12. - Re-snapshot when refs seem stale.
- Prefer explicit commands over
evalandrun-codeunless needed. - When you do not have a fresh snapshot, use placeholder refs like
eXand say why; do not bypass refs withrun-code. - Use
--headedwhen a visual check will help. - When capturing artifacts in this repo, use
output/playwright/and avoid introducing new top-level artifact folders. - Default to CLI commands and workflows, not Playwright test specs.
Questions people ask
- Do I need to install Playwright CLI globally?
- No. The preferred wrapper runs `npx --package @playwright/cli playwright-cli`, so a global installation is optional. `npx` must be available first.
- How does it identify elements to click or fill?
- It takes a snapshot and uses element refs such as `e3`. A fresh snapshot is required before using refs, and another should be taken after navigation, major UI changes, modal or menu changes, and tab switches.
- Can it help debug an interactive UI flow?
- Yes. It can run the browser in headed mode for visual checks and start and stop tracing around a sequence of interactions. It can also capture screenshots and other artifacts when useful.
Related skills
Diagnose CSS mechanics and produce targeted fixes or complete stylesheets for the chosen stack.
Scrape static, dynamic, and anti-bot-protected pages from the CLI or Python.
Write, debug, and review JavaScript with runtime-aware checks for correctness, compatibility, and performance.
Build, debug, and harden Node.js servers, CLIs, workers, and npm packages.
Configure and debug nginx proxies, routing, TLS termination, caching, static files, and TCP/UDP streams.
More from OpenAI
Browse all skillschatgpt-apps
OfficialPlan, scaffold, refactor, and validate ChatGPT Apps SDK projects with an MCP server and widget UI.
figma-generate-design
OfficialBuild or update full-page Figma screens with linked design-system components, variables, and styles.
figma-generate-library
OfficialBuilds a code-aligned Figma design system through phased creation, validation, and user approval.
figma-use
OfficialRuns Figma Plugin API scripts with the required call parameters, API rules, IDs, and validation workflow.
hatch-pet
OfficialCreate and validate a Codex-compatible animated pet atlas from concepts, brand cues, or reference art.
imagegen
OfficialGenerate or edit raster assets, validate the result, and place selected files into the project workspace.