Screen Reader Testing

Purpose

Screen reader testing is essential for verifying that content and interactions are accessible to users who rely on assistive technology. Automated checks catch ~30% of issues — screen reader testing catches the rest.

Screen Readers

Screen ReaderPlatformBrowserNotes
VoiceOvermacOS, iOSSafariBuilt into Apple devices.
NVDAWindowsFirefoxFree, most common on Windows.
JAWSWindowsChrome, EdgePaid, widely used in enterprise.
TalkBackAndroidChromeBuilt into Android devices.
ChromeVoxChromeOSChromeBuilt into Chromebooks.

Testing Workflow

Step 1: Navigate by Headings

  1. Open the page and navigate by headings only.
  2. Is the heading hierarchy logical?
  3. Can you understand the page structure from headings alone?
  4. Are there any missing or misleading headings?

Step 2: Navigate by Landmarks

  1. Navigate by landmark regions.
  2. Are all major sections identified as landmarks?
  3. Is the navigation order logical?
  1. Navigate by links only.
  2. Is every link description meaningful out of context?
  3. Are there empty or duplicate links?
  4. Are there "click here" or "read more" links?

Step 4: Interactive Elements

  1. Tab through all interactive elements.
  2. Is each element announced correctly (role, name, state)?
  3. Can you operate all functionality?
  4. Are custom widgets announced correctly?

Step 5: Forms

  1. Navigate to each form control.
  2. Is the label announced correctly?
  3. Are required fields indicated?
  4. Submit with errors — are errors announced?
  5. Is the success message announced?

Step 6: Dynamic Content

  1. Trigger dynamic content updates.
  2. Is new content announced (via aria-live or role"alert"=)?
  3. Does focus move correctly after dynamic updates?

Common Issues Found by Screen Reader Testing

IssueHow to Detect
Missing or incorrect labelsTab to input, no label announced.
Unlabelled buttonsNavigate buttons, hear "button" only.
Missing heading structureNavigate headings, no structure.
No landmark regionsNavigate landmarks, none found.
Unannounced dynamic contentTrigger update, no announcement.
Focus not managedOpen dialog, focus not inside.
Keyboard trapTab into widget, cannot tab out.

Checklist

Related Documents