Screen reader testing guide
How to start and stop the three major screen readers, their essential commands, and the browse-mode/focus-mode model that trips up most first-time testers.
Last verified against WCAG 2.2 and WAI-ARIA APG 1.2 on 2026-07-02.
Browse mode vs. focus mode
Browse mode (NVDA/JAWS on Windows; the default reading mode) lets you navigate a page like a document — by heading, link, landmark, or single character — using letter-key shortcuts instead of Tab. It's how a screen reader user explores static content.
Focus mode (sometimes called "forms mode" or "application mode") switches keystrokes over to the widget itself — typing "h" inside a text field should type the letter H, not jump to a heading. Windows screen readers switch into focus mode automatically when you Tab into a form field or a composite ARIA widget (combobox, menu, slider), and back to browse mode when you leave it.
Why this matters for testing: if your custom widget doesn't trigger the automatic mode-switch correctly (usually because required ARIA roles are missing), letter-key shortcuts will "leak through" and do the wrong thing — this is one of the most common defects found in hand-rolled components. VoiceOver on macOS doesn't have this same browse/focus split; it uses the rotor and Tab/VO-arrow navigation more uniformly.
Starting, stopping, and essential commands
NVDA + Firefox
Windows (free)
- Start
- Ctrl+Alt+N, or launch from the desktop/Start Menu shortcut.
- Stop
- Insert+Q, or Ctrl+Alt+N again to toggle.
| Command | Action |
|---|---|
| Insert+Down Arrow | Start reading continuously from the current position. |
| Tab / Shift+Tab | Move focus forward/backward (focus mode). |
| H / Shift+H | Jump to next/previous heading (browse mode). |
| K / Shift+K | Jump to next/previous link (browse mode). |
| F / Shift+F | Jump to next/previous form field (browse mode). |
| Insert+F7 | Open the elements list (links, headings, landmarks). |
| Insert+Space | Toggle between browse mode and focus mode. |
JAWS + Chrome
Windows (commercial)
- Start
- Launch from the desktop shortcut or Start Menu; JAWS starts speaking on load.
- Stop
- Insert+F4, or exit from the JAWS system tray icon.
| Command | Action |
|---|---|
| Insert+Down Arrow | Say All — read continuously from the current position. |
| Tab / Shift+Tab | Move focus forward/backward. |
| H / Shift+H | Jump to next/previous heading. |
| Insert+F6 | Open the headings list. |
| Insert+F5 | Open the form fields list. |
| Insert+F7 | Open the links list. |
| Insert+Z | Toggle virtual PC cursor (browse mode) on/off. |
VoiceOver + Safari
macOS (built in)
- Start
- Cmd+F5, or triple-click the Touch ID / side button on supported Macs.
- Stop
- Cmd+F5 again.
| Command | Action |
|---|---|
| VO (Ctrl+Option) + Right/Left Arrow | Move to the next/previous item in the rotor's linear order. |
| Tab / Shift+Tab | Move focus forward/backward between interactive elements only. |
| VO+U | Open the rotor (headings, links, landmarks, form controls). |
| VO+Space | Activate the current item. |
| VO+A | Read all, starting from the current position. |
| VO+Cmd+H | Jump to next heading (with rotor set to Headings). |
Testing tips
- Test with your monitor off, or your eyes closed, at least once per component — it forces you to rely entirely on the announcement, the way a blind user does.
- Always test in the screen reader's most commonly paired browser (NVDA+Firefox, JAWS+Chrome, VoiceOver+Safari) — behavior can differ meaningfully across browser pairings.
- Slow the speech rate down while learning — it's much easier to catch a missing or wrong announcement at a pace you can actually follow.
- Re-test after every fix. ARIA defects are easy to partially fix and leave a related state (e.g. aria-expanded) out of sync.