Skip to content
Automation
Skill

/playwright-skill

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

From plugin
lihongwei-cn
5200 skills1 agent

Claude Code

$ npx -y skills add LiHongwei-cn/lihongwei-cn --skill playwright-skill --agent claude-code

SKILL.md

playwright-skill.SKILL.md
name: playwright-skill
description: "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."
risk: unknown
source: community
date_added: "2026-02-27"
plugin:
  setup:
    type: manual
    summary: "Run `npm run setup` in the skill directory before first use to install Playwright and Chromium."
    docs: "SKILL.md"

**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:

  • Plugin system: `<plugin-root>/skills/playwright-skill`
  • Manual global: `<agent-home>/skills/playwright-skill`
  • Project-specific: `<project>/.agent/skills/playwright-skill`

Playwright Browser Automation

General-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:**

1. **Auto-detect dev servers** - For localhost testing, ALWAYS run server detection FIRST:

   cd $SKILL_DIR && node -e "require('./lib/helpers').detectDevServers().then(servers => console.log(JSON.stringify(servers)))"
  • If **1 server found**: Use it automatically, inform user
  • If **multiple servers found**: Ask user which one to test
  • If **no servers found**: Ask for URL or offer to help start dev server

2. **Write scripts to /tmp** - NEVER write test files to skill directory; always use `/tmp/playwright-test-*.js`

3. **Use visible browser by default** - Always use `headless: false` unless user specifically requests headless mode

4. **Parameterize URLs** - Always make URLs configurable via environment variable or constant at top of script

How It Works

