Image description: Six different over-ear headphones displayed in a grid for comparison.
The screen reader matrix
The screen reader matrix:
Why every AT combination tells a different story
NVDA+Firefox, JAWS+Chrome, VoiceOver+Safari, TalkBack+Chrome — each pairing creates a unique rendering environment. A page that works perfectly in one can be completely silent in another. Here’s what every team building for WCAG 2.2 AA needs to know.
Combinations
(AIOPSGROUP internal audit data)
vs. single-tool testing
Why testing a single screen reader isn’t enough
When an accessibility audit reveals that a website “works with screen readers,” that claim is almost meaningless without qualification. Screen readers are not a monolithic category of software — they are complex applications that each implement their own interpretation of the Accessibility APIs provided by operating systems, layering that interpretation on top of the browser’s own accessibility tree, which itself varies significantly between vendors.
The result is a layered stack of interpretations. A role="dialog" attribute
on a modal element will be announced differently in JAWS 2024 with Chrome
vs. NVDA 2024.1 with Firefox 124 vs. VoiceOver on macOS Sonoma with Safari 17. These are
not minor phrasing variations — they can be the difference between a user understanding
they are in a modal dialog that traps focus, or hearing nothing at all.
The three-layer stack — operating system accessibility API →
Every screen reader interaction travels through at least three layers: OS accessibility API (MSAA/UI Automation on Windows, NSAccessibility on macOS, ATK/AT-SPI on Linux) → browser accessibility tree (Chrome’s AX tree, Firefox’s IA2 bridge, Safari’s NSAccessibility) → Screen Reader Virtual Buffer (JAWS’s Virtual PC Cursor, NVDA’s Browse Mode, VoiceOver’s Rotor model). A bug at any layer appears as a screen reader failure, but the fix location and the affected combinations differ dramatically.
“Testing with one screen reader and one browser is like testing a website in only one resolution and calling it responsive. The surface area of real-world usage is simply much wider than a single combination can cover.”
— AIOPSGROUP Accessibility Engineering PracticeThe major screen reader + browser combinations
The assistive technology landscape has consolidated around a handful of dominant tools, but each has unique architectural characteristics, user bases, and browser affinities. Understanding these is prerequisite to intelligent test prioritisation.
The AT × browser behavior matrix
The following matrix documents observed behaviour for common ARIA patterns and HTML semantics across the most important AT/browser combinations. Results are based on testing conducted with production-representative versions as of Q1 2025.
Legend: Pass = announced correctly and completely. Partial = announced with missing or incorrect information. Fail = not announced, announced incorrectly, or navigation broken.
| Feature / Pattern | JAWS + Chrome | JAWS + Edge | NVDA + Firefox | NVDA + Chrome | VoiceOver + Safari | VoiceOver + Chrome (mac) | Narrator + Edge | TalkBack + Chrome |
|---|---|---|---|---|---|---|---|---|
| role=”dialog” + aria-modal | Pass | Pass | Pass | Partial | Partial | Fail | Pass | Partial |
| aria-live=”polite” updates | Pass | Pass | Pass | Partial | Pass | Partial | Pass | Partial |
| aria-live=”assertive” | Pass | Pass | Pass | Pass | Partial | Fail | Pass | Pass |
| role=”combobox” (ARIA 1.2) | Pass | Pass | Pass | Partial | Partial | Fail | Partial | Partial |
| role=”grid” + keyboard nav | Pass | Pass | Pass | Pass | Partial | Fail | Partial | Fail |
| aria-expanded on disclosure | Pass | Pass | Pass | Pass | Pass | Partial | Pass | Pass |
| SVG with role=”img” + aria-label | Pass | Pass | Pass | Pass | Pass | Pass | Partial | Pass |
| Error message via aria-describedby | Pass | Pass | Pass | Pass | Pass | Partial | Pass | Pass |
| Drag-and-drop (aria-grabbed) | Partial | Partial | Partial | Partial | Fail | Fail | Fail | Fail |
| role=”tablist” / tab pattern | Pass | Pass | Pass | Pass | Pass | Partial | Pass | Partial |
| Custom focus management (SPA routing) | Partial | Partial | Pass | Partial | Partial | Fail | Partial | Partial |
| CSS content: with icons | Fail | Fail | Fail | Fail | Fail | Fail | Fail | Fail |
The aria-grabbed attribute was deprecated in ARIA 1.1 and has near-zero screen reader
support in any combination. Teams relying on it have deployed functionally inaccessible drag-and-drop
in production. The replacement pattern uses cut/paste keyboard affordances alongside the visual
drag model, combined with live region announcements for feedback.
Where combinations diverge: Critical differences explained
Understanding why combinations diverge — not just that they do — is essential for writing code that is robust across the matrix. The differences fall into several architectural categories.
| Divergence category | Affected combinations | Severity | Root cause | Mitigation |
|---|---|---|---|---|
| Virtual buffer vs. vo virtual buffer | JAWS/NVDA (virtual) vs. VoiceOver (no virtual buffer in many modes) | High | JAWS and NVDA build an internal document model (virtual buffer); VoiceOver interacts more directly with the accessibility tree | Avoid relying on timing of DOM mutations; use ARIA live regions for all dynamic content |
| ARIA modal support | VoiceOver+Safari vs. all Windows SRs | High | Safari implements aria-modal differently — VoiceOver may not restrict reading to modal content without additional inert attribute usage | Use inert attribute on background content; test with both Windows and macOS |
| Accessible name computation (legacy) | Historical note: JAWS + IE 11 only | Historical | IE 11 reached end-of-life June 2022 and is not officially supported by JAWS 2024 or by WCAG 2.2. Its MSAA-based name computation was significantly limited. This row is retained for teams maintaining pre-2022 codebases only. | Not applicable for WCAG 2.2 compliance work. Migrate to evergreen browsers; JAWS + Edge or Chrome is the correct modern target. |
| Browse mode vs. application mode | JAWS/NVDA application mode edge cases | Medium | Both JAWS and NVDA switch automatically from Browse to Application mode on role=”application”, which can trap users if not designed carefully | Avoid role=”application” unless the component truly implements all keyboard navigation; document the interaction model |
| Live region timing | NVDA+Chrome vs. NVDA+Firefox | Medium | Chrome and Firefox differ in when they notify assistive technology of DOM changes; Chrome can delay or coalesce updates | Use a dedicated live region element that persists in DOM; never reuse live region for different message types simultaneously |
| Focus management after DOM change | SPA routing in all combinations | High | Single-page applications that change content without navigation events lose screen reader context; each AT handles this differently | Move focus to a descriptive heading or region landmark after navigation; announce route changes via live region |
| iOS Safari engine restriction | VoiceOver iOS + all browsers | Medium | On iOS, all browsers use WebKit under the hood (App Store rules); any bug in WebKit’s accessibility tree affects all browsers | Test with Safari on iOS; other browser results on iOS will be identical at the accessibility tree level |
| Table header association | Complex tables across all combinations | Low | Complex scope=”colgroup” and scope=”rowgroup” have inconsistent support across all modern screen readers; the headers attribute provides an explicit fallback | Prefer simple table structures; use the headers attribute explicitly for complex multi-level header tables |
A note on JAWS + Internet Explorer 11
Internet Explorer 11 reached end-of-life on 15 June 2022. Microsoft no longer provides security updates or technical support, and Freedom Scientific’s JAWS 2024 does not officially support IE 11. WCAG 2.2 — published in October 2023 — includes success criteria such as 2.4.11 Focus Not Obscured that depend on CSS and rendering capabilities IE 11 cannot support. JAWS+IE is not a valid target combination for WCAG 2.2 AA compliance work.
That said, teams maintaining legacy codebases that pre-date 2022, or supporting locked-down enterprise environments that have not yet completed their IE-to-Edge migrations, may need to understand the historical behaviour of this pairing. The JAWS/IE combination used Microsoft Active Accessibility (MSAA) — an older API layer with significantly limited ARIA support compared to the IAccessible2 (IA2) and UI Automation (UIA) interfaces that modern browsers expose. Many ARIA 1.1 patterns behaved incorrectly or were entirely silent under MSAA.
If you are one of the rare teams with a documented, contractual obligation to support IE 11, treat it as a supplementary target with its own separate test pass — not as part of a WCAG 2.2 compliance programme. The modern enterprise combination is JAWS + Edge (Chromium), which uses UIA and has excellent ARIA support.
IE 11 does not support the CSS and browser rendering required by several WCAG 2.2 AA success criteria. Including IE 11 in a WCAG 2.2 compliance test matrix is technically incorrect — the browser is incapable of passing tests it lacks the rendering engine to support. Modern enterprise screen reader testing should target JAWS + Edge (Chromium) or JAWS + Chrome, both of which provide full UI Automation support and broad ARIA 1.2 compatibility.
VoiceOver+Safari: A separate philosophy
Apple’s approach to accessibility differs fundamentally from Microsoft’s. Where JAWS and NVDA build a complete virtual representation of the document and allow users to navigate that representation independently of focus, VoiceOver works more directly with the rendered accessibility tree and often with actual keyboard focus.
This means that patterns which work by manipulating focus invisibly — focus moves that happen in response to ARIA attributes rather than user interaction — can break VoiceOver in ways that seem inexplicable until you understand the architectural difference. VoiceOver users on macOS navigate with a separate VoiceOver cursor, but the relationship between VoiceOver cursor position and keyboard focus is more tightly coupled than in JAWS’s Virtual PC Cursor model.
Testing VoiceOver with Chrome on macOS produces results that do not represent any real user population well. Chrome on macOS has historically had poor integration with the NSAccessibility API that VoiceOver uses. The combination produces more false failures than any other pairing — patterns that fail in VoiceOver+Chrome but pass in VoiceOver+Safari may be Chrome bugs, not accessibility defects. Always use VoiceOver+Safari as the canonical macOS test combination.
Test scenario coverage calculator
Use this calculator to estimate the testing effort required for your product, based on your user base characteristics, compliance target, and available AT combinations.
Adjust inputs to calculate your recommended test matrix scope and estimated effort.
Building a risk-weighted coverage strategy
No team has unlimited testing resources. The goal of a coverage strategy is to maximise the probability of catching real-world failures affecting real users, within the constraints of time and tooling. Risk weighting — allocating testing effort proportional to user impact and architectural risk — is the professional approach.
Recommended priority tiers for general web products
| Combination | Priority | Market share rationale | Notes |
|---|---|---|---|
| NVDA 2024.x + Firefox (latest) | P1 — Core | Highest combined desktop SR + browser pairing by usage | Best standards compliance; excellent for ARIA 1.2 testing |
| JAWS 2024 + Chrome (latest) | P1 — Core | Dominant in enterprise; ~40% of desktop SR users (WebAIM 2023, down from ~54% in 2021) | Enterprise-critical; test complex ARIA widgets thoroughly |
| VoiceOver + Safari (macOS Sonoma) | P1 — Core | All Mac users and creative/design professions | Canonical macOS test; do not substitute VoiceOver+Chrome |
| VoiceOver + Safari (iOS 17) | P1 — Core | ~71% of mobile SR users; required if mobile traffic exists | Test touch navigation; swipe gesture model is distinct |
| JAWS 2024 + Edge (Chromium) | P1 — Core | Correct modern enterprise pairing; replaces JAWS+IE for all current WCAG 2.2 work | Full UIA support; excellent ARIA 1.2 compatibility; add for any enterprise product |
| TalkBack + Chrome (Android 14) | P2 — Extended | ~29% of mobile SR users; growing Android user base | Explore-by-touch differs significantly from iOS; test separately |
| NVDA + Chrome (latest) | P2 — Extended | Covers NVDA users who prefer Chrome over Firefox | Focus on live region timing differences vs. NVDA+Firefox |
| Narrator + Edge (latest) | P3 — Supplemental | Growing Windows built-in user base; government relevance | Strong UI Automation support; test government/public sector products |
| JAWS + IE 11 (legacy only) | Legacy — Out of Scope | IE 11 EOL June 2022; not supported by JAWS 2024; incompatible with WCAG 2.2 | Include only under a documented contractual obligation for a pre-2022 codebase. Not a WCAG 2.2 compliance target. |
User population coverage by number of combinations tested
- 1 combination 35%
- 2 combinations 55%
- 4 combinations 72%
- 6 combinations 83%
- 8 combinations 91%
- 12 combinations 98%
NVDA+Firefox, JAWS+Chrome, and VoiceOver+Safari together represent approximately 78% of real-world screen reader usage. For most public-facing web products, achieving thorough coverage across these three combinations plus VoiceOver+Safari iOS provides the highest return on testing investment. Add TalkBack+Chrome if mobile traffic exceeds 30%, and JAWS+Edge if your product serves enterprise environments — it is the correct modern enterprise pairing, offering full UIA support and broad ARIA 1.2 compatibility. IE 11 is end-of-life and is not a valid WCAG 2.2 compliance target.
A repeatable multi-combination testing workflow
Effective combination testing is not simply running the same manual test script across multiple tools. Each AT has unique keyboard commands, navigation models, and announcement verbosity settings. A professional workflow accounts for these differences and yields reproducible, comparable results.
Setting up each AT correctly
One of the most common sources of false results in combination testing is incorrect AT configuration. Each tool must be set to the correct mode before testing begins.
| Screen reader | Key Configuration |
|---|---|
| JAWS | Set verbosity to “Intermediate”; enable “Speak punctuation” at “Some”; use Virtual PC Cursor for web |
| NVDA | Browse mode (B key toggle); verbosity set to “Words”; enable “Report landmark regions” |
| VoiceOver (macOS) | VO+A for read-all; VO+U for Rotor; ensure “Web Rotor” includes Headings, Links, Form Controls |
| VoiceOver (iOS) | Single swipe right/left for linear nav; two-finger scroll; triple-tap for activate |
| TalkBack | Explore by touch active; use “next” gesture for linear navigation; check reading order |
| Narrator | Scan mode (Caps Lock+Space); Scan level “Items”; verbosity “Default” |
What to record during testing
Verbatim speech output is the gold standard. Screen recording with audio capture allows post-session analysis and creates evidence for defect reports.
-
Announced role Confirm the element type is spoken (button, link, heading level N, etc.)
-
Accessible name Verify the name announced matches the visible label or intended alternative
-
State / property Expanded/collapsed, checked/unchecked, required, invalid — all must be announced
-
Dynamic content updates Live region announcements must fire at appropriate timing and verbosity
-
Navigation order Tab and reading order must match visual/logical order; check for focus traps
-
Error identification Form errors must be announced on submission and associated with the field
WCAG 2.2 AA screen reader testing checklist
The following checklist maps directly to WCAG 2.2 AA success criteria that are primarily validated through screen reader testing. Each item must pass in all P1 combinations before a feature is considered WCAG 2.2 AA conformant.
| WCAG SC | Criterion | Level | Primary test method | Most critical combinations |
|---|---|---|---|---|
| 1.1.1 | Non-text content | A | Navigate to all images; confirm alternative text is announced and appropriate | TalkBack+Chrome, VoiceOver+Safari (inline SVG edge cases) |
| 1.3.1 | Info and relationships | A | Verify headings, lists, tables, and form labels are announced with correct semantics | All combinations; complex tables in NVDA+Firefox and JAWS+Chrome |
| 1.3.2 | Meaningful sequence | A | Read page in linear order; confirm logical reading sequence matches visual order | VoiceOver+Safari, TalkBack+Chrome |
| 2.1.1 | Keyboard | A | Navigate all functionality with keyboard only; confirm no keyboard traps | All combinations; NVDA browse/application mode transitions |
| 2.4.3 | Focus order | A | Tab through page; confirm focus order is logical and preserves meaning | All combinations; SPA routing especially |
| 2.4.6 | Headings and labels | AA | Use headings list / rotor; confirm all headings are descriptive and correctly levelled | All combinations |
| 2.4.7 | Focus visible | AA | Visually confirm focus indicator is visible for all focusable elements | All combinations (visual check) |
| 2.4.11 | Focus Not Obscured (Minimum) | AA | Confirm focused elements are not fully hidden by sticky headers, footers, or overlays | All combinations |
| 2.5.3 | Label in name | AA | Compare announced name to visible label text; accessible name must contain visible text | JAWS+Chrome, NVDA+Firefox |
| 3.3.1 | Error identification | A | Submit form with errors; confirm errors are announced and associated with fields | All combinations; live region timing in NVDA+Chrome |
| 3.3.2 | Labels or instructions | A | Navigate to form fields; confirm label and format instructions are announced before field | All combinations |
| 4.1.2 | Name, role, value | A | Navigate to all interactive controls; confirm name, role, and state are all announced | All combinations; highest failure rate criterion |
| 4.1.3 | Status messages | AA | Trigger status messages (form success, load states); confirm announced without focus change | NVDA+Chrome (timing), VoiceOver+Safari |
WCAG 4.1.2 consistently appears as the highest-failure criterion in automated and manual audits alike. It requires that every UI component exposes its name, role, and current value/state to assistive technology. The most common failures are: custom controls with no ARIA role, interactive elements with no accessible name (icon-only buttons), and dynamic state changes (aria-checked, aria-expanded, aria-selected) that are not programmatically reflected. Testing this criterion across all P1 combinations is non-negotiable.
The business case for comprehensive combination testing
Screen reader testing is not an accessibility compliance checkbox. It is a quality assurance discipline that, when done well across the right combinations, reveals interface bugs that affect all users — not just those with disabilities. Focus management errors, dynamic content that fails to update, and state that isn’t communicated programmatically are usability failures that happen to be detected through the lens of assistive technology.
The legal landscape reinforces the technical argument. The EU Web Accessibility Directive, the US Revised Section 508 Standards, the UK Public Sector Bodies Accessibility Regulations, and an accelerating wave of private sector ADA litigation all point toward WCAG 2.2 AA as the baseline expectation. Litigation risk is highest where no documented testing has been conducted — and testing one combination is often insufficient evidence of a good-faith compliance effort.
At AIOPSGROUP, we work with organizations across financial services, government, retail, and enterprise software to build accessibility testing programs that are both rigorous and sustainable. Rigorous means covering the right combinations for the right user populations. Sustainable means embedding AT testing into CI/CD pipelines, training development teams, and creating living test matrices that grow with the product.
“You cannot automate your way to screen reader compliance. Automated tools find roughly 30–40% of WCAG failures. The rest — the ones that matter most to real users — require a human being using a real screen reader in the right combination.”
— AIOPSGROUP Accessibility Practice, 2025 Accessibility State of the Market ReportIf your team is building or maintaining a digital product that serves any segment of the public, the question is not whether to conduct multi-combination screen reader testing, but how to do it efficiently and at scale. We can help with both.
AIOPSGROUP offers accessibility audits, screen reader testing services, WCAG 2.2 AA remediation, and embedded accessibility engineering — tailored to your technology stack and release cadence.
Contact us