// guide
The Best Automated Accessibility Testing Tools, Compared
There are dozens of automated accessibility testing tools and most run the same handful of engines under the hood. This guide sorts them into engines, browser extensions, command-line runners, and test-framework integrations, compares what each is actually good at, and gives you an opinionated stack to adopt — plus an honest account of what no automated tool can catch.
// 01 · how to choose a tool
How to Choose a Tool
The accessibility tooling landscape looks crowded — axe, Pa11y, Lighthouse, WAVE, Accessibility Insights, IBM Equal Access, and a long tail of integrations. It feels like a lot of independent products competing on the same job. It is not. Almost every tool worth using is a wrapper around one of three rules engines, and the biggest of the three, axe-core, sits underneath the majority of them — including Google's Lighthouse and Microsoft's Accessibility Insights.
Once you see that, choosing gets much simpler. You are not really picking a tool; you are picking an engine and then choosing the wrapper for each place you want to test — the browser while you build, the command line in CI, and inside your existing test suite. Standardize the engine and a violation caught in one place is reproducible everywhere else, with the same rule name and the same fix.
This guide covers automated tools specifically. For where automated testing fits in the wider picture — the testing pyramid, manual testing, and assistive-technology checks — start with the automated accessibility testing overview, then come back here to choose the actual tools.
// 02 · the testing engines
The Testing Engines
Three rules engines do the actual accessibility evaluation behind nearly every tool on the market. Knowing which engine a tool uses tells you more about its results than the tool's branding does.
| Engine | Maker & license | Where you meet it | Reputation |
|---|---|---|---|
| axe-core | Deque · open source (MPL-2.0) | axe DevTools, Lighthouse, Accessibility Insights, jest-axe, cypress-axe, Playwright | The de facto standard. Broad, well-maintained rules; tuned for near-zero false positives. |
| HTML CodeSniffer | Squiz · open source | Pa11y's default runner, the HTML_CodeSniffer bookmarklet | Maps directly to WCAG techniques. Older, noisier, more false positives than axe. |
| IBM Equal Access | IBM · open source | IBM Accessibility Checker extension & accessibility-checker Node module |
Strong rule coverage and clear WCAG mapping; smaller ecosystem than axe. |
axe-core is the one to build on. It is free and open source under the Mozilla Public License, which is why Google, Microsoft, and the whole integration ecosystem embed it rather than reinventing a ruleset. Its rules are deliberately conservative: axe only flags something when it is confident, so you spend your time fixing real issues instead of triaging noise. Standardizing on axe-core is the single highest-leverage decision in this guide.
// 03 · browser extensions
Browser Extensions
Browser tools are where individual developers spend the most time. They run against the live, rendered DOM — so they catch issues in JavaScript-generated markup that a view-source scan would miss — and they point at the offending element on the page. These are for interactive checking as you build, not for gating a pipeline.
| Tool | Engine | Best at | Cost |
|---|---|---|---|
| axe DevTools | axe-core | The definitive per-element violation list with guided fixes | Free core; paid tiers add guided manual tests |
| WAVE (WebAIM) | Own (WebAIM) | A visual overlay of icons on the page — great for learning and for showing non-developers | Free |
| Lighthouse | axe-core (subset) | A single 0–100 score across a11y, performance, SEO — quick health signal | Free, built into Chrome DevTools |
| Accessibility Insights (Microsoft) | axe-core | FastPass automated check plus a guided manual "Assessment" workflow | Free |
| IBM Equal Access | IBM Equal Access | Detailed WCAG-mapped reports with a second-opinion engine | Free |
axe DevTools is the workhorse — install it, open the browser dev tools, and run a scan for the complete, actionable violation list. WAVE earns its place as a teaching and communication tool: its on-page icon overlay makes accessibility visible to designers and product managers who will never open a JSON report. Accessibility Insights is worth adding specifically for its guided Assessment, which walks you through the manual checks automation cannot do — a rare bridge between automated and manual testing.
// 04 · command-line and ci tools
Command-Line and CI Tools
Browser extensions rely on a human remembering to run them. To stop regressions, accessibility checks have to run automatically on every change — which means the command line and your CI pipeline. These tools crawl or load your pages headlessly and exit non-zero on failure so a build can be blocked.
| Tool | Engine | Model | Best for |
|---|---|---|---|
| Pa11y CI | axe or HTML CodeSniffer | Crawls a URL list or sitemap | Site-wide coverage with almost no code — point it at your sitemap |
axe CLI (@axe-core/cli) |
axe-core | Scans specified URLs | Quick pure-axe scans in a script without a full framework |
| Lighthouse CI | axe-core (subset) | Runs Lighthouse, asserts on scores | Tracking the accessibility score alongside performance budgets |
For most sites, Pa11y CI pointed at the sitemap is the fastest route to broad coverage — one command scans every page you publish, and new pages are covered automatically as they enter the sitemap. Configure it with the axe runner so its results line up with the axe DevTools extension your developers use locally. We walk through the whole setup — config file, sitemap scanning, GitHub Actions, and violation thresholds for legacy code — in the dedicated Pa11y CI setup guide.
# Scan every URL in the sitemap, using the axe engine
npx pa11y-ci --sitemap https://example.com/sitemap.xml
# Or a quick single-page scan with the axe CLI
npx @axe-core/cli https://example.com
// 05 · test-framework integrations
Test-Framework Integrations
The most durable place to put accessibility checks is inside tests you already write and already run. Because these integrations all wrap axe-core, they add accessibility assertions to your existing unit and end-to-end suites — including on the interactive states a crawler never sees, like an open dialog or a form mid-validation.
| Integration | Runs in | Catches issues |
|---|---|---|
eslint-plugin-jsx-a11y |
Your editor / lint step | Before the code even runs — static JSX checks (missing alt, bad roles) |
jest-axe |
Jest / Vitest unit tests | Per-component, in jsdom — fast feedback on rendered output |
@axe-core/react |
The browser console (dev mode) | Live, as you interact with the running React app |
cypress-axe / @axe-core/playwright |
Cypress / Playwright E2E tests | On real, fully interactive pages — post-login, mid-flow, dialogs open |
@storybook/addon-a11y |
Storybook | Per-story, right next to the component in isolation |
A strong layered setup runs eslint-plugin-jsx-a11y in the editor to catch the obvious mistakes before they are committed, jest-axe on components for fast per-render checks, and @axe-core/playwright (or cypress-axe) on key user flows to test the assembled, interactive page. Here is what an axe assertion looks like inside a Playwright test:
import { test, expect } from '@playwright/test';
import AxeBuilder from '@axe-core/playwright';
test('checkout page has no automatically detectable a11y violations', async ({ page }) => {
await page.goto('/checkout');
await page.getByRole('button', { name: 'Add promo code' }).click();
const results = await new AxeBuilder({ page })
.withTags(['wcag2a', 'wcag2aa', 'wcag22aa'])
.analyze();
expect(results.violations).toEqual([]);
});
Because it runs after the click, that test scans the page with the promo-code UI expanded — a state a sitemap crawler would never reach. That is the whole reason to test accessibility inside your E2E suite rather than relying on a crawler alone: the crawler gives you breadth, your test suite gives you depth on the flows that matter most. For the full setup — fixtures, scoping scans, and testing open dialogs — see the Playwright accessibility testing guide.
// 06 · side-by-side comparison
Side-by-Side Comparison
The full field at a glance. Note how the Engine column collapses the apparent variety: most rows are axe-core wearing a different harness.
| Tool | Type | Engine | Runs in CI? | Cost |
|---|---|---|---|---|
| axe DevTools | Browser extension | axe-core | No (browser) | Free / paid tiers |
| WAVE | Browser extension | WebAIM | No (browser) | Free |
| Lighthouse | Audit tool | axe-core (subset) | Yes (Lighthouse CI) | Free |
| Accessibility Insights | Browser extension | axe-core | No (browser) | Free |
| IBM Equal Access | Extension + CLI | IBM Equal Access | Yes | Free |
| Pa11y CI | CLI crawler | axe / HTML CodeSniffer | Yes | Free |
| axe CLI | CLI | axe-core | Yes | Free |
| jest-axe | Unit-test integration | axe-core | Yes | Free |
| cypress-axe / @axe-core/playwright | E2E-test integration | axe-core | Yes | Free |
| eslint-plugin-jsx-a11y | Linter | Static (own rules) | Yes | Free |
// 07 · what automated tools cannot catch
What Automated Tools Cannot Catch
Every tool on this page shares the same ceiling. Automated testing reliably finds only the WCAG criteria that can be decided by a machine — realistically between a third and a half of them. The rest need a human, and no amount of tooling changes that. A page can score a perfect 100 in Lighthouse and pass every axe check while being completely unusable.
What automation reliably catches:
- Insufficient color contrast
- Missing form labels and
altattributes - Invalid or misused ARIA roles, states, and properties
- Duplicate
ids and broken name/role/value pairings - Missing document language and malformed landmark structure
What it cannot judge — and what you still have to test by hand:
- Whether
alttext is meaningful rather than merely present - Whether focus order is logical and whether focus is managed after interactions
- Whether an ARIA widget actually announces correctly in a screen reader
- Whether the whole page is operable with a keyboard alone
- Whether content is understandable, and whether error messages actually help
That is why the tools here are a starting layer, not the whole strategy. Once automation is green, the real work is manual: the keyboard testing guide and the screen reader testing guide cover the human half, and the testing checklist ties automated and manual passes into one repeatable workflow.
// 08 · the stack we recommend
The Stack We Recommend
Skip the tool-by-tool agonizing. Standardize on axe-core and wrap it for each place you test. This stack is free end to end, and because every layer runs the same engine, a violation looks identical wherever it surfaces.
| Where | Use | Why |
|---|---|---|
| In the editor | eslint-plugin-jsx-a11y |
Catches the obvious mistakes before the code runs — cheapest possible fix |
| While building | axe DevTools extension | The complete, per-element violation list on the live page |
| In unit tests | jest-axe |
Fast per-component checks that fail the moment a regression lands |
| In E2E tests | @axe-core/playwright or cypress-axe |
Tests interactive, post-login, mid-flow states a crawler cannot reach |
| Across the whole site | Pa11y CI (axe runner) on the sitemap | Breadth — every published URL, on every build |
| By hand, always | Keyboard + screen reader testing | The half of WCAG no tool can judge |
Frequently asked questions
What is the best automated accessibility testing tool?
For most teams the answer is axe-core — not as a single app, but as the engine you standardize on everywhere. Use the free axe DevTools browser extension while building, Pa11y CI or the axe CLI to gate your pipeline, and an axe integration (jest-axe, cypress-axe, or @axe-core/playwright) inside your existing test suite. Because all of those run the same axe-core rules, a violation looks identical whether it is caught locally, in CI, or in a unit test. There is no single "best tool" — there is a best engine, wrapped for each place you want to test.
How much of accessibility can automated tools catch?
Somewhere between a third and a half of WCAG success criteria have a deterministic, machine-checkable component — things like color contrast, missing form labels, invalid ARIA, duplicate IDs, and missing alt attributes. The rest require human judgment: whether alt text is meaningful, whether focus order is logical, whether an ARIA widget actually announces correctly in a screen reader. Automated tools are a fast first pass that clears the deterministic failures so your manual testing time goes to the things only a person can judge. They cannot certify compliance on their own.
Is axe-core free? What about axe DevTools?
axe-core — the rules engine — is open source (Mozilla Public License 2.0) and free to use, including commercially. It powers Lighthouse, the axe browser extensions, and dozens of integrations. axe DevTools is Deque's browser extension built on top of it: the core scanning is free, while paid tiers add guided manual testing, intelligent guided tests, and reporting. Pa11y, WAVE, Lighthouse, IBM Equal Access, and Accessibility Insights are all free as well. You can run a complete automated pipeline without paying for anything.
What is the difference between axe and Lighthouse for accessibility?
Lighthouse's accessibility category is powered by axe-core — it runs a subset of axe's rules and rolls the result into a 0–100 score. So they share the same engine, but serve different jobs. Lighthouse is a broad page-quality audit (performance, SEO, best practices, and accessibility) that gives you a single headline number; axe DevTools and the axe CLI run the full ruleset and report every violation with the exact element and remediation. Use Lighthouse for a quick health signal and trend line; use a dedicated axe tool when you need the complete, actionable list.
Which accessibility testing tool should I use in CI/CD?
If you want site-wide coverage with the least code, use Pa11y CI pointed at your sitemap — it scans every page and fails the build on violations (see the Pa11y CI setup guide). If you already have an end-to-end suite, add @axe-core/playwright or cypress-axe so accessibility assertions run inside tests you already maintain, including on authenticated and interactive states a crawler cannot reach. Many teams run both: Pa11y CI for breadth across every URL, and axe-in-tests for depth on key flows.
Can automated testing tools make my site WCAG compliant?
No single tool — and no amount of automated testing — can make a site WCAG compliant on its own. Automated tools verify the deterministic criteria and will happily pass a page that is unusable with a keyboard or unintelligible to a screen reader, because those failures are outside what a machine can judge. Real conformance needs automated scanning plus keyboard testing, screen reader testing, and human review of content and flows. Think of automated tools as the spell-checker of accessibility: essential, fast, and nowhere near sufficient by itself.