1. You describe what you want to test/automate 2. I auto-detect running dev servers (or ask for URL if testing external site) 3. I write custom Playwright code in `/tmp/playwright-test-*.js` (won't clutter your project) 4. I execute it via: `cd $SKILL_DIR && node run.js /tmp/playwright-test-*.js` 5. Results displayed in real-time, browser window visible for debugging 6. Test files auto-cleaned from /tmp by your OS

Setup (First Time)

cd $SKILL_DIR
npm run setup

This installs Playwright and Chromium browser. Only needed once.

Execution Pattern

**Step 1: Detect dev servers (for localhost testing)**

cd $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**

// /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**

cd $SKILL_DIR && node run.js /tmp/playwright-test-page.js

Common Patterns

Test a Page (Multiple Viewports)

// /tmp/playwright-test-responsive.js
const { chromium } = require('playwright');

const TARGET_URL = 'http://localhost:3001'; // Auto-detected

(async () => {
  const browser = await chromium.launch({ headless: false, slowMo: 100 });
  const page = await browser.newPage();

  // Desktop test
  await page.setViewportSize({ width: 1920, height: 1080 });
  await page.goto(TARGET_URL);
  console.log('Desktop - Title:', await page.title());
  await page.screenshot({ path: '/tmp/desktop.png', fullPage: true });

  // Mobile test
  await page.setViewportSize({ width: 375, height: 667 });
  await page.screenshot({ path: '/tmp/mobile.png', fullPage: true });

  await browser.close();
})();

Test Login Flow

// /tmp/playwright-test-login.js
const { chromium } = require('playwright');

const TARGET_URL = 'http://localhost:3001'; // Auto-detected

(async () => {
  const browser = await chromium.launch({ headless: false });
  const page = await browser.newPage();

  await page.goto(`${TARGET_URL}/login`);

  await page.fill('input[name="email"]', 'test@example.com');
  await page.fill('input[name="password"]', 'password123');
  await page.click('button[type="submit"]');

  // Wait for redirect
  await page.waitForURL('**/dashboard');
  console.log('โœ… Login successful, redirected to dashboard');

  await browser.close();
})();

Fill and Submit Form

// /tmp/playwright-test-form.js
const { chromium } = require('playwright');

const TARGET_URL = 'http://localhost:3001'; // Auto-detected

(async () => {
  const browser = await chromium.launch({ headless: false, slowMo: 50 });
  const page = await browser.newPage();

  await page.goto(`${TARGET_URL}/contact`);

  await page.fill('input[name="name"]', 'John Doe');
  await page.fill('input[name="email"]', 'john@example.com');
  await page.fill('textarea[name="message"]', 'Test message');
  await page.click('button[type="submit"]');

  // Verify submission
  await page.waitForSelector('.success-message');
  console.log('โœ… Form submitted successfully');

  await browser.close();
})();

Check for Broken Links

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch({
Read more
@lihongwei-cn
Ships withlihongwei-cn

MUNDO - THE EMPEROR. Complete AI orchestration system with 1208 skills, 25 capability modules, self-evolving, collective consciousness. GitHub Actions 24/7 automation.

5200 skills1 agent
Get the whole plugin

Stars on GitHub

Momentum

stars in total
5
Star history of LiHongwei-cn/lihongwei-cn on GitHub, a chart by star-history.com

Other skills on lihongwei-cn.

cheat-on-content

cheat-on-content

็ป™ๆ‰€ๆœ‰ๆƒณๆŠŠ"ๆ„Ÿ่ง‰"ๅ˜ๆˆๅฏๆ กๅ‡†้ข„ๆต‹็š„ๅ†…ๅฎนๅˆ›ไฝœ่€…ใ€‚**ๆ–นๆณ•่ฎบ้€š็”จ**โ€”โ€”ๆ‰“ๅˆ† โ†’ ็›ฒ้ข„ๆต‹ โ†’ T+3d ๅค็›˜ โ†’ ่ฟ›ๅŒ– rubric ็š„ๅพช็Žฏ้€‚็”จไปปไฝ•่ƒฝ่ขซ้‡ๅŒ–๏ผˆๆ’ญๆ”พ / ้˜…่ฏป / ๆ”ถๅฌ / ็‚นๅ‡ป๏ผ‰็š„ๅ†…ๅฎนใ€‚**rubricโ€ฆ

cheat-bump

cheat-bump

ๆ่ฎฎๅนถๆ‰ง่กŒ rubric ๆˆ– bucket ๅ‡็บงใ€‚ไธค็งๆจกๅผ๏ผš**ๅฎŒๆ•ด rubric bump**๏ผˆๆœ€้ซ˜้ฃŽ้™ฉๅŠจไฝœ๏ผŒ5 ๆญฅๅผบๅˆถ + ่ทจๆจกๅž‹ๅฎกๆ ธ๏ผ‰ๅ’Œ **--bucket-only ่ฝป้‡้‡ๆ ก**๏ผˆๅชๆข bucket ่พน็•Œ๏ผŒไธๅŠจ rubric ๅ…ฌๅผ๏ผ‰ใ€‚**Phaseโ€ฆ

cheat-init

cheat-init

cheat-on-content ็š„้ฆ–ๆฌก onboarding ไธŽ่„šๆ‰‹ๆžถๅˆ›ๅปบๅ™จใ€‚็ปŸไธ€ๆต็จ‹โ€”โ€”ๆ‰€ๆœ‰็”จๆˆท้ƒฝ่ตฐ็›ธๅŒ 5 ้˜ถๆฎต้—ญ็Žฏ๏ผŒๅ”ฏไธ€ๅŒบๅˆซๆ˜ฏ"ๅ‘่ฟ‡่ง†้ข‘็š„ไบบ"ไผšๅœจ init ๆ—ถๅคšไธ€ๆญฅ๏ผšๆŠ“ๅ–ๅทฒๆœ‰่ง†้ข‘ๅปบ็ซ‹ๅކๅฒ context๏ผˆ็”จไบŽๅŽ็ปญ cheat-seedโ€ฆ

cheat-learn-from

cheat-learn-from

ไปŽๅฏนๆ ‡่ดฆๅทๅฏผๅ…ฅ script + ๆ•ฐๆฎ โ†’ ๆ‹† pattern + ๆดพ็”Ÿ base rubric ไฟกๅท โ†’ ๅ†™ๅˆฐ benchmark.md / script_patterns.md /โ€ฆ

cheat-migrate

cheat-migrate

ๆŠŠ่€็”จๆˆท็š„ .cheat-state.json ๅ‡็บงๅˆฐๅฝ“ๅ‰ schema_versionใ€‚่ฏป migrations/registry.md ็ฎ—่ฟ็งป้“พ๏ผŒๆŒ‰้กบๅบๅบ”็”จๆฏไธ€ๆญฅ่ฟ็งปๆ–‡ไปถใ€‚ๅน‚็ญ‰๏ผš่ท‘ไธคๆฌก็ป“ๆžœไธ€ๆ ทใ€‚ๅคฑ่ดฅๅœๅœจไธญ้—ด็‰ˆๆœฌไธๅ‰่ฟ›ใ€‚่งฆๅ‘่ฏ๏ผš"่ฟ็งป"/"ๅ‡็บงโ€ฆ

cheat-persona

cheat-persona

ไปŽๅค็›˜่ฏ„่ฎบๆ•ฐๆฎๆดพ็”Ÿ / ๅˆทๆ–ฐ่ดฆๅท็š„ๅ—ไผ—็”ปๅƒ๏ผŒๅ†™ๅ…ฅ audience.mdใ€‚่ฟ™ๆ˜ฏๅ’Œ rubric ๅนณ่กŒ็š„็ฌฌไบŒไธชๆดพ็”Ÿ็‰ฉโ€”โ€”rubric ็ญ”"ๆ€Žไนˆๆ‰“ๅˆ†"๏ผŒpersona ็ญ”"่ฐๅœจ็œ‹"ใ€‚cheat-seed ้€‰้ข˜ / ๅ†™็จฟๆ—ถ่ฏปๅฎƒใ€‚**audience.mdโ€ฆ

More skills from other plugins.

agent-builder

agent-builder

Load immediately after an Agent intent, before the first agent_builder_* call. Governs how you create, configure, test, andโ€ฆ

n8n11d209k
@n8n-io@n8n-ioInstall Skill
browser-use

browser-use

Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work. Also coversโ€ฆ

@browser-use@browser-useInstall Skill
agent-browser

agent-browser

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, fillingโ€ฆ

@vercel-labs-2@vercel-labs-2Install Skill
add-anydoc

add-anydoc

Add local office-document-to-Markdown conversion to NanoClaw agent containers with the pinned Firecrawl AnyDoc CLI. Use whenโ€ฆ

@nanocoai@nanocoaiInstall Skill

Questions about playwright-skill.

Which coding agents can use playwright-skill?
playwright-skill installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.