playwriter

Use Playwriter to run Playwright Page scripts against your local Chrome session. This preserves logins, cookies, and extensions, which is ideal for web dashboard testing and authenticated flows.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "playwriter" with this command: npx skills add mikeyobrien/ralph-orchestrator/mikeyobrien-ralph-orchestrator-playwriter

Playwriter

Overview

Use Playwriter to run Playwright Page scripts against your local Chrome session. This preserves logins, cookies, and extensions, which is ideal for web dashboard testing and authenticated flows.

When to Use

  • Validating the Ralph web dashboard UI

  • Navigating authenticated pages without re-logging in

  • Testing flows that require browser extensions or saved state

  • Capturing accessibility snapshots for element discovery

Prerequisites

  • Install the CLI: npm i -g playwriter

  • Install the Playwriter Chrome extension (see the Playwriter repo instructions)

  • Ensure Chrome is running and the extension is enabled

Core Workflow

  • Create a session: playwriter session new

  • List sessions and copy the session id: playwriter session list

  • Execute Playwright code against that session: playwriter -s <session_id> -e "await page.goto('https://example.com')"

Execution Environment

Within -e , these are available in scope:

  • page (Playwright Page)

  • context (BrowserContext)

  • state (persistent object across calls in the same session)

  • require (for loading helper modules)

Example state persistence:

playwriter -s <session_id> -e "state.lastUrl = page.url()" playwriter -s <session_id> -e "console.log(state.lastUrl)"

Common Patterns

Navigate + click

playwriter -s <session_id> -e "await page.goto('http://localhost:3000'); await page.getByRole('button', { name: 'Run' }).click();"

Fill forms

playwriter -s <session_id> -e "await page.getByLabel('Email').fill('qa@example.com'); await page.getByLabel('Password').fill('secret'); await page.getByRole('button', { name: 'Sign in' }).click();"

Accessibility snapshots (labeled)

playwriter -s <session_id> -e "const { screenshotWithAccessibilityLabels } = require('playwriter'); await screenshotWithAccessibilityLabels(page, { path: '/tmp/a11y.png' });"

Network interception

playwriter -s <session_id> -e "await page.route('/api/', async route => { const res = await route.fetch(); const body = await res.json(); await route.fulfill({ json: { ...body, injected: true } }); });"

Read page content

playwriter -s <session_id> -e "const text = await page.locator('main').innerText(); console.log(text);"

Tips

  • Prefer getByRole and getByLabel for stable selectors.

  • Use accessibility snapshots to discover reliable roles and labels.

  • Keep sessions focused: reset or close them if state becomes messy.

  • For multi-step flows, store intermediate data on state .

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

tui-validate

No summary provided by upstream source.

Repository SourceNeeds Review
General

pdd

No summary provided by upstream source.

Repository SourceNeeds Review
General

release-bump

No summary provided by upstream source.

Repository SourceNeeds Review
General

evaluate-presets

No summary provided by upstream source.

Repository SourceNeeds Review