API Testing
petrkindlmann/qa-skills
Test REST and GraphQL APIs with Playwright APIRequestContext, Supertest, or standalone HTTP clients.
Author and maintain versioned Playwright (@playwright/test) TypeScript UI specs for browser user flows.
$ npx skills add fugazi/test-automation-skills-agents --skill playwright-e2e-testing -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install fugazi/test-automation-skills-agents playwright-e2e-testing --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/fugazi/test-automation-skills-agents.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/playwright-e2e-testing .claude/skills/playwright-e2e-testing && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "playwright-e2e-testing" agent skill from https://github.com/fugazi/test-automation-skills-agents/tree/main/skills/playwright-e2e-testing into .claude/skills/playwright-e2e-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "playwright-e2e-testing", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/fugazi/test-automation-skills-agents/tree/main/skills/playwright-e2e-testingType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add fugazi/test-automation-skills-agents --skill playwright-e2e-testing -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install fugazi/test-automation-skills-agents playwright-e2e-testing --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/fugazi/test-automation-skills-agents.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/playwright-e2e-testing .agents/skills/playwright-e2e-testing && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "playwright-e2e-testing" agent skill from https://github.com/fugazi/test-automation-skills-agents/tree/main/skills/playwright-e2e-testing into .agents/skills/playwright-e2e-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "playwright-e2e-testing", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add fugazi/test-automation-skills-agents --skill playwright-e2e-testing -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install fugazi/test-automation-skills-agents playwright-e2e-testing --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/fugazi/test-automation-skills-agents.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/playwright-e2e-testing .cursor/skills/playwright-e2e-testing && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "playwright-e2e-testing" agent skill from https://github.com/fugazi/test-automation-skills-agents/tree/main/skills/playwright-e2e-testing into .cursor/skills/playwright-e2e-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "playwright-e2e-testing", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/fugazi/test-automation-skills-agents.git --path skills/playwright-e2e-testing--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add fugazi/test-automation-skills-agents --skill playwright-e2e-testing -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install fugazi/test-automation-skills-agents playwright-e2e-testing --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/fugazi/test-automation-skills-agents.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/playwright-e2e-testing .gemini/skills/playwright-e2e-testing && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "playwright-e2e-testing" agent skill from https://github.com/fugazi/test-automation-skills-agents/tree/main/skills/playwright-e2e-testing into .gemini/skills/playwright-e2e-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "playwright-e2e-testing", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install fugazi/test-automation-skills-agents playwright-e2e-testingInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add fugazi/test-automation-skills-agents --skill playwright-e2e-testing -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/fugazi/test-automation-skills-agents.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/playwright-e2e-testing .github/skills/playwright-e2e-testing && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "playwright-e2e-testing" agent skill from https://github.com/fugazi/test-automation-skills-agents/tree/main/skills/playwright-e2e-testing into .github/skills/playwright-e2e-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "playwright-e2e-testing", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add fugazi/test-automation-skills-agents --skill playwright-e2e-testing -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install fugazi/test-automation-skills-agents playwright-e2e-testing --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/fugazi/test-automation-skills-agents.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/playwright-e2e-testing .opencode/skills/playwright-e2e-testing && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "playwright-e2e-testing" agent skill from https://github.com/fugazi/test-automation-skills-agents/tree/main/skills/playwright-e2e-testing into .opencode/skills/playwright-e2e-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "playwright-e2e-testing", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
playwright-e2e-testingAuthor and maintain versioned Playwright (@playwright/test) TypeScript UI specs for browser user flows.
Playwright E2E Testing is an agent skill from fugazi/test-automation-skills-agents. Author and maintain versioned Playwright (@playwright/test) TypeScript UI specs for browser user flows. Use when asked to create, run, debug, or refactor E2E tests, form/navigation/auth flows, responsive checks, UI mocking, fixtures, Page Objects, or visual comparisons. Use api-testing for standalone REST/GraphQL contracts and playwright-cli for live browser sessions. Keywords: E2E spec, Playwright test, POM, fixtures, UI regression.
Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 19 other files, including reference files (for example `references/debugging-errors-network.md`, `references/debugging-flaky-locators.md` and `references/debugging-tools-ui.md`).
It sits in Testing & QA, covering End-to-end testing, Browser testing and API testing. It works with Playwright, TypeScript and GraphQL. The repository describes itself as: A practical library of agents, instructions, and skills designed specifically for QA Automation Engineers, focusing on production-oriented solutions. The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 65a72d5. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npxnpmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npx and npm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Playwright E2E Testing loads about 3.2k tokens when it runs, and up to ~21k if it reads all its reference files. Until then it costs about 115 tokens; SKILL.md has 770 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from fugazi/test-automation-skills-agents at commit 65a72d5, republished under its MIT licence (© fugazi). 770 words, ~3,230 tokens.
.claude/skills/playwright-e2e-testing/SKILL.md (or your agent's skills folder). This skill also uses 18 other files; get the full folder from GitHub.Comprehensive toolkit for end-to-end testing of web applications using Playwright with TypeScript. Enables robust UI testing, UI-dependent API setup, and responsive design verification following best practices.
Activation: This skill is triggered when authoring or maintaining versioned Playwright UI specs and their test infrastructure.
request fixture or network interceptionapi-testing).playwright-cli).playwright-regression-testing).webapp-selenium-testing).| Requirement | Details |
|---|---|
| Node.js | v18+ recommended |
| Package Manager | npm, yarn, or pnpm |
| Playwright | @playwright/test package |
| TypeScript | typescript + ts-node (optional but recommended) |
| Browsers | Installed via npx playwright install |
# Initialize new project
npm init playwright@latest
# Or add to existing project
npm install -D @playwright/test
npx playwright installBefore writing tests, clarify:
Always use @playwright/test with TypeScript for type safety and better IDE support.
import { test, expect } from "@playwright/test";
test("user can login", async ({ page }) => {
await page.goto("/login");
await page.getByLabel("Email").fill("user@test.com");
await page.getByLabel("Password").fill("password123");
await page.getByRole("button", { name: "Sign in" }).click();
await expect(page).toHaveURL(/.*dashboard/);
});Prefer role-based locators (getByRole) with accessible names, then label → placeholder → text → test ID → CSS (last resort). XPath is never used.
➡️ Full priority hierarchy, role reference, and examples: Locator Strategies: Priority — the single source of truth.
Playwright auto-waits for elements. Never use sleep() or arbitrary timeouts.
// [ok] Web-first assertions (auto-retry)
await expect(page.getByRole("alert")).toBeVisible();
await expect(page).toHaveURL(/dashboard/);
await expect(page.getByTestId("status")).toHaveText("Success!");
// [no] Avoid manual waits
await page.waitForTimeout(2000); // Bad practiceUse test.step() for readable reports and failure localization:
test("checkout flow", async ({ page }) => {
await test.step("Add item to cart", async () => {
await page.goto("/products/1");
await page.getByRole("button", { name: "Add to Cart" }).click();
});
await test.step("Complete checkout", async () => {
await page.goto("/checkout");
await page.getByRole("button", { name: "Pay Now" }).click();
});
await test.step("Verify confirmation", async () => {
await expect(page.getByRole("heading")).toContainText("Order Confirmed");
});
});// Form submit and wait for navigation (auto-waiting)
await page.getByRole("button", { name: "Login" }).click();
await expect(page).toHaveURL(/.*dashboard/);
// Form with API response validation
const responsePromise = page.waitForResponse(
(r) => r.url().includes("/api/login") && r.status() === 200,
);
await page.getByRole("button", { name: "Login" }).click();
const response = await responsePromise;test("API health check", async ({ request }) => {
const response = await request.get("/api/health");
expect(response.ok()).toBeTruthy();
expect(await response.json()).toMatchObject({ status: "ok" });
});test("handles API error", async ({ page }) => {
await page.route("**/api/users", (route) =>
route.fulfill({
status: 500,
body: JSON.stringify({ error: "Server error" }),
}),
);
await page.goto("/users");
await expect(page.getByRole("alert")).toContainText("Something went wrong");
});const viewports = [
{ width: 375, height: 667, name: "mobile" },
{ width: 768, height: 1024, name: "tablet" },
{ width: 1280, height: 720, name: "desktop" },
];
for (const vp of viewports) {
test(`navigation works on ${vp.name}`, async ({ page }) => {
await page.setViewportSize(vp);
await page.goto("/");
// Mobile: hamburger menu
if (vp.width < 768) {
await page.getByRole("button", { name: /menu/i }).click();
}
await page.getByRole("link", { name: "About" }).click();
await expect(page).toHaveURL(/about/);
});
}Use playwright.config.ts for project-wide settings:
import { defineConfig, devices } from "@playwright/test";
export default defineConfig({
testDir: "./tests",
retries: process.env.CI ? 2 : 0,
reporter: [["html"], ["junit", { outputFile: "results.xml" }]],
use: {
baseURL: "http://localhost:3000",
trace: "on-first-retry",
screenshot: "only-on-failure",
video: "retain-on-failure",
},
projects: [
{ name: "chromium", use: devices["Desktop Chrome"] },
{ name: "mobile", use: devices["Pixel 5"] },
],
webServer: {
command: "npm run dev",
url: "http://localhost:3000",
reuseExistingServer: !process.env.CI,
},
});| Problem | Cause | Solution |
|---|---|---|
| Element not found | Wrong locator or not rendered | Use PWDEBUG=1 to inspect, verify with getByRole |
| Timeout waiting | Element hidden or slow load | Check for overlays, increase timeout, use waitFor() |
| Flaky tests | Race conditions, animations | Add test.step(), use proper waits, disable animations |
| Strict mode violation | Multiple elements match | Use .first(), .filter(), or more specific locator |
| Screenshots differ | Dynamic content | Mask dynamic areas, use deterministic data |
| CI fails, local passes | Environment differences | Check baseURL, timeouts, webServer config |
| API mock not working | Route pattern mismatch | Use **/api/... glob, verify with page.on('request') |
| Command | Description |
|---|---|
npx playwright test | Run all tests headless |
npx playwright test --ui | Open UI mode (interactive) |
npx playwright test --headed | Run with visible browser |
npx playwright test --debug | Run with Playwright Inspector |
npx playwright test -g "login" | Run tests matching pattern |
npx playwright test --project=chromium | Run specific project |
npx playwright show-report | Open HTML report |
npx playwright codegen | Generate tests by recording |
PWDEBUG=1 npx playwright test | Debug with Inspector |
DEBUG=pw:api npx playwright test | Verbose API logging |
waitForTimeout / manual sleeps instead of web-first auto-retrying assertions.| Document | Content |
|---|---|
| Snippets: Setup | Config, auth setup, custom fixtures & logging |
| Snippets: Interactions | Form interactions, API testing & network interception |
| Snippets: Viewports & Auth | Responsive viewports & authentication patterns |
| Snippets: Assertions & Debug | Assertions, debug commands & utility helpers |
| Locator Strategies: Priority | Locator priority hierarchy & role-based locators |
| Locator Strategies: Text | Label, text, placeholder, alt-text & test-ID locators |
| Locator Strategies: Filtering | Filtering, chaining & complex locator patterns |
| Locator Strategies: Anti & Debug | Anti-patterns, CSS last-resort, debugging & quick reference |
| POM: Basics | POM concepts, directory structure, base page & fluent API |
| POM: Components | Page object & reusable component object implementation |
| POM: Fixtures | Custom & authenticated page-object fixtures |
| POM: Practices | Best practices, anti-patterns & a complete worked example |
| Debugging: Tools & UI | Debugging tools, UI mode, Inspector & headed mode |
| Debugging: Tracing & Logs | Trace viewer, verbose logging, screenshots & videos |
| Debugging: Errors & Network | Console/page errors & network debugging |
| Debugging: Flaky & Locators | Flaky-test fixes, locator debugging & quick commands |
new PageObject() calls in spec files; all POMs injected via fixturesgetByRole(), getByTestId(), or getByText(); no CSS selectors for interactive elementsbeforeAll with shared mutable state© fugazi, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 18 other files (references) in skills/playwright-e2e-testing of fugazi/test-automation-skills-agents.
Open the folder on GitHubat commit 65a72d5
Playwright E2E Testing next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Playwright E2E Testing this skillfugazi/test-automation-skills-agents | 247 | — | ~3.2k | Automated safety check: Pass | MIT | |
| API Testingpetrkindlmann/qa-skills | 163 | — | ~2.7k | Automated safety check: Pass | MIT | |
| Playwright Login Flowsandrewyng/context-hub | 14k | — | ~715 | Automated safety check: Pass | MIT | |
| Common Tasksidavidov13/agentic-playwright | 223 | — | ~2.5k | Automated safety check: Pass | MIT | |
| Playwright E2E Builderdavila7/claude-code-templates | 32k | — | ~5.3k | Automated safety check: Notes | MIT | |
| Playwright Automationpetrkindlmann/qa-skills | 163 | — | ~5.5k | Automated safety check: Pass | MIT |
petrkindlmann/qa-skills
Test REST and GraphQL APIs with Playwright APIRequestContext, Supertest, or standalone HTTP clients.
andrewyng/context-hub
Collects reusable Playwright patterns for logging in during end-to-end tests: password forms, OAuth redirects, saved browser state and TOTP two-factor codes.
idavidov13/agentic-playwright
Copy-paste AI prompt templates for common Playwright scaffold development tasks — adding page objects, functional/E2E/API tests, Zod schemas, factories, fixtures, and components.
davila7/claude-code-templates
Plan and build comprehensive Playwright E2E test suites with Page Object Model, authentication state persistence, custom fixtures, visual regression, and CI integration.
petrkindlmann/qa-skills
Write production-grade Playwright tests in TypeScript: Page Object Model, fixtures, auto-waiting, user-facing locators, parallel execution, CI integration, sharding, and 2025-2026 feature awareness.
secondsky/claude-skills
Browser automation and E2E testing with Playwright. An agent skill from secondsky/claude-skills.
fugazi/test-automation-skills-agents
Accessibility testing toolkit using Selenium WebDriver 4+ with Java 21+ and axe-core engine.
fugazi/test-automation-skills-agents
Test REST and GraphQL endpoint contracts using Playwright request fixture (TypeScript) or REST Assured (Java).
fugazi/test-automation-skills-agents
Create QA artifacts from requirements: test plans, test conditions/cases, bug reports, regression suites, traceability, and exploratory charters.
fugazi/test-automation-skills-agents
Author and maintain versioned Selenium WebDriver tests with Java and JUnit 5.
fugazi/test-automation-skills-agents
Accessibility testing for web applications using Playwright (@playwright/test), TypeScript, and axe-core.
fugazi/test-automation-skills-agents
A guided interview to challenge and validate QA automation plans, test strategies, and framework designs before implementation.
Works with
Categories
Author and maintain versioned Playwright (@playwright/test) TypeScript UI specs for browser user flows. Playwright E2E Testing is an agent skill from fugazi/test-automation-skills-agents. Author and maintain versioned Playwright (@playwright/test) TypeScript UI specs for browser user flows.
Playwright E2E Testing fits situations like: asked to create; refactor E2E tests; form/navigation/auth flows; responsive checks.
Run `npx skills add fugazi/test-automation-skills-agents --skill playwright-e2e-testing -a claude-code`. Or copy the skill folder (skills/playwright-e2e-testing in fugazi/test-automation-skills-agents) into .claude/skills/playwright-e2e-testing in your project. Claude Code loads it when a task matches its description.
Run `npx skills add fugazi/test-automation-skills-agents --skill playwright-e2e-testing -a codex`. Or copy the skill folder (skills/playwright-e2e-testing in fugazi/test-automation-skills-agents) into .agents/skills/playwright-e2e-testing in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add fugazi/test-automation-skills-agents --skill playwright-e2e-testing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/playwright-e2e-testing, .gemini/skills/playwright-e2e-testing, .github/skills/playwright-e2e-testing and .opencode/skills/playwright-e2e-testing in your project.
Going by SKILL.md and its folder, Playwright E2E Testing needs the command-line tools its instructions call (npx and npm). Our summary lists: Node.js.
SKILL.md contains no URLs. Its commands use npx and npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Playwright E2E Testing is published under the MIT licence (from the LICENSE file in the skill folder). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 17k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Playwright E2E Testing: API Testing (petrkindlmann/qa-skills, 163 stars), Playwright Login Flows (andrewyng/context-hub, 14k stars), Common Tasks (idavidov13/agentic-playwright, 223 stars) and Playwright E2E Builder (davila7/claude-code-templates, 32k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
fugazi (a GitHub user) maintains it in fugazi/test-automation-skills-agents, which has 247 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on October 3, 2026.
Source: fugazi/test-automation-skills-agents on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.