major-ai-skills
Version:
Installable agentic skills / AI agent skills (SKILL.md) for Claude Code, Cursor, Codex CLI, Gemini CLI & Antigravity - 402+ professional app, token-efficiency, and common-sense skills. SEO/GEO ready.
146 lines (117 loc) • 6.21 kB
Markdown
name: playwright
description: "Write and debug Playwright end-to-end tests using role and label locators, isolated fixtures, authentication state, and traces for failed browser workflows."
category: testing
risk: safe
source: self
source_type: self
date_added: "2026-08-26"
tags: ["playwright", "e2e", "trace-viewer", "locators", "fixtures", "ci", "claude"]
tools: ["claude", "cursor", "gemini", "codex"]
# Playwright End-to-End Testing AI Skill Guide (Claude)
## Overview & Engine Architecture
Playwright is a modern browser automation framework with **first-class Test Runner** (`@playwright/test`), auto-waiting **locators**, multi-browser projects (Chromium/Firefox/WebKit), and rich debugging via **trace**, **video**, and **HTML report**. Claude operates as a Principal QA Automation Engineer, specializing in **resilient locators**, **fixtures**, **storageState auth**, **trace-on-failure CI**, and **parallel project matrices**.
### Playwright Test Architecture
```
┌─────────────────────────────────────────────────────────────┐
│ Playwright Architecture │
│ │
│ Test Runner │
│ ├── playwright.config.ts projects/workers/retries │
│ ├── Fixtures (page, context, custom) │
│ └── Reporters (list, html, github, blob) │
│ │
│ Automation Engine │
│ ├── Browser / Context / Page │
│ ├── Locators + auto-wait + web-first assertions │
│ └── Network interception / routing │
│ │
│ Diagnostics │
│ ├── Trace Viewer / screenshots / video │
│ ├── UI mode / codegen / inspector │
│ └── CI artifacts │
└─────────────────────────────────────────────────────────────┘
```
## Operational Capabilities & Agent Directives
1. **Role/Label Locators First**: Prefer `getByRole`, `getByLabel`, `getByTestId` over CSS/XPath soup.
2. **Web-First Assertions**: Use `expect(locator).toBeVisible()` - not manual sleeps.
3. **Isolate Auth**: Reuse `storageState` for logged-in projects; avoid UI login in every test.
4. **Trace on Retry**: Capture traces for failed/retried tests in CI.
5. **Deterministic Data**: Seed test users/data; do not depend on volatile production content.
## Production Spec + Config Snippets
`tests/checkout.spec.ts`:
```typescript
// ==============================================================================
// Playwright Test: resilient checkout smoke with role locators
// ==============================================================================
import { test, expect } from "@playwright/test";
test.describe("checkout", () => {
test("adds item and shows confirmation", async ({ page }) => {
await page.goto("/products/demo-sku");
await page.getByRole("button", { name: "Add to cart" }).click();
await page.getByRole("link", { name: "Cart" }).click();
await expect(page.getByRole("heading", { name: "Your cart" })).toBeVisible();
await page.getByRole("button", { name: "Checkout" }).click();
await page.getByLabel("Email").fill("qa+playwright@example.com");
await page.getByLabel("Card number").fill("4242424242424242");
await page.getByRole("button", { name: "Pay now" }).click();
await expect(
page.getByRole("heading", { name: /order confirmed/i })
).toBeVisible();
});
});
```
`playwright.config.ts` excerpt:
```typescript
import { defineConfig, devices } from "@playwright/test";
export default defineConfig({
testDir: "./tests",
fullyParallel: true,
retries: process.env.CI ? 2 : 0,
reporter: [["list"], ["html", { open: "never" }]],
use: {
baseURL: process.env.BASE_URL || "http://127.0.0.1:3000",
trace: "on-first-retry",
screenshot: "only-on-failure",
},
projects: [
{ name: "chromium", use: { ...devices["Desktop Chrome"] } },
{ name: "webkit", use: { ...devices["Desktop Safari"] } },
],
webServer: {
command: "npm run dev",
url: "http://127.0.0.1:3000",
reuseExistingServer: !process.env.CI,
},
});
```
CLI:
```bash
npx playwright install --with-deps
npx playwright test
npx playwright show-report
npx playwright test --ui
```
## Technical Troubleshooting Matrix
| Issue & Failure Signature | Root Cause Analysis | Diagnostic & Resolution Pathway |
| :--- | :--- | :--- |
| **Strict mode violation** | Locator resolved multiple nodes. | Narrow with role+name; use `.nth` sparingly. |
| **Flaky timeouts** | Animation/network race. | Prefer auto-wait assertions; wait for response/URL. |
| **Auth expired mid-suite** | Stale storageState. | Refresh setup project; shorten token TTL handling. |
| **CI browsers missing** | Install step skipped. | `npx playwright install --with-deps` in pipeline. |
## Best Practices
1. One assertion intent per test; share journeys via fixtures.
2. Use `test.step` for readable traces.
3. Keep selectors in page objects only if they reduce duplication - don't over-abstract early.
### Essential Paths
- `playwright.config.ts`
- `tests/`
- `test-results/` / `playwright-report/` (artifacts)
## Agent Operational Directive
> **MANDATORY**: Prefer role/label locators and web-first assertions. No hard-coded `waitForTimeout` sleeps. Enable trace-on-retry in CI and keep tests deterministic with seeded data.