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.

~70%
of screen reader bugs are combination-specific, per AIOPSGROUP internal audit data; proportions vary by product type
1.3B
people worldwide live with some form of disability, per WHO 2023 World Report on Disability
98%
of top one million home pages had detectable WCAG failures in the 2024 WebAIM Million report
~57%
of screen reader users use more than one screen reader, per WebAIM SR Survey #10 (2023); browser co-usage figures are comparable

The three-layer stack — operating system accessibility APIscreen reader engine — means that any change at any layer can produce an entirely different user experience. Browsers update their accessibility tree implementations. Screen readers update their virtual buffer strategies. OS APIs evolve. The combination testing requirement isn’t bureaucratic box-ticking; it’s a technical necessity rooted in genuine architectural divergence.

The accessibility stack

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 Practice

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

JAWS
Job Access With Speech · Freedom Scientific
Market share: ~40% desktop screen reader users
Best browserChrome / Edge
Also pairs wellFirefox
ARIA support
Script customisation
Cost$$$$ Licensed
NVDA
NonVisual Desktop Access · NV Access
Market share: ~40% (WebAIM 2023) desktop screen reader users
Best browserFirefox
Also pairs wellChrome
ARIA support
Plugin ecosystem
CostFree / Open Source
VoiceOver (macOS)
Built-in · Apple Inc.
Market share: ~9% desktop screen reader users
Best browserSafari
Avoid for testingChrome on macOS
ARIA support
Touch/gesture UX
CostFree (macOS built-in)
VoiceOver (iOS)
Built-in · Apple Inc.
Market share: ~71% mobile screen reader users
BrowserSafari (mandatory on iOS)
Gesture modelSwipe/tap navigation
ARIA support
Custom action support
CostFree (iOS built-in)
TalkBack
Built-in · Google / Android
Mobile market share: ~29% (Android screen reader)
BrowserChrome (primary)
Gesture modelExplore by touch
ARIA support
Braille display
CostFree (Android built-in)
Narrator
Built-in · Microsoft Windows
Market share: ~4% desktop (growing)
Best browserEdge (Chromium)
Legacy pairingIE (avoid)
ARIA support
UIA integration
CostFree (Windows built-in)

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.

Screen reader and browser behavior matrix for common ARIA patterns. Columns represent AT/browser combinations. Rows represent specific ARIA features. Cell values are: Pass, Partial, or Fail.
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
Drag-and-drop: A universal failure

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.

Architectural differences between screen reader and browser combinations, including root cause and recommended mitigation for each divergence type.
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 and WCAG 2.2: Not compatible

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.

VoiceOver+Chrome on macOS: The hidden pitfall

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.

AT combination testing estimator

Adjust inputs to calculate your recommended test matrix scope and estimated effort.

6
Recommended AT combinations
Desktop + mobile priority pairs
96
Estimated test hours per release
Manual + semi-automated
78%
User population coverage
By AT market share
120
Test scenarios total
Across all combinations

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%
The 80/20 of combination testing

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.

1
Inventory
Catalogue all interactive components and user journeys
2
Risk Rate
Assign combination priority based on user segment and complexity
3
Baseline
Establish expected announcements per component per combination
4
Execute
Run structured test scripts; record speech output verbatim
5
Triage
Classify failures by combination, severity, and root cause layer
6
Remediate
Fix at correct layer (HTML, ARIA, CSS, JS focus management)
7
Regress
Re-test all combinations for fix and no regressions

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.

Recommended configuration settings for each screen reader before testing
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 2.2 AA success criteria relevant to screen reader testing, with test method and impacted AT combinations for each criterion.
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
4.1.2 name, role, value: The most failed criterion

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 Report

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

Start your accessibility testing programme

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