Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Complete browser automation with Playwright. Auto-detects dev servers, writes clean test scripts to /tmp. Test pages, fill forms, take screenshots, check responsive design, validate UX, test login flows, check links, automate any browser task. Use when user wants to test websites, automate browser interactions, validate web functionality, or perform any browser-based testing.
.claude/skills/dokhacgiakhoa-playwright-skill/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-09 | ✗→✓ | ▲ Improved | 56% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 36% | 0% |
| case-14 | ✗→✓ | ▲ Improved | -16% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 43% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 1% | 0% |
IMPORTANT - Path Resolution: This skill can be installed in different locations (plugin system, manual installation, global, or project-specific). Before executing any commands, determine the skill directory based on where you loaded this SKILL.md file, and use that path in all commands below. Replace $SKILL_DIR with the actual discovered path.
Common installation paths:
~/.claude/plugins/marketplaces/playwright-skill/skills/playwright-skill~/.claude/skills/playwright-skill<project>/.claude/skills/playwright-skillGeneral-purpose browser automation skill. I'll write custom Playwright code for any automation task you request and execute it via the universal executor.
CRITICAL WORKFLOW - Follow these steps in order:
bash cd $SKILL_DIR && node -e "require('./lib/helpers').detectDevServers().then(servers => console.log(JSON.stringify(servers)))"
/tmp/playwright-test-*.jsheadless: false unless user specifically requests headless mode/tmp/playwright-test-*.js (won't clutter your project)cd $SKILL_DIR && node run.js /tmp/playwright-test-*.jsbashcd $SKILL_DIR npm run setup
This installs Playwright and Chromium browser. Only needed once.
Step 1: Detect dev servers (for localhost testing)
bashcd $SKILL_DIR && node -e "require('./lib/helpers').detectDevServers().then(s => console.log(JSON.stringify(s)))"
Step 2: Write test script to /tmp with URL parameter
javascript// /tmp/playwright-test-page.js const { chromium } = require('playwright'); // Parameterized URL (detected or user-provided) const TARGET_URL = 'http://localhost:3001'; // <-- Auto-detected or from user (async () => { const browser = await chromium.launch({ headless: false }); const page = await browser.newPage(); await page.goto(TARGET_URL); console.log('Page loaded:', await page.title()); await page.screenshot({ path: '/tmp/screenshot.png', fullPage: true }); console.log('📸 Screenshot saved to /tmp/screenshot.png'); await browser.close(); })();
Step 3: Execute from skill directory
bashcd $SKILL_DIR && node run.js /tmp/playwright-test-page.js
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 6,083 | 8,927 | +47% | 1 | 1 | 0% | 1,241 | 1,318 | +6% | 0 | 0 | — |
case-02 | fail→fail | 6,419 | 8,307 | +29% | 1 | 1 | 0% | 1,074 | 1,367 | +27% | 0 | 0 | — |
case-03 | fail→fail | 8,829 | 5,870 | -34% | 1 | 1 | 0% | 1,748 | 1,545 | -12% | 0 | 0 | — |
case-04 | pass→pass | 8,837 | 8,047 | -9% | 1 | 1 | 0% | 1,611 | 2,540 | +58% | 0 | 0 | — |
case-05 | pass→pass | 11,390 | 7,997 | -30% | 1 | 1 | 0% | 2,269 | 2,578 | +14% | 0 | 0 | — |
case-06 | pass→pass | 13,942 | 8,303 | -40% | 1 | 1 | 0% | 2,874 | 2,793 | -3% | 0 | 0 | — |
case-07 | fail→fail | 19,570 | 9,198 | -53% | 1 | 1 | 0% | 3,231 | 1,604 | -50% | 0 | 0 | — |
case-08 | fail→fail | 11,487 | 7,026 | -39% | 1 | 1 | 0% | 2,205 | 1,482 | -33% | 0 | 0 | — |
case-09 | fail→pass | 5,761 | 2,887 | -50% | 1 | 1 | 0% | 1,011 | 1,577 | +56% | 0 | 0 | — |
case-10 | fail→fail | 12,188 | 7,336 | -40% | 1 | 1 | 0% | 2,411 | 1,456 | -40% | 0 | 0 | — |
case-11 | fail→pass | 6,575 | 3,047 | -54% | 1 | 1 | 0% | 1,172 | 1,597 | +36% | 0 | 0 | — |
case-12 | pass→pass | 7,111 | 2,877 | -60% | 1 | 1 | 0% | 1,276 | 1,577 | +24% | 0 | 0 | — |
case-13 | pass→pass | 13,803 | 3,192 | -77% | 1 | 1 | 0% | 2,332 | 1,647 | -29% | 0 | 0 | — |
case-14 | fail→pass | 9,979 | 2,020 | -80% | 1 | 1 | 0% | 1,625 | 1,364 | -16% | 0 | 0 | — |
case-15 | fail→fail | 14,017 | 4,993 | -64% | 1 | 1 | 0% | 2,764 | 1,299 | -53% | 0 | 0 | — |
case-16 | fail→fail | 9,591 | 9,289 | -3% | 1 | 1 | 0% | 1,851 | 1,834 | -1% | 0 | 0 | — |
case-17 | fail→pass | 8,143 | 5,543 | -32% | 1 | 1 | 0% | 1,480 | 2,118 | +43% | 0 | 0 | — |
case-18 | fail→fail | 19,147 | 7,114 | -63% | 1 | 1 | 0% | 3,920 | 1,662 | -58% | 0 | 0 | — |
case-19 | fail→fail | 12,014 | 6,455 | -46% | 1 | 1 | 0% | 2,323 | 1,300 | -44% | 0 | 0 | — |
case-20 | pass→fail | 10,662 | 3,566 | -67% | 1 | 1 | 0% | 1,868 | 1,752 | -6% | 0 | 0 | — |
case-21 | fail→fail | 9,995 | 6,965 | -30% | 1 | 1 | 0% | 1,893 | 1,541 | -19% | 0 | 0 | — |
case-22 | fail→pass | 7,938 | 2,344 | -70% | 1 | 1 | 0% | 1,497 | 1,508 | +1% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 11 counted toward the lift figure. The other 11 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +18 percentage points is the difference between those two pass rates over the 11 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.