ARIA is a complicated topic, but it’s easy to make it simpler: use a bunch of screen readers, see what works (and what feels usable), and then fix bugs.
Test on popular screen readers with the WebAIM survey
It’s just like testing your web site in various browsers. Focus testing on the most popular browsers and on the buggiest browsers in common usage.
Here’s the major industry survey of screen reader users, from WebAIM.
https://webaim.org/projects/screenreadersurvey10/
Now, you’ve gotta read this survey carefully, because it first talks about desktop browsers, and has a chart “Primary Screen Reader” https://webaim.org/projects/screenreadersurvey10/#primary but it’s specifically referring to primary “desktop/laptop” screen reader.
That chart indicates that “VoiceOver” isn’t very popular, but it’s referring to macOS VoiceOver in that section. (If you scroll down to the “Operating Systems” section, you’ll see that macOS itself isn’t very popular among screen reader users.)
JAWS for Windows is the leading screen reader, followed by NVDA for Windows as a close runner up. macOS VoiceOver is a distant third.
Note that JAWS costs money (and its licensing scheme is onerous), and NVDA is free. But also, NVDA tends to be buggier than JAWS; IME, anything that works in NVDA also works in JAWS.
Later, it talks about “Mobile Screen Readers Used” WebAIM: Screen Reader User Survey #10 Results
That chart shows that the OS builtin screen readers dominate, with iOS VoiceOver (70.6%) and Android TalkBack (34.7%). (These add up to more than 100% because some people use both.)
The survey also includes a “Mobile vs. Desktop Usage” chart, which shows that 10% use more mobile than desktop, 40% use more deskop than mobile, and the other 50% use the both the same. That doesn’t line up with my experience with users reporting bugs.
In my experience, the vast majority of bug reports I hear from screen reader users are from iOS users and NVDA users.
So, therefore, I recommend testing in this priority order:
- iOS Safari VoiceOver. I recommend mobile over desktop (because, I claim without data, that mobile is significantly more popular among visually impaired users) and iOS over Android, because iOS is overwhelmingly more popular than Android among visually impaired users.
- Windows NVDA on Chrome. NVDA is not quite as popular as JAWS, but it’s buggier. Anything that works in NVDA will also work on JAWS, but not necessarily vice versa.
- Windows JAWS on Chrome.
- Android TalkBack on Chrome.
- macOS VoiceOver on Safari.
But I think you’ll find that just testing in iOS Safari VoiceOver gets excellent bang for your buck. I normally test iOS Safari only, and then Windows NVDA on Chrome when I want to be very thorough, and then I typically stop.
It’s been at least five years since I’ve seen a user report a bug that occurs in Windows JAWS but not Windows NVDA. I think I’ve never seen a user report a bug on Android TalkBack at all.
Avoiding screen reader bugs
You’ll probably just pick this up yourself as you find and fix bugs, but:
-
Screen readers work best when they can understand what your HTML means. If you can adopt a specific HTML element that captures your meaning, use it, instead of just trying to use <div>
and <span>
elements with CSS.
-
Screen readers are like a text adventure; you are in a particular place on the page, where the screen reader is focused. When changes occur elsewhere on the page (in the status bar, for example), it’s complicated and confusing to have the screen reader announce those changes. You either have to focus the status bar (but, then, how do you get back to where you were?) or you have to announce the live updates elsewhere on the page without moving focus, which is, itself, confusing. Therefore, highly accessible UIs tend to be very simple. If you can live without having a status bar, do that.
-
IF UI is particularly perplexing for many screen readers, because the player is intended to focus on some text input, type something there, and then have what they typed appear in the scrollable transcript. In the past, I’ve described IF UI as if you were running a D&D game, where the Dungeon Master would write on the page, then hand the page over to the player, who would write what they want to do, then hand the page back to the DM to write what happens next.
In ChoiceScript, we clear the screen after every action, with no scrollback, as if you’d navigated to a new page. We set the focus at the top of the new page, so the screen reader immediately begins reading the text after making a choice.
I think you might consider doing something similar.