Browser

playwright

Try it

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

  1. Open the page.
  2. Snapshot to get stable element refs.
  3. Interact using refs from the latest snapshot.
  4. Re-snapshot after navigation or significant DOM changes.
  5. 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.

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 eval and run-code unless needed.
  • When you do not have a fresh snapshot, use placeholder refs like eX and say why; do not bypass refs with run-code.
  • Use --headed when 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

Automated browser control via CLI with Playwright — open pages, interact, extract session credentials.

by yicko2 installs1 stars

Debug web and Electron UIs in a persistent Playwright session and collect functional and visual QA evidence.

by OpenAI28.0k stars

Operate TaskTime Pro through MCP: manage tasks, track time, handle expenses, and prepare invoices from a paired browser session.

by tasktimepro1 installs1 stars

Test local web apps with Playwright scripts, managed servers, DOM inspection, screenshots, and browser logs.

by Anthropic180.3k stars

More from OpenAI

Browse all skills

chatgpt-apps

Official

Plan, scaffold, refactor, and validate ChatGPT Apps SDK projects with an MCP server and widget UI.

by OpenAI28.0k stars

Build or update full-page Figma screens with linked design-system components, variables, and styles.

by OpenAI28.0k stars

Builds a code-aligned Figma design system through phased creation, validation, and user approval.

by OpenAI28.0k stars

figma-use

Official

Runs Figma Plugin API scripts with the required call parameters, API rules, IDs, and validation workflow.

by OpenAI28.0k stars

hatch-pet

Official

Create and validate a Codex-compatible animated pet atlas from concepts, brand cues, or reference art.

by OpenAI28.0k stars

imagegen

Official

Generate or edit raster assets, validate the result, and place selected files into the project workspace.

by OpenAI28.0k stars