Agent skill

A11y Playwright Testing

by fugazi in fugazi/test-automation-skills-agents

Accessibility testing for web applications using Playwright (@playwright/test), TypeScript, and axe-core.

MITAuto-check passedFrontend & Design

Install A11y Playwright Testing

skills CLI
$ npx skills add fugazi/test-automation-skills-agents --skill a11y-playwright-testing -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install fugazi/test-automation-skills-agents a11y-playwright-testing --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/fugazi/test-automation-skills-agents.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/a11y-playwright-testing .claude/skills/a11y-playwright-testing && rm -rf skills-src

Use ~/.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/

Facts

Skill name
a11y-playwright-testing
GitHub stars
249
Token cost
~3.2k tokens
SKILL.md length
791 words
Files
10 (incl. references)
Skills in repo
10
Repo updated
First seen
Licence
MIT

At a glance

Accessibility testing for web applications using Playwright (@playwright/test), TypeScript, and axe-core.

  • Works in 3 steps: Automation Limitations → Semantic HTML First → Locator Strategy as A11y Signal
  • Debug WCAG 2.2 AA checks
  • SKILL.md covers When to Use This Skill, Prerequisites, First Questions to Ask and Core Principles, plus 10 more sections
  • Calls npx and npm

What it does

A11y Playwright Testing is an agent skill from fugazi/test-automation-skills-agents. Accessibility testing for web applications using Playwright (@playwright/test), TypeScript, and axe-core. Use to write, run, or debug WCAG 2.2 AA checks, keyboard and focus tests, ARIA/semantic validation, accessible names, form labels, color contrast, or screen-reader test patterns. Keywords: accessibility, WCAG, axe-core, keyboard navigation, focus management, ARIA.

Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 10 other files, including reference files (for example `references/aria-patterns-mistakes.md`, `references/aria-patterns-widgets-1.md` and `references/aria-patterns-widgets-2.md`).

It sits in Frontend & Design, covering Accessibility. It works with Playwright and TypeScript. 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.

When your agent uses it

  • Debug WCAG 2.2 AA checks
  • Keyboard and focus tests
  • ARIA/semantic validation
  • Accessible names

Example prompts

  • “/a11y-playwright-testing”

Requirements

  • Node.js

Workflow steps

3 steps, taken from the step headings in SKILL.md.

  1. Automation Limitations
  2. Semantic HTML First
  3. Locator Strategy as A11y Signal

What it can do on your machine

Read from SKILL.md and the folder at commit 65a72d5. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • npx
    • npm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • w3.org
    • dequeuniversity.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

A11y Playwright Testing loads about 3.2k tokens when it runs, and up to ~14k if it reads all its reference files. Until then it costs about 99 tokens; SKILL.md has 791 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~99
When it runs · the whole SKILL.md, loaded when a task matches
~3.2k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~14k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from fugazi/test-automation-skills-agents at commit 65a72d5, republished under its MIT licence (© fugazi). 791 words, ~3,203 tokens.

