Skip to content
Back to skills

Qa Testing Accessibility

ASecurity

Builds accessibility testing for WCAG 2.2 audits, CI gates, mobile audits, and EAA/ADA/VPAT evidence. Use when adding axe-core, Lighthouse, or screen-reader tests; not fixes.

  • 89 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 2, 2026
ai-agentspythongonodeawstestinggitapifrontend

Works with

  • claude code
  • api

Security analysis

A100/100

Pro scans all 18 files and shows the line behind each finding

Scanned October 6, 2026

npx -y skills add vasilyu1983/AI-Agents-public --skill qa-testing-accessibility --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Qa Testing Accessibility?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Qa Testing Accessibility
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vasilyu1983-qa-testing-accessibility/badge)](https://www.skillsdirectory.com/skills/vasilyu1983-qa-testing-accessibility)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: qa-testing-accessibility
description: "Builds accessibility testing for WCAG 2.2 audits, CI gates, mobile audits, and EAA/ADA/VPAT evidence. Use when adding axe-core, Lighthouse, or screen-reader tests; not fixes."
compatibility: Portable core. Works on Claude Code and Codex.
version: "1.2"
last_validated: 2026-07-11
---

# QA Testing (Accessibility)

Accessibility testing automation, CI gating, and audit methodology for web and mobile: what to automate, what needs manual testing, and how to keep a sustainable gate. This skill covers *testing* and conformance evidence; `software-ui-ux-design` covers accessible design and `software-accessibility` covers implementing fixes.

## Workflow

1. Gather the target surfaces, WCAG scope, and platform constraints.
2. Cover what automation can reliably detect first.
3. Add manual keyboard and screen-reader checks for critical journeys.
4. Turn findings into CI gates, remediation work, and verification evidence.

## Inputs to Gather

- Target WCAG level: AA (default) or AAA (specific requirements)
- Platforms: web, iOS, Android, or combination
- Assistive technology requirements: screen readers, switch access, voice control
- Existing accessibility tooling and baseline violation count
- Regulatory requirements: ADA Title II, Section 508, EN 301 549, EAA — see `## Regulatory Landscape`; do not assume any single deadline applies to a private US business
- Critical user flows that must be accessible
- Design system or component library status (tested vs untested)

## WCAG 2.2 Automation Boundary

Automation covers only a subset of WCAG 2.2. The exact share varies by product, framework, and tool rule set, so do not treat any percentage as a conformance rule.

| Coverage Type | Examples |
|---------------|----------|
| Reliably automatable | Missing alt attributes, missing form labels, many ARIA validity checks; candidate contrast, heading and landmark findings still need scope review |
| Candidate detection + human verification | Alt-text quality, keyboard usability, touch target adequacy, focus order, live-region behavior |
| Manual only | Cognitive load, reading level, error-prevention UX, consistent navigation, timing adjustments, motion preferences, full screen-reader usability, reflow at high zoom |

Read [references/wcag-automation-matrix.md](references/wcag-automation-matrix.md) when you need criterion-level automation planning beyond the table above.

## Canonical axe tag set

Use this array everywhere axe-core runs (Playwright, Cypress, jest-axe, Storybook, the baseline script):

```ts
['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa', 'wcag22aa']   // WCAG 2.2 Level A + AA
// optional: add 'best-practice', and report those results as non-WCAG
```

Why all five: axe gives each rule exactly one version/level tag, the WCAG version that *introduced* its criterion ([axe-core API: tags](https://github.com/dequelabs/axe-core/blob/develop/doc/API.md#axe-core-tags)). `wcag2aa` means "WCAG 2.0 AA rules", not "all AA rules". `['wcag2a','wcag2aa','wcag22aa']` silently skips the 2.1 rules — for example `autocomplete-valid` (1.3.5) and `avoid-inline-spacing` (1.4.12) — so a gate stays green against a WCAG 2.1 AA legal standard it never tested. Check the installed axe rule metadata for default-enabled and experimental rules; `runOnly` tag selection changes which rules run. No tag set equals conformance.

Tools for a second rule engine: Lighthouse (axe-based, weighted score), Pa11y (`runners: ["axe","htmlcs"]`), IBM Equal Access; WAVE for manual review. See [references/automated-auditing.md](references/automated-auditing.md).

## Conformance Boundary

Automated scans and tool severity labels do not establish WCAG conformance; they are implementation guidance. A conformance claim needs combined evidence: automated findings, manual review, and assistive-technology testing on the relevant journeys.

## Accessibility Overlays: Do Not Recommend

Overlay/widget products (one injected script that claims to auto-remediate) do not confer conformance and add legal exposure: the FTC ordered accessiBe to pay for unsubstantiated compliance claims. Read the cited report before quoting litigation figures; a share of filings does not establish a higher lawsuit rate among overlay users. Record an installed overlay as an open risk, not a control, and plan remediation plus removal. Evidence: [references/regulatory-landscape.md](references/regulatory-landscape.md#accessibility-overlays-and-legal-exposure).

## Prioritizing Fixes: User Impact, Not Violation Count

Violation *count* is a weak signal for triage. Rank by: (1) **absolute barrier vs. workaround** — a missing label on the only checkout submit button outranks fifty redundant footer roles; (2) **flow centrality** — sign-in, checkout, account recovery, and anything users cannot route around; (3) **breadth** — a shared component or layout template defect hits every consuming page. Two critical violations on a conversion path outrank 200 minor ones; do not let count-sorted dashboards drive the backlog.

## Design-System Leverage

Fix shared components (Button, Modal, Form Field, Tabs, Combobox) first: one fix remediates every consuming page. Audit core interactive components against their ARIA APG pattern, fix, then re-scan pages — many page-level findings collapse. Component-level tests (Storybook a11y with `parameters.a11y.test = 'error'`, `jest-axe`) stop regressions in these primitives.

## Web Testing Patterns

- **Component tests**: axe-core via `@axe-core/playwright`, `cypress-axe`, or Storybook `a11y` addon.
- **E2E tests**: inject `@axe-core/playwright` into page-level assertions after navigation.
- **Lighthouse CI**: the category score is weighted and can pass a serious failure; block on named audits, track the score as a trend.
- **States**: axe skips hidden regions. Open menus, dialogs, error states, and themes, then re-scan; re-scan after SPA route changes.
- **`incomplete` results** are needs-review items: route to manual review, never block on them or count them as passes.

Read [references/automated-auditing.md](references/automated-auditing.md) when wiring axe-core, Lighthouse, or Pa11y into component or CI tests.

## Mobile Testing Patterns

- **iOS**: `XCUIApplication.performAccessibilityAudit(for:_:)` in UI tests (Xcode 15+, iOS 17+), Accessibility Inspector for exploratory audits, VoiceOver manual protocol. `accessibilityIdentifier` is a test hook VoiceOver never reads, so identifier lookups are not accessibility checks.
- **Android**: Compose `composeTestRule.enableAccessibilityChecks()` (Compose 1.8.0+, `ui-test-junit4-accessibility`), Espresso `AccessibilityChecks.enable()`, Accessibility Scanner, TalkBack manual protocol.
- Map WCAG to native apps with W3C WCAG2ICT.

Read [references/mobile-accessibility.md](references/mobile-accessibility.md) when scoping iOS or Android accessibility test workflows.

## CI Integration

| Stage | What to Run | Gate |
|-------|-------------|------|
| PR (component) | axe-core on changed components | Use team policy; common starter is block critical/serious |
| PR (E2E) | axe-core on smoke flows | Use team policy; common starter is block critical/serious |
| Staging deploy | Full-page Lighthouse + axe scan | Common starter: block critical, warn serious/moderate |
| Release | Manual audit of critical flows + screen reader verification | Sign-off required |

Baseline management: for existing codebases, snapshot current violations and gate only on *new* ones. Compare per-node fingerprints (rule + page + target), not per-rule node counts: with a count diff, one fixed node hides one new node of the same rule. See [references/ci-accessibility-gates.md](references/ci-accessibility-gates.md).

Close a finding against the criterion, assistive-technology/browser setup, viewport/device, and user task that exposed it. Preserve the failing evidence, retest the repaired component or flow, then check adjacent focus, announcements, keyboard order, zoom/reflow, and error recovery as applicable. A clean automated rerun proves only the rules executed on the scanned state; record which manual, expert, or real-user tier remains untested.

## Three Tiers of Testing: Automated, Manual Expert, Real AT Users

Each tier catches defects the others miss — none is a substitute for the others on a
compliance-relevant or high-traffic critical flow:

| Tier | Who | Catches | Misses |
|------|-----|---------|--------|
| Automated | CI (axe-core, Lighthouse, jsx-a11y) | Structural/programmatic defects reliably, with repeatable coverage of the scanned states | Anything requiring judgment about meaning, sufficiency, or usability |
| Manual expert | Sighted engineer/QA running keyboard + screen-reader protocol | Flow-level defects, focus management, ARIA correctness in context | Real-world friction — expert testers know the workarounds a first-time AT user does not |
| Real AT users | Actual disabled users, their own devices/AT/versions/speed | Highest-fidelity signal — muscle-memory shortcuts, unfamiliar error recovery, device-specific quirks | Coverage depends on recruited users and tested tasks; combine with structural checks |

Automated plus in-house expert is necessary but not sufficient for a critical or regulated flow. Before a compliance-relevant release (EAA, ADA Title II, VPAT/ACR sign-off) or a core-flow redesign, run at least one round with actual AT users (research panels, disability ERGs, screen-reader-using customers), paid as research participants. Vendor names and panel pricing change — verify before budgeting.

## Screen Reader Testing Protocol

Test critical flows with at least one screen reader per target platform:

| Platform | Screen Reader | When |
|----------|---------------|------|
| macOS/iOS | VoiceOver | Default for Apple targets |
| Windows | NVDA (free); add JAWS for enterprise/US-heavy audiences | Default for Windows web |
| Android | TalkBack | Default for Android targets |

What to verify: landmark announcements, heading navigation, form label association, error announcements, dynamic content updates (live regions), modal/dialog focus management, custom widget interaction.

Test NVDA and JAWS both for enterprise or US-heavy audiences: JAWS still leads primary desktop use in North America (WebAIM Screen Reader Survey #10; check webaim.org for a newer survey before quoting shares).

Read [references/screen-reader-testing.md](references/screen-reader-testing.md) when running VoiceOver, NVDA, JAWS, or TalkBack verification.

## Keyboard Navigation Testing

Tab order, visible focus, skip link, modal focus trap and return, and APG keyboard patterns for custom widgets. See [references/keyboard-navigation.md](references/keyboard-navigation.md).

## Quick Reference

| What to Test | Tool / Method | CI Stage | Automation |
|--------------|---------------|----------|------------|
| Color contrast | axe-core + manual for unsupported states/backgrounds | PR + release | Partial |
| Missing alt text | axe-core | PR gate | Full |
| Form labels | axe-core | PR gate | Full |
| Heading hierarchy | axe-core + manual structure review | PR + release | Partial |
| ARIA validity | axe-core | PR gate | Full |
| Keyboard navigation | axe-core + manual | PR + release | Partial |
| Touch target size | axe-core + manual | PR + release | Partial |
| Screen reader flow | Manual (VoiceOver/NVDA/TalkBack) | Release | Manual |
| Cognitive load | Manual review | Release | Manual |
| Reflow at 400% zoom | Manual browser test | Release | Manual |

## Regulatory Landscape

Summary; details, sources and caveats in [references/regulatory-landscape.md](references/regulatory-landscape.md):

- **WCAG 2.2 AA** is the default target. It added six A/AA criteria over 2.1 (2.4.11, 2.5.7, 2.5.8, 3.2.6, 3.3.7, 3.3.8); 4.1.1 was removed in the 5 Oct 2023 Recommendation. Check the W3C publication status before discussing WCAG 3.0; use a published Recommendation for conformance gates.
- **ADA Title II**: WCAG 2.1 AA; the 2026 Interim Final Rule moved the dates to 26 Apr 2027 (50k+) and 26 Apr 2028. **Title III** has no DOJ technical standard or deadline.
- **Section 508**: still WCAG 2.0 AA.
- **EN 301 549**: read the applicable Official Journal citation and its directive scope before asserting presumption of conformity; publication alone does not make a newer edition the harmonised reference.
- **EAA**: applies from 28 Jun 2025; whether it covers a given product is a question for qualified counsel. The Art. 32 transition covers products already in use and pre-existing contracts, not "existing services" in general; microenterprises providing services are exempt; an Annex V accessibility statement is required.

## Do / Avoid

### Do

- Start with axe-core as the default cross-framework scanner
- Treat CI severity thresholds as team policy, not as a WCAG verdict
- Test with real assistive technology for critical flows, including sessions with actual
  disabled AT users before a compliance-relevant or core-flow release
- Fix shared design-system components first — highest leverage per hour spent
- Include accessibility in definition of done
- Use ARIA Authoring Practices Guide (APG) for custom component keyboard patterns
- Combine multiple automated tools for broader rule coverage
- Prioritize by user impact (blocker vs. workaround, flow centrality) over raw violation count

### Avoid

- Treating automated scanning as complete coverage or as proof of WCAG conformance
- Recommending or shipping an accessibility overlay/widget as a substitute for code-level
  remediation — it does not confer conformance
- Blocking all PRs on all existing violations (use baselines)
- Using only one automated tool without manual testing
- Testing accessibility only before release (shift left)
- Sorting remediation backlogs by violation count alone instead of user impact
- Blocking CI on axe `incomplete` results, or disabling `color-contrast` globally to silence noise
- Gating on the Lighthouse accessibility score alone
- Writing VPAT/ACR "Supports" from automated results without manual and AT evidence

## Navigation

- `## Workflow` and `## WCAG 2.2 Automation Boundary` for the baseline sequence
- `## Resources` and `## Templates` for deeper materials
- `## Related Skills` for cross-platform handoffs

## Resources

| Resource | Purpose |
|----------|---------|
| [references/automated-auditing.md](references/automated-auditing.md) | axe-core, Lighthouse, Pa11y integration and configuration |
| [references/screen-reader-testing.md](references/screen-reader-testing.md) | VoiceOver, NVDA, TalkBack testing protocols |
| [references/wcag-automation-matrix.md](references/wcag-automation-matrix.md) | WCAG 2.2 AA criteria mapped to automation coverage |
| [references/ci-accessibility-gates.md](references/ci-accessibility-gates.md) | CI gate design, baselines, and severity mapping |
| [references/cognitive-accessibility.md](references/cognitive-accessibility.md) | WCAG 2.2 cognitive criteria (3.2.6, 3.3.7, 3.3.8), reading-level checks, COGA guidance |
| [references/eslint-jsx-a11y-integration.md](references/eslint-jsx-a11y-integration.md) | eslint-plugin-jsx-a11y wiring, custom rule set, CI gate with --max-warnings=0 |
| [references/mobile-accessibility.md](references/mobile-accessibility.md) | iOS `performAccessibilityAudit`, Compose/Espresso checks, VoiceOver/TalkBack protocols |
| [references/regulatory-landscape.md](references/regulatory-landscape.md) | WCAG versions, ADA, Section 508, EN 301 549, EAA, overlay evidence |
| [references/keyboard-navigation.md](references/keyboard-navigation.md) | Keyboard testing and ARIA APG patterns |
| [data/sources.json](data/sources.json) | Curated external sources |

## Scripts

| Script | Purpose |
|--------|---------|
| [scripts/generate-a11y-baseline.ts](scripts/generate-a11y-baseline.ts) | Playwright + axe-core baseline generator; rejects malformed configuration and unsuccessful navigation before replacing the baseline — run with `npx tsx scripts/generate-a11y-baseline.ts` |
| [scripts/test_baseline_regressions.py](scripts/test_baseline_regressions.py) | Offline mocked regressions; run with Node 24+ available: `python3 scripts/test_baseline_regressions.py` |
| [scripts/README.md](scripts/README.md) | Setup and usage guide for all scripts |

## Templates

| Template | Purpose |
|----------|---------|
| [assets/template-accessibility-audit.md](assets/template-accessibility-audit.md) | Accessibility audit scope, findings, and remediation plan |
| [assets/template-accessibility-ci-config.md](assets/template-accessibility-ci-config.md) | Example CI configurations for axe-core and Lighthouse gates |
| [assets/template-screen-reader-checklist.md](assets/template-screen-reader-checklist.md) | Per-flow screen reader testing checklist |

## Related Skills

| Skill | Purpose |
|-------|---------|
| [software-accessibility](../software-accessibility/SKILL.md) | Implementing accessibility fixes in code |
| [software-ui-ux-design](../software-ui-ux-design/SKILL.md) | Accessible design and WCAG 2.2 design patterns |
| [qa-testing-strategy](../qa-testing-strategy/SKILL.md) | Risk-based test strategy and coverage planning |
| [qa-testing-playwright](../qa-testing-playwright/SKILL.md) | E2E web testing with accessibility assertions |
| [qa-testing-android](../qa-testing-android/SKILL.md) | Android accessibility checks with Espresso |
| [qa-testing-ios](../qa-testing-ios/SKILL.md) | iOS accessibility testing with XCTest |
| [qa-testing-mobile](../qa-testing-mobile/SKILL.md) | Cross-platform mobile accessibility |
| [software-frontend](../software-frontend/SKILL.md) | Frontend development and semantic HTML |

## Learnings Loop

When prior decisions or pitfalls are relevant, consult `learnings.consolidated.md` if present; use `learnings.md` only for needed history or as the available fallback. Otherwise skip both.

After applying it, if you encountered a pattern worth remembering, a mistake worth preventing, or a domain fact that surprised you, append one dated bullet to `learnings.md` via `agents-skills-feedback-loop/scripts/append_learning.py`. Do not modify `SKILL.md` itself.

Files in this skill

  • SKILL.md22.9 KB
  • agents/openai.yaml353 B
  • assets/template-accessibility-audit.md3.7 KB
  • assets/template-accessibility-ci-config.md4.7 KB
  • assets/template-screen-reader-checklist.md3.8 KB
  • data/sources.json12.8 KB
  • learnings.consolidated.md600 B
  • learnings.md636 B
  • references/automated-auditing.md8.4 KB
  • references/ci-accessibility-gates.md7.9 KB
  • references/cognitive-accessibility.md11.4 KB
  • references/eslint-jsx-a11y-integration.md4.5 KB
  • references/keyboard-navigation.md7 KB
  • references/mobile-accessibility.md7.6 KB
  • references/screen-reader-testing.md8.8 KB
  • references/wcag-automation-matrix.md12.9 KB
  • scripts/README.md2.6 KB
  • scripts/generate-a11y-baseline.ts4.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…