Screen reader test script
Automated checks prove the dashboard says what the spec says. Only a person with a real screen reader can tell whether that is pleasant and clear to hear. This is the script for that test: what to do, what you should hear, and the results so far.
The expected speech on this page is computed from the spec, not written by hand. On every commit, both builds are checked against it in Chromium, Firefox and WebKit, in all three languages, timing included.
How to run it
- Open a scenario link below and turn on your screen reader.
- Move to the dashboard heading, then do each step without moving focus yourself.
- Listen for the same words in the same order. Screen readers add roles and states, such as “heading level 2”; that is expected.
- “Polite” messages wait until the screen reader finishes what it is saying. “Assertive” messages interrupt it.
- Record what you heard with the result form, including when everything passed.
Setups to cover
- NVDA with Firefox on Windows
- VoiceOver with Safari on macOS
- VoiceOver with Safari on iPhone
- TalkBack with Chrome on Android
The script
Loaded
A normal, fast response with full access.
Open in:ReactFramework-free TypeScript
Playwright test:React (.spec.ts)Framework-free TypeScript (.spec.ts)
Step 1 Open the link and wait.
You should hear:
Nothing. Silence is correct here.
Step 2 Press “Replay request” in the lab controls.
You should hear:
- after 450 mspolite
Loading dashboard data.
- after 850 mspolite
Dashboard updated: All plans.
- after 450 mspolite
Loading
A two-second response: long enough to notice, short enough to wait.
Open in:ReactFramework-free TypeScript
Playwright test:React (.spec.ts)Framework-free TypeScript (.spec.ts)
Step 1 Open the link and wait.
You should hear:
Nothing. Silence is correct here.
Step 2 Press “Replay request” in the lab controls.
You should hear:
- after 450 mspolite
Loading dashboard data.
- after 2,150 mspolite
Dashboard updated: All plans.
- after 450 mspolite
Slow response
Twelve seconds. The interface escalates instead of spinning forever.
Open in:ReactFramework-free TypeScript
Playwright test:React (.spec.ts)Framework-free TypeScript (.spec.ts)
Step 1 Open the link and wait.
You should hear:
- after 3,150 mspolite
This is taking longer than usual.
- after 8,150 mspolite
Still waiting for the server. You can keep waiting or cancel this request.
- after 3,150 mspolite
Step 2 Press “Replay request” in the lab controls.
You should hear:
- after 450 mspolite
Loading dashboard data.
- after 3,150 mspolite
This is taking longer than usual.
- after 8,150 mspolite
Still waiting for the server. You can keep waiting or cancel this request.
- after 450 mspolite
Step 3 When “Cancel request” appears, press it.
You should hear:
- after 0 msFocus moves to button “Load again”.
- after 150 mspolite
Request cancelled.
Empty results
The request succeeds but nothing matches the filter.
Open in:ReactFramework-free TypeScript
Playwright test:React (.spec.ts)Framework-free TypeScript (.spec.ts)
Step 1 Open the link and wait.
You should hear:
- after 850 mspolite
No results for Legacy.
- after 850 mspolite
Step 2 Press “Show all plans”.
You should hear:
- after 450 mspolite
Loading dashboard data.
- after 700 msFocus moves to heading “Revenue overview”.
- after 850 mspolite
Dashboard updated: All plans.
- after 450 mspolite
Error with retry
The first request fails with a 503. Retrying recovers.
Open in:ReactFramework-free TypeScript
Playwright test:React (.spec.ts)Framework-free TypeScript (.spec.ts)
Step 1 Open the link and wait.
You should hear:
- after 1,350 mspolite
The dashboard failed to load. Try again is available.
- after 1,350 mspolite
Step 2 Press “Try again”.
You should hear:
- after 1,200 msFocus moves to heading “Revenue overview”.
- after 1,350 mspolite
Dashboard updated: All plans.
Restricted access
The visitor has no access to this dashboard.
Open in:ReactFramework-free TypeScript
Playwright test:React (.spec.ts)Framework-free TypeScript (.spec.ts)
Step 1 Open the link and wait.
You should hear:
Nothing. Silence is correct here.
Step 2 Press “Replay request” in the lab controls.
You should hear:
- after 450 mspolite
Loading dashboard data.
- after 850 mspolite
You don’t have access to this dashboard.
- after 450 mspolite
Results so far
Nobody has run the script with a real screen reader yet. Runs are welcome at any time through the form below.
| Setup | Loaded | Loading | Slow response | Empty results | Error with retry | Restricted access |
|---|---|---|---|---|---|---|
| NVDA with Firefox on Windows | Not tested yet | Not tested yet | Not tested yet | Not tested yet | Not tested yet | Not tested yet |
| VoiceOver with Safari on macOS | Not tested yet | Not tested yet | Not tested yet | Not tested yet | Not tested yet | Not tested yet |
| VoiceOver with Safari on iPhone | Not tested yet | Not tested yet | Not tested yet | Not tested yet | Not tested yet | Not tested yet |
| TalkBack with Chrome on Android | Not tested yet | Not tested yet | Not tested yet | Not tested yet | Not tested yet | Not tested yet |
Spanish and Arabic review
The Spanish and Arabic text was drafted by the author. A native-speaker review is skipped for now because no reviewer is available, so both stay marked as unreviewed. If something reads wrong, suggest better wording; every accepted suggestion is credited.