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 Reader | Platform | Browser | Notes |
|---|---|---|---|
| VoiceOver | macOS, iOS | Safari | Built into Apple devices. |
| NVDA | Windows | Firefox | Free, most common on Windows. |
| JAWS | Windows | Chrome, Edge | Paid, widely used in enterprise. |
| TalkBack | Android | Chrome | Built into Android devices. |
| ChromeVox | ChromeOS | Chrome | Built into Chromebooks. |
Testing Workflow
Step 1: Navigate by Headings
- Open the page and navigate by headings only.
- Is the heading hierarchy logical?
- Can you understand the page structure from headings alone?
- Are there any missing or misleading headings?
Step 2: Navigate by Landmarks
- Navigate by landmark regions.
- Are all major sections identified as landmarks?
- Is the navigation order logical?
Step 3: Navigate by Links
- Navigate by links only.
- Is every link description meaningful out of context?
- Are there empty or duplicate links?
- Are there "click here" or "read more" links?
Step 4: Interactive Elements
- Tab through all interactive elements.
- Is each element announced correctly (role, name, state)?
- Can you operate all functionality?
- Are custom widgets announced correctly?
Step 5: Forms
- Navigate to each form control.
- Is the label announced correctly?
- Are required fields indicated?
- Submit with errors — are errors announced?
- Is the success message announced?
Step 6: Dynamic Content
- Trigger dynamic content updates.
- Is new content announced (via
aria-liveorrole"alert"=)? - Does focus move correctly after dynamic updates?
Common Issues Found by Screen Reader Testing
| Issue | How to Detect |
|---|---|
| Missing or incorrect labels | Tab to input, no label announced. |
| Unlabelled buttons | Navigate buttons, hear "button" only. |
| Missing heading structure | Navigate headings, no structure. |
| No landmark regions | Navigate landmarks, none found. |
| Unannounced dynamic content | Trigger update, no announcement. |
| Focus not managed | Open dialog, focus not inside. |
| Keyboard trap | Tab into widget, cannot tab out. |
Checklist
- Navigate by headings — structure is logical.
- Navigate by landmarks — all regions identified.
- Navigate by links — all descriptions meaningful.
- Tab through all interactive elements — all operable.
- Forms have correct label announcements.
- Errors announced and associated with inputs.
- Dynamic content changes announced.
- Dialogs and modals manage focus correctly.
- No keyboard traps.
- Tested with at least two screen reader/browser combinations.