Download SKILL.mdSave it as .claude/skills/a11y-playwright-testing/SKILL.md (or your agent's skills folder). This skill also uses 9 other files; get the full folder from GitHub.
name
a11y-playwright-testing
description
Accessibility testing for web applications using Playwright (@playwright/test), TypeScript, and axe-core. Use to write, run, or debug WCAG 2.2 AA checks, keyboard and focus tests, ARIA/semantic validation, accessible names, form labels, color contrast, or screen-reader test patterns. Keywords: accessibility, WCAG, axe-core, keyboard navigation, focus management, ARIA.
license
Complete terms in LICENSE.txt

Playwright Accessibility Testing (TypeScript)

Comprehensive toolkit for automated accessibility testing using Playwright with TypeScript and axe-core. Enables WCAG 2.2 Level AA compliance verification (superset of 2.1), keyboard operability testing, semantic validation, and accessibility regression prevention.

Activation: This skill is triggered when working with accessibility testing, WCAG compliance, axe-core scans, keyboard navigation tests, focus management, ARIA validation, or screen reader compatibility.

When to Use This Skill

  • Automated a11y scans with axe-core for WCAG 2.2 AA compliance
  • Keyboard navigation tests for Tab/Enter/Space/Escape/Arrow key operability
  • Focus management validation for dialogs, menus, and dynamic content
  • Semantic structure assertions for landmarks, headings, and ARIA
  • Form accessibility testing for labels, errors, and instructions
  • Color contrast and visual accessibility verification
  • Screen reader compatibility testing patterns
Do NOT Use For
  • Selenium/Java accessibility testing (use accessibility-selenium-testing).
  • Authoring Playwright functional/UI E2E specs (use playwright-e2e-testing).
  • Full conformance sign-off — automated axe scans catch ~30-40% of issues; manual audit + assistive-tech testing is still required.

Prerequisites

RequirementDetails
Node.jsv18+ recommended
Playwright@playwright/test installed
axe-core@axe-core/playwright package
TypeScriptConfigured in project
Quick Setup
bash
# Add axe-core to existing Playwright project
npm install -D @axe-core/playwright axe-core

First Questions to Ask

Before writing accessibility tests, clarify:

  1. Scope: Which pages/flows are in scope? What's explicitly excluded?
  2. Standard: WCAG 2.2 AA (default) or specific organizational policy?
  3. Priority: Which components are highest risk (forms, modals, navigation, checkout)?
  4. Exceptions: Known constraints (legacy markup, third-party widgets)?
  5. Assistive Tech: Which screen readers/browsers need manual testing?

Core Principles

1. Automation Limitations

[!] Critical: Automated tooling can detect ~30-40% of accessibility issues. Use automation to prevent regressions and catch common failures; manual audits are required for full WCAG conformance.

2. Semantic HTML First

Prefer native HTML semantics over ARIA. Use ARIA only when native elements cannot achieve the required semantics.

typescript
// [ok] Semantic HTML - inherently accessible
await page.getByRole("button", { name: "Submit" }).click();

// [no] ARIA override - requires manual keyboard/focus handling
await page.locator('[role="button"]').click(); // Often a <div>
3. Locator Strategy as A11y Signal

If you cannot locate an element by role or label, it's often an accessibility defect.

Locator SuccessAccessibility Signal
getByRole('button', { name: 'Submit' }) [ok]Button has accessible name
getByLabel('Email') [ok]Input properly labeled
getByRole('navigation') [ok]Landmark exists
locator('.submit-btn') [!]May lack accessible name

Key Workflows

Automated Axe Scan (WCAG 2.2 AA)
typescript
import AxeBuilder from "@axe-core/playwright";
import { test, expect } from "@playwright/test";

test("page has no WCAG 2.2 AA violations", async ({ page }) => {
  await page.goto("/");

  const results = await new AxeBuilder({ page })
    .withTags(["wcag2a", "wcag2aa", "wcag21a", "wcag21aa", "wcag22a", "wcag22aa"])
    .analyze();

  expect(results.violations).toEqual([]);
});
Scoped Axe Scan (Component-Level)
typescript
test("form component is accessible", async ({ page }) => {
  await page.goto("/contact");

  const results = await new AxeBuilder({ page })
    .include("#contact-form") // Scope to specific component
    .withTags(["wcag2a", "wcag2aa", "wcag21a", "wcag21aa", "wcag22a", "wcag22aa"])
    .analyze();

  expect(results.violations).toEqual([]);
});
Keyboard Navigation Test
typescript
test("form is keyboard navigable", async ({ page }) => {
  await page.goto("/login");

  // Tab to first field
  await page.keyboard.press("Tab");
  await expect(page.getByLabel("Email")).toBeFocused();

  // Tab to password
  await page.keyboard.press("Tab");
  await expect(page.getByLabel("Password")).toBeFocused();

  // Tab to submit button
  await page.keyboard.press("Tab");
  await expect(page.getByRole("button", { name: "Sign in" })).toBeFocused();

  // Submit with Enter
  await page.keyboard.press("Enter");
  await expect(page).toHaveURL(/dashboard/);
});
Dialog Focus Management
typescript
test("dialog traps and returns focus", async ({ page }) => {
  await page.goto("/settings");
  const trigger = page.getByRole("button", { name: "Delete account" });

  // Open dialog
  await trigger.click();
  const dialog = page.getByRole("dialog");
  await expect(dialog).toBeVisible();

  // Focus should be inside dialog
  await expect(dialog.getByRole("button", { name: "Cancel" })).toBeFocused();

  // Tab should stay trapped in dialog
  await page.keyboard.press("Tab");
  await expect(dialog.getByRole("button", { name: "Confirm" })).toBeFocused();
  await page.keyboard.press("Tab");
  await expect(dialog.getByRole("button", { name: "Cancel" })).toBeFocused();

  // Escape closes and returns focus to trigger
  await page.keyboard.press("Escape");
  await expect(dialog).toBeHidden();
  await expect(trigger).toBeFocused();
});
typescript
test("skip link moves focus to main content", async ({ page }) => {
  await page.goto("/");

  // First Tab should focus skip link
  await page.keyboard.press("Tab");
  const skipLink = page.getByRole("link", { name: /skip to (main|content)/i });
  await expect(skipLink).toBeFocused();

  // Activating skip link moves focus to main
  await page.keyboard.press("Enter");
  await expect(page.locator('#main, [role="main"]').first()).toBeFocused();
});

POUR Principles Reference

PrincipleFocus AreasExample Tests
PerceivableAlt text, captions, contrast, structureImage alternatives, color contrast ratio
OperableKeyboard, focus, timing, navigationTab order, focus visibility, skip links
UnderstandableLabels, instructions, errors, consistencyForm labels, error messages, predictable behavior
RobustValid HTML, ARIA, name/role/valueSemantic structure, accessible names

Axe-Core Tags

Default: wcag2a, wcag2aa, wcag21a, wcag21aa, wcag22a, wcag22aa (WCAG 2.2 AA). Use best-practice for additional checks. See references/axe-tags-reference.md for full tag list.


Exception Handling

When exceptions are unavoidable:

  1. Scope narrowly - specific component/route only
  2. Document impact - which WCAG criterion, user impact
  3. Set expiration - owner + remediation date
  4. Track ticket - link to remediation issue
typescript
// [no] Avoid: Global rule disable
new AxeBuilder({ page }).disableRules(["color-contrast"]);

// [ok] Better: Scoped exclusion with documentation
new AxeBuilder({ page })
  .exclude("#third-party-widget") // Known issue: JIRA-1234, fix by Q2
  .withTags(["wcag2a", "wcag2aa", "wcag21a", "wcag21aa", "wcag22a", "wcag22aa"])
  .analyze();

Show full SKILL.md (339 more words)Show less

Troubleshooting

ProblemCauseSolution
Axe finds 0 violations but app fails manual auditAutomation covers ~30-40%Add manual testing checklist
False positive on dynamic contentContent not fully renderedWait for stable state before scan
Color contrast fails incorrectlyBackground image/gradientUse exclude for known false positives
Cannot find element by roleMissing semantic HTMLFix markup - this is a real bug
Focus not visibleMissing :focus stylesAdd visible focus indicator CSS
Dialog focus not trappedMissing focus trap logicImplement focus trap (see snippets)
Skip link doesn't workTarget missing tabindex="-1"Add tabindex to main content

CLI Quick Reference

CommandDescription
npx playwright test --grep "a11y"Run accessibility tests only
npx playwright test --headedRun with visible browser for debugging
npx playwright test --debugStep through with Inspector
PWDEBUG=1 npx playwright testDebug mode with pause

Red Flags

  • Treating a clean axe scan as full WCAG conformance — automation covers only ~30-40% of criteria.
  • Globally disabling rules (e.g., color-contrast) instead of scoped .exclude() with a documented ticket.
  • Scanning before the page reaches a stable state — async content yields false "0 violations".
  • Skipping keyboard/focus tests because axe passed — focus order and traps need explicit tests.

References

DocumentContent
Snippets: Setup & Scanningaxe-core setup, helper, and scanning patterns
Snippets: Keyboard, Focus, SemanticKeyboard navigation, focus management, semantic structure
Snippets: Visual, Names, ChecklistVisual accessibility, accessible names, critical pages
WCAG 2.2 AA ChecklistManual audit checklist by POUR principle
ARIA Patterns: Widgets Part 1Fundamentals, dialog, tabs, menu widgets
ARIA Patterns: Widgets Part 2Accordion, combobox, live regions, tooltip
ARIA Patterns: Mistakes & ReferenceCommon ARIA mistakes and roles quick reference

External Resources

ResourceURL
WCAG 2.2 Specificationhttps://www.w3.org/TR/WCAG22/
WCAG Quick Referencehttps://www.w3.org/WAI/WCAG22/quickref/
WAI-ARIA Authoring Practiceshttps://www.w3.org/WAI/ARIA/apg/
axe-core Ruleshttps://dequeuniversity.com/rules/axe/

Verification

  • axe-core audit passes — AxeBuilder.analyze() returns zero critical violations
  • Keyboard navigation tested — All interactive elements reachable via Tab; focus order is logical
  • Color contrast sufficient — WCAG 2.2 AA minimum contrast ratios met (4.5:1 normal text, 3:1 large text)
  • WCAG 2.2 AA conformance — Tags wcag22a/wcag22aa included in scans (focus-not-obscured, dragging movements, target-size minimums)

© fugazi, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 9 other files (references) in skills/a11y-playwright-testing of fugazi/test-automation-skills-agents.

  • SKILL.md
  • LICENSE.txt
  • references/aria-patterns-mistakes.md
  • references/aria-patterns-widgets-1.md
  • references/aria-patterns-widgets-2.md
  • references/axe-tags-reference.md
  • references/snippets-keyboard-focus-semantic.md
  • references/snippets-setup-and-scanning.md
  • references/snippets-visual-names-checklist.md
  • references/wcag21aa-checklist.md

Open the folder on GitHubat commit 65a72d5

Compare with similar skills

A11y Playwright 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.

A11y Playwright Testing compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
A11y Playwright Testing this skillfugazi/test-automation-skills-agents249—~3.2kAutomated safety check: PassMIT
Jarvis Setupethanplusai/jarvis846—~2.5kAutomated safety check: NotesCustom licence
Ibm A11y Route Scanlangflow-ai/langflow155k—~1.6kAutomated safety check: PassMIT
React Ariaintentui/laravel1621 repos~3.9kAutomated safety check: PassApache-2.0
Ibm A11y Testing Guidelangflow-ai/langflow155k—~4.6kAutomated safety check: PassMIT
Instui Docsinstructure/instructure-ui482—~498Automated safety check: PassCustom licence

Similar skills

  • Jarvis Setup

    ethanplusai/jarvis

    A skill your agent uses when helping someone install, configure, or debug a fresh clone of JARVIS (this repo) — especially "the mic doesn't work", "JARVIS says his language systems are down", any…

    846 GitHub stars~2.5k tokensUpdated 1 mo ago
    Frontend & DesignAuto-check: notes
  • Ibm A11y Route Scan

    langflow-ai/langflow

    Batch-scan Langflow frontend routes for accessibility issues using the Python IBM Equal Access scanner (scripts/a11y/a11yscan.py) and produce JSON/Markdown/HTML reports.

    155k GitHub stars~1.6k tokensUpdated today
    Frontend & DesignAuto-check passed
  • React Aria

    intentui/laravel

    Build accessible UI components with React Aria Components. An agent skill from intentui/laravel.

    162 GitHub starsUsed in 1 repo~3.9k tokens
    Frontend & DesignAuto-check passed
  • Ibm A11y Testing Guide

    langflow-ai/langflow

    Reference guide for writing and running Langflow frontend accessibility tests with axe (Jest) and IBM Equal Access (Playwright page.runA11yScan).

    155k GitHub stars~4.6k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Instui Docs

    instructure/instructure-ui

    Look up authoritative Instructure UI (InstUI, @instructure/ui-) documentation — component APIs, props, theme variables, usage examples, and guides — by querying instructure.design's plaintext docs.

    482 GitHub stars~498 tokensUpdated today
    Frontend & DesignAuto-check passed
  • Ranui

    chaxus/ran

    A skill your agent uses when building UI with the ranui web-component library (elements like <r-button, <r-modal, <r-select, <r-input, <r-message) or its fluent DOM builder (ranui/builder —…

    269 GitHub stars~2k tokensUpdated 3 days ago
    Frontend & DesignAuto-check passed

More from fugazi/test-automation-skills-agents

All 10 skills in this repo
  • Accessibility Selenium Testing

    fugazi/test-automation-skills-agents

    Accessibility testing toolkit using Selenium WebDriver 4+ with Java 21+ and axe-core engine.

    249 GitHub stars~2.5k tokensUpdated 6 days ago
    Auto-check passed
  • API Testing

    fugazi/test-automation-skills-agents

    Test REST and GraphQL endpoint contracts using Playwright request fixture (TypeScript) or REST Assured (Java).

    249 GitHub stars~1.5k tokensUpdated 6 days ago
    Auto-check passed
  • QA Manual Istqb

    fugazi/test-automation-skills-agents

    Create QA artifacts from requirements: test plans, test conditions/cases, bug reports, regression suites, traceability, and exploratory charters.

    249 GitHub stars~3.6k tokensUpdated 6 days ago
    Auto-check passed
  • Webapp Selenium Testing

    fugazi/test-automation-skills-agents

    Author and maintain versioned Selenium WebDriver tests with Java and JUnit 5.

    249 GitHub stars~2.8k tokensUpdated 6 days ago
    Auto-check passed
  • Grill Me QA

    fugazi/test-automation-skills-agents

    A guided interview to challenge and validate QA automation plans, test strategies, and framework designs before implementation.

    249 GitHub stars~3.9k tokensUpdated 6 days ago
    Auto-check passed
  • Playwright CLI

    fugazi/test-automation-skills-agents

    Drive a live browser from the CLI with playwright-cli to navigate, interact, snapshot, and capture evidence.

    249 GitHub stars~2.2k tokensUpdated 6 days ago
    Auto-check passed

Questions about A11y Playwright Testing

What does A11y Playwright Testing do?

Accessibility testing for web applications using Playwright (@playwright/test), TypeScript, and axe-core. A11y Playwright Testing is an agent skill from fugazi/test-automation-skills-agents. Accessibility testing for web applications using Playwright (@playwright/test), TypeScript, and axe-core.

When should I use A11y Playwright Testing?

A11y Playwright Testing fits situations like: debug WCAG 2.2 AA checks; keyboard and focus tests; ARIA/semantic validation; accessible names.

How do I install A11y Playwright Testing in Claude Code?

Run `npx skills add fugazi/test-automation-skills-agents --skill a11y-playwright-testing -a claude-code`. Or copy the skill folder (skills/a11y-playwright-testing in fugazi/test-automation-skills-agents) into .claude/skills/a11y-playwright-testing in your project. Claude Code loads it when a task matches its description.

How do I install A11y Playwright Testing in Codex?

Run `npx skills add fugazi/test-automation-skills-agents --skill a11y-playwright-testing -a codex`. Or copy the skill folder (skills/a11y-playwright-testing in fugazi/test-automation-skills-agents) into .agents/skills/a11y-playwright-testing in your project. Codex loads it when a task matches its description.

Can I use A11y Playwright Testing in Cursor, Gemini CLI or GitHub Copilot?

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 a11y-playwright-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/a11y-playwright-testing, .gemini/skills/a11y-playwright-testing, .github/skills/a11y-playwright-testing and .opencode/skills/a11y-playwright-testing in your project.

What does A11y Playwright Testing need to run?

Going by SKILL.md and its folder, A11y Playwright Testing needs the command-line tools its instructions call (npx and npm). Our summary lists: Node.js.

Does A11y Playwright Testing access the network?

SKILL.md names 2 domains. As links in the text: w3.org and dequeuniversity.com. This is read from the text; nothing was executed.

Is A11y Playwright Testing safe to install?

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.

What licence does A11y Playwright Testing use?

A11y Playwright 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.

How many tokens does A11y Playwright Testing use?

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 11k tokens, read only when the agent opens those files.

What are the alternatives to A11y Playwright Testing?

Skills that share tags, products or a category with A11y Playwright Testing: Jarvis Setup (ethanplusai/jarvis, 846 stars), Ibm A11y Route Scan (langflow-ai/langflow, 155k stars), React Aria (intentui/laravel, 162 stars) and Ibm A11y Testing Guide (langflow-ai/langflow, 155k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains A11y Playwright Testing?

fugazi (a GitHub user) maintains it in fugazi/test-automation-skills-agents, which has 249 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.