[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6PHS8H85648B4T3MZPNJDVM":3,"skill-same:01M6PHS8H85648B4T3MZPNJDVM":139},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":26,"publishedAt":47,"linkOnly":48,"markdownContent":49,"markdownBody":50,"frontMatter":51,"refName":62,"commitSha":63,"skillDirectory":64,"forksCount":14,"repositoryHtmlUrl":65,"repositoryHomepageUrl":6,"ownerHtmlUrl":66,"ownerBlogUrl":67,"ownerDescription":6,"updatedAt":68,"install":69,"resources":82},"01M6PHS8H85648B4T3MZPNJDVM","playwright-skill",null,"Generates production-grade Playwright automation scripts and E2E tests in TypeScript, JavaScript, Python, Java, or C#. Supports local execution and TestMu AI cloud across 3000+ browser\u002FOS combinations and real mobile devices. Use when the user asks to write Playwright tests, automate browsers, run cross-browser tests, test on real devices, debug flaky tests, mock APIs, or do visual regression. Triggers on: \"Playwright\", \"E2E test\", \"browser test\", \"run on cloud\", \"cross-browser\", \"TestMu\", \"LambdaTest\", \"test my app\", \"test on mobile\", \"real device\".","headmktlucca-ui\u002Fneuroads-lp","headmktlucca-ui","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F247379838?v=4","01M6PDVAV6M1W96D1SR1PDF8CS","NeuroAds","01M6PDVAZ4P281GNDKD45CYTF5",0,"MIT","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fplaywright-skill\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"playwright","playwright skill","e2e test","my","scripts","os","app","local","across","e2e-testing","visual regression","mobile","testing","browser test","write","regression","browser","run","e2e tests","typescript","2026-11-10 10:12:30",false,"---\nname: playwright-skill\ndescription: >\n  Generates production-grade Playwright automation scripts and E2E tests\n  in TypeScript, JavaScript, Python, Java, or C#. Supports local execution\n  and TestMu AI cloud across 3000+ browser\u002FOS combinations and real mobile\n  devices. Use when the user asks to write Playwright tests, automate\n  browsers, run cross-browser tests, test on real devices, debug flaky\n  tests, mock APIs, or do visual regression. Triggers on: \"Playwright\",\n  \"E2E test\", \"browser test\", \"run on cloud\", \"cross-browser\", \"TestMu\",\n  \"LambdaTest\", \"test my app\", \"test on mobile\", \"real device\".\nlanguages:\n  - JavaScript\n  - TypeScript\n  - Python\n  - Java\n  - C#\ncategory: e2e-testing\nlicense: MIT\nmetadata:\n  author: TestMu AI\n  version: \"1.0\"\n---\n\n# Playwright Test Automation\n\n## Step 1 — Determine Execution Target\n\nDecide BEFORE writing any code:\n\n| User says... | Target | Action |\n|---|---|---|\n| No cloud mention, \"locally\", \"debug\" | **Local** | Standard Playwright config |\n| \"cloud\", \"TestMu\", \"LambdaTest\", \"cross-browser\", \"real device\" | **Cloud** | See [reference\u002Fcloud-integration.md](reference\u002Fcloud-integration.md) |\n| Impossible local combo (Safari on Windows, Edge on Linux) | **Cloud** | Suggest TestMu AI, see [reference\u002Fcloud-integration.md](reference\u002Fcloud-integration.md) |\n| \"HyperExecute\", \"parallel at scale\" | **HyperExecute** | Defer to `hyperexecute-skill` |\n| \"visual regression\", \"screenshot comparison\" | **SmartUI** | Defer to `smartui-skill` |\n| Ambiguous | **Local** | Default local, mention cloud option |\n\n## Step 2 — Detect Language\n\n| Signal | Language | Default |\n|---|---|---|\n| \"TypeScript\", \"TS\", `.ts`, or no language specified | TypeScript | ✅ |\n| \"JavaScript\", \"JS\", `.js` | JavaScript | |\n| \"Python\", \"pytest\", `.py` | Python | See [reference\u002Fpython-patterns.md](reference\u002Fpython-patterns.md) |\n| \"Java\", \"Maven\", \"Gradle\", \"TestNG\" | Java | See [reference\u002Fjava-patterns.md](reference\u002Fjava-patterns.md) |\n| \"C#\", \".NET\", \"NUnit\", \"MSTest\" | C# | See [reference\u002Fcsharp-patterns.md](reference\u002Fcsharp-patterns.md) |\n\n## Step 3 — Determine Scope\n\n| Request type | Output |\n|---|---|\n| One-off quick script | Standalone `.ts` file, no POM |\n| Single test for existing project | Match their structure and conventions |\n| New test suite \u002F project | Full scaffold — see [scripts\u002Fscaffold-project.sh](scripts\u002Fscaffold-project.sh) |\n| Fix flaky test | Debugging checklist — see [reference\u002Fdebugging-flaky.md](reference\u002Fdebugging-flaky.md) |\n| API mocking needed | See [reference\u002Fapi-mocking-visual.md](reference\u002Fapi-mocking-visual.md) |\n| Mobile device testing | See [reference\u002Fmobile-testing.md](reference\u002Fmobile-testing.md) |\n\n---\n\n## Core Patterns — TypeScript (Default)\n\n### Selector Priority\n\nUse in this order — stop at the first that works:\n\n1. `getByRole('button', { name: 'Submit' })` — accessible, resilient\n2. `getByLabel('Email')` — form fields\n3. `getByPlaceholder('Enter email')` — when label missing\n4. `getByText('Welcome')` — visible text\n5. `getByTestId('submit-btn')` — last resort, needs `data-testid`\n\nNever use raw CSS\u002FXPath unless matching a third-party widget with no other option.\n\n### Assertions — Always Web-First\n\n```typescript\n\u002F\u002F ✅ Auto-retries until timeout\nawait expect(page.getByRole('heading')).toBeVisible();\nawait expect(page.getByRole('alert')).toHaveText('Saved');\nawait expect(page).toHaveURL('\u002Fdashboard');\n\n\u002F\u002F ❌ No auto-retry — races with DOM\nconst text = await page.textContent('.msg');\nexpect(text).toBe('Saved');\n```\n\n### Anti-Patterns\n\n| ❌ Don't | ✅ Do | Why |\n|----------|-------|-----|\n| `page.waitForTimeout(3000)` | `await expect(locator).toBeVisible()` | Hard waits are flaky |\n| `expect(await el.isVisible())` | `await expect(el).toBeVisible()` | No auto-retry |\n| `page.$('.btn')` | `page.getByRole('button')` | Fragile selector |\n| `page.click('.submit')` | `page.getByRole('button', {name:'Submit'}).click()` | Not accessible |\n| Shared state between tests | `test.beforeEach` for setup | Tests must be independent |\n| `try\u002Fcatch` around assertions | Let Playwright handle retries | Swallows real failures |\n\n### Page Object Model\n\nUse POM for any project with more than 3 tests. Full patterns with base page, fixtures, and examples in [reference\u002Fpage-object-model.md](reference\u002Fpage-object-model.md).\n\nQuick example:\n\n```typescript\n\u002F\u002F pages\u002Flogin.page.ts\nimport { Page, Locator } from '@playwright\u002Ftest';\n\nexport class LoginPage {\n  readonly emailInput: Locator;\n  readonly passwordInput: Locator;\n  readonly submitButton: Locator;\n\n  constructor(private page: Page) {\n    this.emailInput = page.getByLabel('Email');\n    this.passwordInput = page.getByLabel('Password');\n    this.submitButton = page.getByRole('button', { name: 'Sign in' });\n  }\n\n  async login(email: string, password: string) {\n    await this.emailInput.fill(email);\n    await this.passwordInput.fill(password);\n    await this.submitButton.click();\n  }\n}\n```\n\n### Configuration — Local\n\n```typescript\n\u002F\u002F playwright.config.ts\nimport { defineConfig, devices } from '@playwright\u002Ftest';\n\nexport default defineConfig({\n  testDir: '.\u002Ftests',\n  timeout: 30_000,\n  retries: process.env.CI ? 2 : 0,\n  workers: process.env.CI ? 1 : undefined,\n  reporter: [['html'], ['list']],\n  use: {\n    baseURL: 'http:\u002F\u002Flocalhost:3000',\n    trace: 'on-first-retry',\n    screenshot: 'only-on-failure',\n  },\n  projects: [\n    { name: 'chromium', use: { ...devices['Desktop Chrome'] } },\n    { name: 'firefox', use: { ...devices['Desktop Firefox'] } },\n    { name: 'webkit', use: { ...devices['Desktop Safari'] } },\n    { name: 'mobile-chrome', use: { ...devices['Pixel 5'] } },\n    { name: 'mobile-safari', use: { ...devices['iPhone 13'] } },\n  ],\n  webServer: {\n    command: 'npm run dev',\n    port: 3000,\n    reuseExistingServer: !process.env.CI,\n  },\n});\n```\n\n### Cloud Execution on TestMu AI\n\nSet environment variables: `LT_USERNAME`, `LT_ACCESS_KEY`\n\n**Direct CDP connection** (standard approach):\n\n```typescript\n\u002F\u002F lambdatest-setup.ts\nimport { chromium } from 'playwright';\n\nconst capabilities = {\n  browserName: 'Chrome',\n  browserVersion: 'latest',\n  'LT:Options': {\n    platform: 'Windows 11',\n    build: 'Playwright Build',\n    name: 'Playwright Test',\n    user: process.env.LT_USERNAME,\n    accessKey: process.env.LT_ACCESS_KEY,\n    network: true,\n    video: true,\n    console: true,\n  },\n};\n\nconst browser = await chromium.connect({\n  wsEndpoint: `wss:\u002F\u002Fcdp.lambdatest.com\u002Fplaywright?capabilities=${encodeURIComponent(JSON.stringify(capabilities))}`,\n});\nconst context = await browser.newContext();\nconst page = await context.newPage();\n```\n\n**HyperExecute project approach** (for parallel cloud runs):\n\n```typescript\n\u002F\u002F Add to projects array in playwright.config.ts:\n{\n  name: 'chrome:latest:Windows 11@lambdatest',\n  use: { viewport: { width: 1920, height: 1080 } },\n},\n{\n  name: 'MicrosoftEdge:latest:macOS Sonoma@lambdatest',\n  use: { viewport: { width: 1920, height: 1080 } },\n},\n```\n\nRun: `npx playwright test --project=\"chrome:latest:Windows 11@lambdatest\"`\n\n### Test Status Reporting (Cloud)\n\nTests on TestMu AI show \"Completed\" by default. You MUST report pass\u002Ffail:\n\n```typescript\n\u002F\u002F In afterEach or test teardown:\nawait page.evaluate((_) => {},\n  `lambdatest_action: ${JSON.stringify({\n    action: 'setTestStatus',\n    arguments: { status: testInfo.status, remark: testInfo.error?.message || 'OK' },\n  })}`\n);\n```\n\nThis is handled automatically when using the fixture from [reference\u002Fcloud-integration.md](reference\u002Fcloud-integration.md).\n\n---\n\n## Validation Workflow\n\nAfter generating any test:\n\n```\n1. Validate config:  python scripts\u002Fvalidate-config.py playwright.config.ts\n2. If errors → fix → re-validate\n3. Run locally:      npx playwright test --project=chromium\n4. If cloud:         npx playwright test --project=\"chrome:latest:Windows 11@lambdatest\"\n5. If failures → check reference\u002Fdebugging-flaky.md\n```\n\n---\n\n## Quick Reference\n\n### Common Commands\n\n```bash\nnpx playwright test                          # Run all tests\nnpx playwright test --ui                     # Interactive UI mode\nnpx playwright test --debug                  # Step-through debugger\nnpx playwright test --project=chromium       # Single browser\nnpx playwright test tests\u002Flogin.spec.ts      # Single file\nnpx playwright show-report                   # Open HTML report\nnpx playwright codegen https:\u002F\u002Fexample.com   # Record test\nnpx playwright test --update-snapshots       # Update visual baselines\n```\n\n### Auth State Reuse\n\n```typescript\n\u002F\u002F Save auth state once in global setup\nawait page.context().storageState({ path: 'auth.json' });\n\n\u002F\u002F Reuse in config\nuse: { storageState: 'auth.json' }\n```\n\n### Visual Regression (Built-in)\n\n```typescript\nawait expect(page).toHaveScreenshot('homepage.png', {\n  maxDiffPixelRatio: 0.01,\n  animations: 'disabled',\n  mask: [page.locator('.dynamic-date')],\n});\n```\n\n### Network Mocking\n\n```typescript\nawait page.route('**\u002Fapi\u002Fusers', (route) =>\n  route.fulfill({ json: [{ id: 1, name: 'Mock User' }] })\n);\n```\n\nFull mocking patterns in [reference\u002Fapi-mocking-visual.md](reference\u002Fapi-mocking-visual.md).\n\n### Test Steps for Readability\n\n```typescript\ntest('checkout flow', async ({ page }) => {\n  await test.step('Add item to cart', async () => {\n    await page.goto('\u002Fproducts');\n    await page.getByRole('button', { name: 'Add to cart' }).click();\n  });\n\n  await test.step('Complete checkout', async () => {\n    await page.getByRole('link', { name: 'Cart' }).click();\n    await page.getByRole('button', { name: 'Checkout' }).click();\n  });\n});\n```\n\n---\n\n## Reference Files\n\n| File | When to read |\n|------|-------------|\n| [reference\u002Fcloud-integration.md](reference\u002Fcloud-integration.md) | Cloud execution, 3 integration patterns, parallel browsers |\n| [reference\u002Fpage-object-model.md](reference\u002Fpage-object-model.md) | POM architecture, base page, fixtures, full examples |\n| [reference\u002Fmobile-testing.md](reference\u002Fmobile-testing.md) | Android + iOS real device testing |\n| [reference\u002Fdebugging-flaky.md](reference\u002Fdebugging-flaky.md) | Flaky test checklist, common fixes |\n| [reference\u002Fapi-mocking-visual.md](reference\u002Fapi-mocking-visual.md) | API mocking + visual regression patterns |\n| [reference\u002Fpython-patterns.md](reference\u002Fpython-patterns.md) | Python-specific: pytest-playwright, sync\u002Fasync |\n| [reference\u002Fjava-patterns.md](reference\u002Fjava-patterns.md) | Java-specific: Maven, JUnit, Gradle |\n| [reference\u002Fcsharp-patterns.md](reference\u002Fcsharp-patterns.md) | C#-specific: NUnit, MSTest, .NET config |\n| [..\u002Fshared\u002Ftestmu-cloud-reference.md](..\u002Fshared\u002Ftestmu-cloud-reference.md) | Full device catalog, capabilities, geo-location |\n\n## Advanced Playbook\n\nFor production-grade patterns, see `reference\u002Fplaybook.md`:\n\n| Section | What's Inside |\n|---------|--------------|\n| §1 Production Config | Multi-project, reporters, retries, webServer |\n| §2 Auth Fixture Reuse | storageState, multi-role fixtures |\n| §3 Page Object Model | BasePage, LoginPage with fluent API |\n| §4 Network Interception | Mock, modify, HAR replay, block resources |\n| §5 Visual Regression | Screenshot comparison, masks, thresholds |\n| §6 File Upload\u002FDownload | fileChooser, setInputFiles, download events |\n| §7 Multi-Tab & Dialogs | Popup handling, alert\u002Fconfirm\u002Fprompt |\n| §8 Geolocation & Emulation | Location, timezone, locale, color scheme |\n| §9 Custom Fixtures | DB seeding, API context, auto-teardown |\n| §10 API Testing | Request context, end-to-end API+UI |\n| §11 Accessibility | axe-core integration, WCAG audits |\n| §12 Sharding | CI matrix sharding, report merging |\n| §13 CI\u002FCD | GitHub Actions with artifacts |\n| §14 Debugging Toolkit | Debug, UI mode, trace viewer, codegen |\n| §15 Debugging Table | 10 common problems with fixes |\n| §16 Best Practices | 17-item production checklist |\n","# Playwright Test Automation\n\n## Step 1 — Determine Execution Target\n\nDecide BEFORE writing any code:\n\n| User says... | Target | Action |\n|---|---|---|\n| No cloud mention, \"locally\", \"debug\" | **Local** | Standard Playwright config |\n| \"cloud\", \"TestMu\", \"LambdaTest\", \"cross-browser\", \"real device\" | **Cloud** | See [reference\u002Fcloud-integration.md](reference\u002Fcloud-integration.md) |\n| Impossible local combo (Safari on Windows, Edge on Linux) | **Cloud** | Suggest TestMu AI, see [reference\u002Fcloud-integration.md](reference\u002Fcloud-integration.md) |\n| \"HyperExecute\", \"parallel at scale\" | **HyperExecute** | Defer to `hyperexecute-skill` |\n| \"visual regression\", \"screenshot comparison\" | **SmartUI** | Defer to `smartui-skill` |\n| Ambiguous | **Local** | Default local, mention cloud option |\n\n## Step 2 — Detect Language\n\n| Signal | Language | Default |\n|---|---|---|\n| \"TypeScript\", \"TS\", `.ts`, or no language specified | TypeScript | ✅ |\n| \"JavaScript\", \"JS\", `.js` | JavaScript | |\n| \"Python\", \"pytest\", `.py` | Python | See [reference\u002Fpython-patterns.md](reference\u002Fpython-patterns.md) |\n| \"Java\", \"Maven\", \"Gradle\", \"TestNG\" | Java | See [reference\u002Fjava-patterns.md](reference\u002Fjava-patterns.md) |\n| \"C#\", \".NET\", \"NUnit\", \"MSTest\" | C# | See [reference\u002Fcsharp-patterns.md](reference\u002Fcsharp-patterns.md) |\n\n## Step 3 — Determine Scope\n\n| Request type | Output |\n|---|---|\n| One-off quick script | Standalone `.ts` file, no POM |\n| Single test for existing project | Match their structure and conventions |\n| New test suite \u002F project | Full scaffold — see [scripts\u002Fscaffold-project.sh](scripts\u002Fscaffold-project.sh) |\n| Fix flaky test | Debugging checklist — see [reference\u002Fdebugging-flaky.md](reference\u002Fdebugging-flaky.md) |\n| API mocking needed | See [reference\u002Fapi-mocking-visual.md](reference\u002Fapi-mocking-visual.md) |\n| Mobile device testing | See [reference\u002Fmobile-testing.md](reference\u002Fmobile-testing.md) |\n\n---\n\n## Core Patterns — TypeScript (Default)\n\n### Selector Priority\n\nUse in this order — stop at the first that works:\n\n1. `getByRole('button', { name: 'Submit' })` — accessible, resilient\n2. `getByLabel('Email')` — form fields\n3. `getByPlaceholder('Enter email')` — when label missing\n4. `getByText('Welcome')` — visible text\n5. `getByTestId('submit-btn')` — last resort, needs `data-testid`\n\nNever use raw CSS\u002FXPath unless matching a third-party widget with no other option.\n\n### Assertions — Always Web-First\n\n```typescript\n\u002F\u002F ✅ Auto-retries until timeout\nawait expect(page.getByRole('heading')).toBeVisible();\nawait expect(page.getByRole('alert')).toHaveText('Saved');\nawait expect(page).toHaveURL('\u002Fdashboard');\n\n\u002F\u002F ❌ No auto-retry — races with DOM\nconst text = await page.textContent('.msg');\nexpect(text).toBe('Saved');\n```\n\n### Anti-Patterns\n\n| ❌ Don't | ✅ Do | Why |\n|----------|-------|-----|\n| `page.waitForTimeout(3000)` | `await expect(locator).toBeVisible()` | Hard waits are flaky |\n| `expect(await el.isVisible())` | `await expect(el).toBeVisible()` | No auto-retry |\n| `page.$('.btn')` | `page.getByRole('button')` | Fragile selector |\n| `page.click('.submit')` | `page.getByRole('button', {name:'Submit'}).click()` | Not accessible |\n| Shared state between tests | `test.beforeEach` for setup | Tests must be independent |\n| `try\u002Fcatch` around assertions | Let Playwright handle retries | Swallows real failures |\n\n### Page Object Model\n\nUse POM for any project with more than 3 tests. Full patterns with base page, fixtures, and examples in [reference\u002Fpage-object-model.md](reference\u002Fpage-object-model.md).\n\nQuick example:\n\n```typescript\n\u002F\u002F pages\u002Flogin.page.ts\nimport { Page, Locator } from '@playwright\u002Ftest';\n\nexport class LoginPage {\n  readonly emailInput: Locator;\n  readonly passwordInput: Locator;\n  readonly submitButton: Locator;\n\n  constructor(private page: Page) {\n    this.emailInput = page.getByLabel('Email');\n    this.passwordInput = page.getByLabel('Password');\n    this.submitButton = page.getByRole('button', { name: 'Sign in' });\n  }\n\n  async login(email: string, password: string) {\n    await this.emailInput.fill(email);\n    await this.passwordInput.fill(password);\n    await this.submitButton.click();\n  }\n}\n```\n\n### Configuration — Local\n\n```typescript\n\u002F\u002F playwright.config.ts\nimport { defineConfig, devices } from '@playwright\u002Ftest';\n\nexport default defineConfig({\n  testDir: '.\u002Ftests',\n  timeout: 30_000,\n  retries: process.env.CI ? 2 : 0,\n  workers: process.env.CI ? 1 : undefined,\n  reporter: [['html'], ['list']],\n  use: {\n    baseURL: 'http:\u002F\u002Flocalhost:3000',\n    trace: 'on-first-retry',\n    screenshot: 'only-on-failure',\n  },\n  projects: [\n    { name: 'chromium', use: { ...devices['Desktop Chrome'] } },\n    { name: 'firefox', use: { ...devices['Desktop Firefox'] } },\n    { name: 'webkit', use: { ...devices['Desktop Safari'] } },\n    { name: 'mobile-chrome', use: { ...devices['Pixel 5'] } },\n    { name: 'mobile-safari', use: { ...devices['iPhone 13'] } },\n  ],\n  webServer: {\n    command: 'npm run dev',\n    port: 3000,\n    reuseExistingServer: !process.env.CI,\n  },\n});\n```\n\n### Cloud Execution on TestMu AI\n\nSet environment variables: `LT_USERNAME`, `LT_ACCESS_KEY`\n\n**Direct CDP connection** (standard approach):\n\n```typescript\n\u002F\u002F lambdatest-setup.ts\nimport { chromium } from 'playwright';\n\nconst capabilities = {\n  browserName: 'Chrome',\n  browserVersion: 'latest',\n  'LT:Options': {\n    platform: 'Windows 11',\n    build: 'Playwright Build',\n    name: 'Playwright Test',\n    user: process.env.LT_USERNAME,\n    accessKey: process.env.LT_ACCESS_KEY,\n    network: true,\n    video: true,\n    console: true,\n  },\n};\n\nconst browser = await chromium.connect({\n  wsEndpoint: `wss:\u002F\u002Fcdp.lambdatest.com\u002Fplaywright?capabilities=${encodeURIComponent(JSON.stringify(capabilities))}`,\n});\nconst context = await browser.newContext();\nconst page = await context.newPage();\n```\n\n**HyperExecute project approach** (for parallel cloud runs):\n\n```typescript\n\u002F\u002F Add to projects array in playwright.config.ts:\n{\n  name: 'chrome:latest:Windows 11@lambdatest',\n  use: { viewport: { width: 1920, height: 1080 } },\n},\n{\n  name: 'MicrosoftEdge:latest:macOS Sonoma@lambdatest',\n  use: { viewport: { width: 1920, height: 1080 } },\n},\n```\n\nRun: `npx playwright test --project=\"chrome:latest:Windows 11@lambdatest\"`\n\n### Test Status Reporting (Cloud)\n\nTests on TestMu AI show \"Completed\" by default. You MUST report pass\u002Ffail:\n\n```typescript\n\u002F\u002F In afterEach or test teardown:\nawait page.evaluate((_) => {},\n  `lambdatest_action: ${JSON.stringify({\n    action: 'setTestStatus',\n    arguments: { status: testInfo.status, remark: testInfo.error?.message || 'OK' },\n  })}`\n);\n```\n\nThis is handled automatically when using the fixture from [reference\u002Fcloud-integration.md](reference\u002Fcloud-integration.md).\n\n---\n\n## Validation Workflow\n\nAfter generating any test:\n\n```\n1. Validate config:  python scripts\u002Fvalidate-config.py playwright.config.ts\n2. If errors → fix → re-validate\n3. Run locally:      npx playwright test --project=chromium\n4. If cloud:         npx playwright test --project=\"chrome:latest:Windows 11@lambdatest\"\n5. If failures → check reference\u002Fdebugging-flaky.md\n```\n\n---\n\n## Quick Reference\n\n### Common Commands\n\n```bash\nnpx playwright test                          # Run all tests\nnpx playwright test --ui                     # Interactive UI mode\nnpx playwright test --debug                  # Step-through debugger\nnpx playwright test --project=chromium       # Single browser\nnpx playwright test tests\u002Flogin.spec.ts      # Single file\nnpx playwright show-report                   # Open HTML report\nnpx playwright codegen https:\u002F\u002Fexample.com   # Record test\nnpx playwright test --update-snapshots       # Update visual baselines\n```\n\n### Auth State Reuse\n\n```typescript\n\u002F\u002F Save auth state once in global setup\nawait page.context().storageState({ path: 'auth.json' });\n\n\u002F\u002F Reuse in config\nuse: { storageState: 'auth.json' }\n```\n\n### Visual Regression (Built-in)\n\n```typescript\nawait expect(page).toHaveScreenshot('homepage.png', {\n  maxDiffPixelRatio: 0.01,\n  animations: 'disabled',\n  mask: [page.locator('.dynamic-date')],\n});\n```\n\n### Network Mocking\n\n```typescript\nawait page.route('**\u002Fapi\u002Fusers', (route) =>\n  route.fulfill({ json: [{ id: 1, name: 'Mock User' }] })\n);\n```\n\nFull mocking patterns in [reference\u002Fapi-mocking-visual.md](reference\u002Fapi-mocking-visual.md).\n\n### Test Steps for Readability\n\n```typescript\ntest('checkout flow', async ({ page }) => {\n  await test.step('Add item to cart', async () => {\n    await page.goto('\u002Fproducts');\n    await page.getByRole('button', { name: 'Add to cart' }).click();\n  });\n\n  await test.step('Complete checkout', async () => {\n    await page.getByRole('link', { name: 'Cart' }).click();\n    await page.getByRole('button', { name: 'Checkout' }).click();\n  });\n});\n```\n\n---\n\n## Reference Files\n\n| File | When to read |\n|------|-------------|\n| [reference\u002Fcloud-integration.md](reference\u002Fcloud-integration.md) | Cloud execution, 3 integration patterns, parallel browsers |\n| [reference\u002Fpage-object-model.md](reference\u002Fpage-object-model.md) | POM architecture, base page, fixtures, full examples |\n| [reference\u002Fmobile-testing.md](reference\u002Fmobile-testing.md) | Android + iOS real device testing |\n| [reference\u002Fdebugging-flaky.md](reference\u002Fdebugging-flaky.md) | Flaky test checklist, common fixes |\n| [reference\u002Fapi-mocking-visual.md](reference\u002Fapi-mocking-visual.md) | API mocking + visual regression patterns |\n| [reference\u002Fpython-patterns.md](reference\u002Fpython-patterns.md) | Python-specific: pytest-playwright, sync\u002Fasync |\n| [reference\u002Fjava-patterns.md](reference\u002Fjava-patterns.md) | Java-specific: Maven, JUnit, Gradle |\n| [reference\u002Fcsharp-patterns.md](reference\u002Fcsharp-patterns.md) | C#-specific: NUnit, MSTest, .NET config |\n| [..\u002Fshared\u002Ftestmu-cloud-reference.md](..\u002Fshared\u002Ftestmu-cloud-reference.md) | Full device catalog, capabilities, geo-location |\n\n## Advanced Playbook\n\nFor production-grade patterns, see `reference\u002Fplaybook.md`:\n\n| Section | What's Inside |\n|---------|--------------|\n| §1 Production Config | Multi-project, reporters, retries, webServer |\n| §2 Auth Fixture Reuse | storageState, multi-role fixtures |\n| §3 Page Object Model | BasePage, LoginPage with fluent API |\n| §4 Network Interception | Mock, modify, HAR replay, block resources |\n| §5 Visual Regression | Screenshot comparison, masks, thresholds |\n| §6 File Upload\u002FDownload | fileChooser, setInputFiles, download events |\n| §7 Multi-Tab & Dialogs | Popup handling, alert\u002Fconfirm\u002Fprompt |\n| §8 Geolocation & Emulation | Location, timezone, locale, color scheme |\n| §9 Custom Fixtures | DB seeding, API context, auto-teardown |\n| §10 API Testing | Request context, end-to-end API+UI |\n| §11 Accessibility | axe-core integration, WCAG audits |\n| §12 Sharding | CI matrix sharding, report merging |\n| §13 CI\u002FCD | GitHub Actions with artifacts |\n| §14 Debugging Toolkit | Debug, UI mode, trace viewer, codegen |\n| §15 Debugging Table | 10 common problems with fixes |\n| §16 Best Practices | 17-item production checklist |\n",{"name":5,"license":15,"category":36,"metadata":52,"languages":55,"description":61},{"author":53,"version":54},"TestMu AI","1.0",[56,57,58,59,60],"JavaScript","TypeScript","Python","Java","C#","Generates production-grade Playwright automation scripts and E2E tests in TypeScript, JavaScript, Python, Java, or C#. Supports local execution and TestMu AI cloud across 3000+ browser\u002FOS combinations and real mobile devices. Use when the user asks to write Playwright tests, automate browsers, run cross-browser tests, test on real devices, debug flaky tests, mock APIs, or do visual regression. Triggers on: \"Playwright\", \"E2E test\", \"browser test\", \"run on cloud\", \"cross-browser\", \"TestMu\", \"LambdaTest\", \"test my app\", \"test on mobile\", \"real device\".\n","main","7a940b8e5af16c95e5c190a524421d32fc7445a9",".agent\u002Fskills\u002Fplaywright-skill","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui","https:\u002F\u002Fneuroads.com.br","2026-08-12 00:42:44",{"source":8,"skillName":5,"commands":70,"prompt":80,"zipAvailable":81},[71,74,77],{"tool":72,"command":73},"npx","npx skills add headmktlucca-ui\u002Fneuroads-lp --skill playwright-skill",{"tool":75,"command":76},"bunx","bunx skills add headmktlucca-ui\u002Fneuroads-lp --skill playwright-skill",{"tool":78,"command":79},"pnpm","pnpm dlx skills add headmktlucca-ui\u002Fneuroads-lp --skill playwright-skill","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fplaywright-skill\u002FSKILL.md",true,[83,89,93,97,101,105,109,113,117,121,127,131,135],{"path":84,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":87,"sourceHtmlUrl":88},"reference\u002Fapi-mocking-visual.md","REFERENCE","参考文档",3351,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fplaywright-skill\u002Freference\u002Fapi-mocking-visual.md",{"path":90,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":91,"sourceHtmlUrl":92},"reference\u002Fcloud-integration.md",8379,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fplaywright-skill\u002Freference\u002Fcloud-integration.md",{"path":94,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":95,"sourceHtmlUrl":96},"reference\u002Fcsharp-patterns.md",4693,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fplaywright-skill\u002Freference\u002Fcsharp-patterns.md",{"path":98,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":99,"sourceHtmlUrl":100},"reference\u002Fdebugging-flaky.md",4273,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fplaywright-skill\u002Freference\u002Fdebugging-flaky.md",{"path":102,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":103,"sourceHtmlUrl":104},"reference\u002Fjava-patterns.md",5104,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fplaywright-skill\u002Freference\u002Fjava-patterns.md",{"path":106,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":107,"sourceHtmlUrl":108},"reference\u002Fmobile-testing.md",4423,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fplaywright-skill\u002Freference\u002Fmobile-testing.md",{"path":110,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":111,"sourceHtmlUrl":112},"reference\u002Fpage-object-model.md",5131,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fplaywright-skill\u002Freference\u002Fpage-object-model.md",{"path":114,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":115,"sourceHtmlUrl":116},"reference\u002Fplaybook.md",16928,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fplaywright-skill\u002Freference\u002Fplaybook.md",{"path":118,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":119,"sourceHtmlUrl":120},"reference\u002Fpython-patterns.md",5389,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fplaywright-skill\u002Freference\u002Fpython-patterns.md",{"path":122,"resourceType":123,"resourceTypeDesc":124,"sizeBytes":125,"sourceHtmlUrl":126},"scripts\u002Fscaffold-project.sh","SCRIPT","脚本",6429,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fplaywright-skill\u002Fscripts\u002Fscaffold-project.sh",{"path":128,"resourceType":123,"resourceTypeDesc":124,"sizeBytes":129,"sourceHtmlUrl":130},"scripts\u002Fvalidate-config.py",3338,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fplaywright-skill\u002Fscripts\u002Fvalidate-config.py",{"path":132,"resourceType":123,"resourceTypeDesc":124,"sizeBytes":133,"sourceHtmlUrl":134},"templates\u002Flambdatest-setup.ts",2766,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fplaywright-skill\u002Ftemplates\u002Flambdatest-setup.ts",{"path":136,"resourceType":123,"resourceTypeDesc":124,"sizeBytes":137,"sourceHtmlUrl":138},"templates\u002Fplaywright.config.ts",2262,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fplaywright-skill\u002Ftemplates\u002Fplaywright.config.ts",[140,158,181,207,222,257],{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":148,"publishedAt":47},"01M6PTDCZTXTGSTX4RFK901YSZ","xunit-skill","Generates xUnit.net tests in C#. Covers Fact\u002FTheory, constructor injection, IClassFixture, and FluentAssertions. Use when user mentions \"xUnit\", \"[Fact]\", \"[Theory]\", \"Assert.Equal\", \"C# xUnit\". Triggers on: \"xUnit\", \"[Fact]\", \"[Theory]\", \"Assert.Equal C#\", \"xUnit.net\".","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fxunit-skill\u002FSKILL.md",[146,147],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[149,150,39,151,152,153,154,155,156,157,60],"xunit","xunit skill","injection","user","use","tests","triggers","unit","unit-testing",{"skillNo":159,"name":160,"nameZh":6,"description":161,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":166,"publishedAt":47},"01M6PTCB59ZTG5FTMWGPYEMMBP","xcuitest-skill","Generates XCUITest UI tests for iOS\u002FiPadOS apps in Swift. Apple's native testing framework for reliable, fast UI automation. Supports local simulators and TestMu AI cloud real devices. Use when user mentions \"XCUITest\", \"XCTest\", \"iOS UI test\", \"Swift test\", \"XCUIApplication\". Triggers on: \"XCUITest\", \"XCTest UI\", \"iOS UI test\", \"Swift UI test\", \"XCUIApplication\", \"TestMu\".","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fxcuitest-skill\u002FSKILL.md",[164,165],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[167,168,39,169,170,171,172,173,153,38,174,175,34,176,154,155,177,178,179,180],"xcuitest","xcuitest skill","automation","test","testing framework","ios","devices","mobile-testing","ui test","apple","apps","native","for","objective",{"skillNo":182,"name":183,"nameZh":6,"description":184,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":185,"categories":186,"keywords":191,"publishedAt":47},"01M6PTATMNTY9NF4J7KSR76YK6","world-builder","Create and manage generative game zones for Dorothy's Pokemon-style world. Use this skill when creating, updating, or designing game worlds via MCP tools.","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fworld-builder\u002FSKILL.md",[187,190],{"categoryNo":188,"categoryName":189,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[192,193,194,195,196,197,198,199,153,200,201,202,203,204,205,179,206],"builder","world","world builder","MCP","create","mcp tools","Tools","game","pokemon","manage","style","via","theme","zone","generative",{"skillNo":208,"name":209,"nameZh":6,"description":210,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":211,"categories":212,"keywords":215,"publishedAt":47},"01M6PT9Z92JTSQEHE1QR0NNW5F","webdriverio-skill","Generates WebdriverIO (WDIO) automation tests in JavaScript or TypeScript. Supports local and TestMu AI cloud. Use when user mentions \"WebdriverIO\", \"WDIO\", \"wdio.conf\", \"browser.url\", \"$\", \"$$\". Triggers on: \"WebdriverIO\", \"WDIO\", \"wdio\", \"browser.$\".","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fwebdriverio-skill\u002FSKILL.md",[213,214],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[216,39,46,169,217,43,218,219,152,153,36,34,154,155,220,221],"webdriverio skill","javascript","cloud","e2e","URL","conf",{"skillNo":223,"name":224,"nameZh":6,"description":225,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":226,"categories":227,"keywords":237,"publishedAt":47},"01M6PT9NVK36ZWCQ69YXK3FR4K","web-design-guidelines","Web platform design and accessibility guidelines. Use when building web interfaces, auditing accessibility, implementing responsive layouts, or reviewing web UI code. Triggers on tasks involving HTML, CSS, web components, WCAG compliance, responsive design, or web performance.","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fweb\u002FSKILL.md",[228,231,232],{"categoryNo":229,"categoryName":230,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":188,"categoryName":189,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":233,"categoryName":234,"taxonomyType":235,"taxonomyTypeDesc":236},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,155,256],"design","web","guidelines","web design guidelines","web design","css","performance","components","web components","tasks","code","web performance","ui","platform design","html","responsive design","responsive","platform","implementing",{"skillNo":258,"name":259,"nameZh":6,"description":260,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":261,"categories":262,"keywords":265,"publishedAt":47},"01M6PT9A3JKRE3X34276F2FW5R","watchos-design-guidelines","Apple Human Interface Guidelines for Apple Watch. Use when building watchOS apps, complications, or workout features. Triggers on tasks involving Watch UI, Digital Crown, glanceable interfaces, or wrist-based interactions.","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fwatchos\u002FSKILL.md",[263,264],{"categoryNo":188,"categoryName":189,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":233,"categoryName":234,"taxonomyType":235,"taxonomyTypeDesc":236},[238,240,266,247,250,153,267,268,176,255,269,155,177,270,179,271,272],"watchos design guidelines","workout","human","watch","interface","platform-design","features"]