Screen reader testing guide

Automated testing tools catch roughly 30–40% of accessibility issues. The rest require manual testing with actual screen readers. This guide covers the three most common screen readers and how to use them for testing.

Which screen reader to test with

Screen readerPlatformBrowserMarket share
NVDAWindowsFirefox / Chrome~40%
JAWSWindowsChrome / Edge~30%
VoiceOvermacOS / iOSSafari~20%
TalkBackAndroidChrome~10%

Minimum : Test with NVDA + Firefox on Windows and VoiceOver + Safari on macOS. These two cover the majority of screen reader users.

NVDA (Windows)

Installation

Download NVDA for free from nvaccess.org.

Essential keyboard shortcuts

ShortcutAction
Insert + SpaceToggle focus/browse mode
Insert + Down ArrowRead from current position
Insert + SToggle speech on/off
HNext heading
Shift + HPrevious heading
DNext landmark
KNext link
FNext form field
TNext table
1–6Next heading at that level
TabNext focusable element
EnterActivate link/button
Insert + F7Elements list (headings, links, landmarks)

The Elements List

Press Insert + F7 to open the Elements List — this is the most useful testing tool. It shows :

  • All headings (check hierarchy)
  • All links (check descriptive text)
  • All landmarks (check page structure)
  • All form fields (check labels)

VoiceOver (macOS)

Enabling

Press Cmd + F5 to toggle VoiceOver on/off.

Essential keyboard shortcuts

ShortcutAction
VO (Ctrl+Option) + RightMove to next element
VO + LeftMove to previous element
VO + SpaceActivate element
VO + ARead from current position
VO + UOpen rotor
VO + Cmd + HNext heading
VO + Cmd + LNext link
VO + Cmd + JNext form field
TabNext focusable element
EscapeClose rotor/menu

The Rotor

Press VO + U to open the Rotor. Use Left/Right arrows to switch between categories (Headings, Links, Landmarks, Form Controls). This is VoiceOver’s equivalent of NVDA’s Elements List.

VoiceOver (iOS)

Enabling

Settings → Accessibility → VoiceOver. Or triple-click the side button (if configured).

Essential gestures

GestureAction
Swipe rightMove to next element
Swipe leftMove to previous element
Double tapActivate element
Two-finger swipe upRead from top
Two-finger swipe downRead from current position
Twist two fingers (rotor)Change rotor setting
Swipe up/downMove by rotor setting (headings, links, etc.)

TalkBack (Android)

Enabling

Settings → Accessibility → TalkBack. Or hold both volume keys for 3 seconds.

Essential gestures

GestureAction
Swipe rightNext element
Swipe leftPrevious element
Double tapActivate
Swipe down then rightNext heading
Three-finger swipeScroll
Swipe up then downOpen TalkBack menu

What to test

Page load

  1. Is the page title announced?
  2. Does the main landmark exist?
  3. Can you reach the main content quickly?

Heading structure

  1. Press H repeatedly — do headings form a logical outline?
  2. Are there any skipped levels (h1 → h3)?
  3. Does every section have a heading?
  1. Open the links list — do link texts make sense out of context?
  2. Are there any “click here” or “read more” links?
  3. Do links that open in a new window indicate this?

Forms

  1. Tab through all form fields — is each one announced with its label?
  2. Are required fields announced as required?
  3. When validation fails, is the error announced?
  4. Is the error associated with its field?

Dynamic content

  1. When content updates (notifications, live feeds), is it announced?
  2. Are loading states announced?
  3. After navigation, does focus move to the new content?

Setting up a testing environment

NVDA Speech Viewer

NVDA includes a Speech Viewer that displays everything it announces in a text window. Enable it from the NVDA menu → Tools → Speech viewer. This is invaluable for sighted developers testing screen reader output.

Browser DevTools Accessibility Panel

All major browsers have an accessibility tree inspector :

  • Chrome: DevTools → Elements → Accessibility pane
  • Firefox: DevTools → Accessibility tab
  • Safari: Web Inspector → Audit tab

Resources

If you found this helpful, share it with someone who's building for the web.

- Vinay Ranjan