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

beginner testing

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

Engine vs. harness An engine is the ruleset that inspects the DOM and decides what is a violation (axe-core, HTML CodeSniffer, IBM Equal Access). A harness is the thing that loads the page and runs the engine against it (a browser extension, a CLI, a test runner). This guide is organized that way: engines first, then the harnesses grouped by where they run.

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.

Why the engine matters more than the tool If your browser extension, your CI runner, and your unit tests all use axe-core, they agree with each other. Mix engines — say Pa11y on HTML CodeSniffer in CI, axe DevTools in the browser — and developers will see violations in one place that do not appear in another, which erodes trust in the whole system. Pick one engine and wire it in everywhere.

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

The Lighthouse score is a floor, not a finish line A Lighthouse accessibility score of 100 means the axe subset it runs found no violations — it does not mean the page is accessible. Lighthouse runs fewer rules than full axe and no manual checks at all. Treat 100 as "no automated failures," then keep 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.

Terminal
# 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
Breadth here, depth in your test suite CI crawlers are excellent at breadth — every URL, every build — but they scan pages in their default state. They cannot open a modal, submit a form, or reach a page behind login. For those, add axe to your end-to-end tests (next section). The two are complementary, not competing.

// 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:

checkout.spec.ts
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 alt attributes
  • 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 alt text 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
Automated tools are a spell-checker, not an editor A spell-checker catches typos but cannot tell you whether the sentence makes sense. Automated accessibility tools are exactly that: essential for clearing the mechanical failures fast, but no substitute for keyboard and screen reader testing by a person. Pair every automated run with the manual steps.

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.

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.