guides
Screenreaders testen: NVDA, JAWS & VoiceOver
Een praktische gids voor testen met NVDA, JAWS, VoiceOver en TalkBack — waarom meerdere readers belangrijk zijn, wat te testen en valkuilen.
Een pagina kan door elke geautomatiseerde controle komen, met geldige HTML worden opgeleverd en toch onbruikbaar zijn voor iemand die het web op het gehoor navigeert. Geautomatiseerde tools vangen ongeveer een derde van de toegankelijkheidsproblemen af; de rest leeft in de kloof tussen wat de toegankelijkheidsboom technisch bevat en wat een screenreader daadwerkelijk aan een gebruiker meldt. Die kloof dichten betekent dat je je interface voorlegt aan dezelfde tools waarop je publiek vertrouwt — en daar dient het testen met screenreaders voor.
Deze gids behandelt hoe de grote screenreaders van elkaar verschillen, waarom het testen van één ervan nooit genoeg is, wat je precies moet testen, welke reader- en browsercombinaties je moet gebruiken en de valkuilen waar zelfs ervaren teams in trappen. Hij is geschreven voor ontwikkelaars, QA-engineers en toegankelijkheidsspecialisten die bewust willen testen in plaats van gokken. Wil je het werk liever overlaten aan specialisten die deze tools dagelijks gebruiken, dan doet onze screenreader-evaluatiedienst precies dat.
Waarom een screenreader geen “voorleestool” is
Het meest voorkomende misverstand is dat een screenreader simpelweg de tekst op de pagina uitspreekt. Hij doet veel meer dan dat, en het begrijpen van dat verschil is de basis van goed testen. Een screenreader bouwt een parallel, niet-visueel model van de interface op uit de toegankelijkheidsboom van de browser. Hij meldt de naam van elk element (“Verzenden, knop”), de rol ervan (knop, link, kop, selectievakje) en de status ervan (aangevinkt, uitgevouwen, uitgeschakeld, verplicht). Hij laat de gebruiker springen tussen koppen, oriëntatiepunten, formuliervelden en links zonder de visuele opmaak aan te raken. Hij spreekt dynamische wijzigingen uit — foutmeldingen, zoekresultaten, statusupdates — wanneer die wijzigingen correct worden blootgesteld.
Dat verschilt fundamenteel van tekst-naar-spraak, dat een tekstblok omzet in audio zonder enig begrip van rollen, statussen of navigatie. We behandelen het onderscheid uitgebreid in tekst-naar-spraak versus screenreaders, en het is hier van belang omdat testen voor het ene niet test voor het andere. Een screenreadergebruiker neemt je pagina niet van boven naar beneden tot zich; hij navigeert er structureel doorheen en verwacht dat elk interactief element aangeeft wat het is en wat het doet.
Hoe NVDA, JAWS, VoiceOver en TalkBack verschillen
De vier readers waar de meeste teams om moeten geven, gedragen zich verschillend genoeg dat “het werkt in de ene” je vrijwel niets vertelt over de andere.
NVDA (Windows)
NVDA is een gratis, opensource reader en de meest gebruikte screenreader ter wereld. Hij combineert het meest natuurlijk met Firefox en Chrome. NVDA volgt de ARIA- en HTML-semantiek doorgaans nauwgezet, wat hem tot een uitstekende basislijn maakt: als er iets mis is in je markup, brengt NVDA dat vaak duidelijk aan het licht. Hij heeft twee belangrijke modi — bladermodus (voor lezen en structurele navigatie) en focusmodus (voor typen in formulieren en het bedienen van widgets) — en een veelvoorkomende bron van bugs zijn widgets die niet de juiste moduswisseling activeren.
JAWS (Windows)
JAWS is de allang gevestigde commerciële reader, nog steeds dominant in het bedrijfsleven, de overheid en veel werkplekken. Hij combineert met Chrome en Edge. JAWS staat bekend als “behulpzaam”: hij past heuristieken toe die de betekenis raden, meldt soms dingen waar NVDA over zwijgt en glad strijkt soms markupfouten die eigenlijk hersteld zouden moeten worden. Die behulpzaamheid snijdt aan twee kanten — code die “werkt in JAWS” kan falen in NVDA of VoiceOver omdat JAWS het probleem heeft verbloemd. Hij heeft ook een eigen virtuele cursor en formuliermodusgedrag dat subtiel verschilt van dat van NVDA.
VoiceOver (macOS en iOS)
VoiceOver zit ingebouwd in elke Mac, iPhone en iPad, en combineert vrijwel uitsluitend met Safari. Op macOS verloopt navigatie via de rotor en VO-toetscombinaties; op iOS is het volledig gebaargestuurd — vegen om te bewegen, dubbeltikken om te activeren, de rotor door twee vingers te draaien. VoiceOver is over het algemeen het strengst van de vier wat ARIA betreft: hij valt vaak stil in plaats van te raden wanneer namen of rollen ontbreken, dus een besturingselement dat JAWS meldt, zegt in VoiceOver misschien helemaal niets. Desktop- en mobiele VoiceOver verschillen ook van elkaar, dus ze tellen als twee aparte testdoelen.
TalkBack (Android)
TalkBack is de ingebouwde Android-reader, gecombineerd met Chrome. Net als iOS VoiceOver is hij gebaargebaseerd, maar zijn gebaren, focusgedrag en de afhandeling van live-regio’s en aangepaste besturingselementen verschillen van die van VoiceOver. Mobiele readers brengen in het algemeen problemen aan het licht die nooit op desktop verschijnen: aanraakdoelen die niet via vegen bereikbaar zijn, focus die onverwacht springt na een schermovergang, en content die visueel aanwezig is maar volledig wordt overgeslagen door de lineaire gebaarvolgorde.
Waarom testen met meerdere readers essentieel is
Omdat deze readers uiteenlopen in hoe ze precies dezelfde markup interpreteren, geeft testen met één reader een vals gevoel van veiligheid. Een paar concrete patronen duiken keer op keer op:
- Een aangepaste combobox die JAWS perfect meldt, kan in VoiceOver volledig stilvallen omdat VoiceOver weigert een ontbrekende
roleofaria-expanded-status af te leiden. - Een live-regio die NVDA beleefd één keer meldt, kan in een andere reader herhaaldelijk worden gemeld, of helemaal niet, afhankelijk van hoe
aria-liveen de timing van DOM-invoeging op elkaar inwerken. - Een besturingselement met een overbodige of conflicterende naam (zichtbaar label plus
aria-labelplustitle) kan door de ene reader zinvol worden gemeld en door een andere als een verwarrende reeks duplicaten. - Leesvolgorde die in de ene browser/reader-combinatie overeenkomt met de visuele volgorde, kan in een andere afwijken wanneer CSS content herordent maar de DOM niet.
Elke reader is ook gekoppeld aan een andere browser, dus je test eigenlijk reader-plus-browser-combinaties, niet readers alleen. De enige manier om te weten dat je product voor iedereen samenhangend is, is door de echte combinaties te testen die je publiek gebruikt. Dat principe ligt ook ten grondslag aan handmatige toegankelijkheidsaudits in het algemeen: tools versmallen de zoektocht, mensen bevestigen de ervaring.
Wat je moet testen
Testen is veel effectiever als het gestructureerd is. Dit zijn de dimensies die ertoe doen, ruwweg op volgorde van prioriteit, en elk sluit aan op specifieke succescriteria van WCAG 2.2.
Meldingen: naam, rol, waarde
Bevestig voor elk interactief element dat de reader een accurate naam meldt (wat het is), de juiste rol (knop, link, selectievakje, tabblad) en waar relevant de waarde of status. Dit is de kern van WCAG 4.1.2 (Naam, rol, waarde). Luister specifiek naar: stille besturingselementen, besturingselementen die alleen als “klikbaar” of “groep” worden gemeld, pictogramknoppen zonder toegankelijke naam, en namen die als ruwe bestandspaden of klassenamen worden voorgelezen.
Rollen en statussen
Statussen moeten bijwerken naarmate de gebruiker interageert. Een uitklapelement dat uitvouwt, moet omschakelen van “ingeklapt” naar “uitgevouwen”; een selectievakje moet van “niet aangevinkt” naar “aangevinkt” gaan; een sorteerknop moet de huidige richting melden. Statische markup die nooit aria-expanded, aria-checked, aria-selected of aria-pressed bijwerkt, is een van de meest voorkomende defecten, en het komt alleen aan het licht wanneer je de widget bedient met een actieve reader.
Focusvolgorde en focusbeheer
Doorloop de hele interface met Tab. De focus moet bewegen in een logische, voorspelbare volgorde (WCAG 2.4.3), moet altijd zichtbaar zijn en mag nooit vastzitten, behalve bewust binnen een modaal venster. De lastige gevallen zijn dynamisch: wanneer een dialoogvenster opent, moet de focus erin verplaatsen; wanneer het sluit, moet de focus terugkeren naar het element dat het opende. Dit overslaan is de meest voorkomende reden dat een modale flow onbruikbaar is.
Lees- en navigatievolgorde
Naast focus navigeren screenreadergebruikers via structuur. Controleer dat koppen een logische opbouw vormen (WCAG 1.3.1), dat oriëntatiepunten (header, nav, main, footer) gebruikers laten rondspringen, en dat lijsten en tabellen zo zijn opgemaakt dat de reader ze kan navigeren en tellen. Controleer dat de leesvolgorde overeenkomt met de visuele bedoeling en dat niets belangrijks in de verkeerde volgorde wordt gemeld.
Live-regio’s en dynamische updates
Asynchrone wijzigingen — validatiefouten, “3 resultaten gevonden”, “opslaan…”, toastmeldingen — moeten de gebruiker bereiken zonder hem te overweldigen. aria-live="polite" voor niet-urgente updates, aria-live="assertive" alleen voor werkelijk urgente, en role="status" of role="alert" voor de gangbare gevallen. Test dat de regio in de DOM bestaat voordat de content verandert, dat de update precies één keer wordt gemeld, en dat hij de gebruiker niet midden in een zin onderbreekt. Dit ondersteunt WCAG 4.1.3 (Statusberichten).
Aangepaste ARIA-widgets
Alles wat je zelf hebt gebouwd — menu’s, tabbladen, comboboxen, datumkiezers, carrousels, datarasters, boomstructuren — heeft de meeste aandacht nodig. Test tegen de ARIA Authoring Practices op verwachte toetsenbordinteractie en meldingen, en bevestig vervolgens dat echte readers zich ook zo gedragen. De APG beschrijft het ideaal; readers implementeren het onvolmaakt, en daarom moet een werkend patroon toch in elke reader worden geverifieerd.
Een concreet voorbeeld: een ontoegankelijke versus toegankelijke schakelaar
Neem een instellingsschakelaar. Een visueel vormgegeven maar semantisch lege versie:
<div class="toggle" onclick="setNotifications()">
<span class="dot"></span> Notifications
</div>
Voor een screenreader is dit op zijn best een stuk statische tekst. Er is geen rol, dus het wordt niet als besturingselement gemeld; geen status, dus de gebruiker kan niet zien of meldingen aan of uit staan; en het zit niet in de tabvolgorde, dus een toetsenbord- of screenreadergebruiker kan het helemaal niet bereiken of bedienen. Bij het testen leest NVDA “Notifications” voor en gaat verder; VoiceOver slaat het mogelijk volledig over.
Het toegankelijke equivalent gebruikt het native element en stelt de status bloot:
<button type="button" aria-pressed="false" id="notif">
Notifications
</button>
const btn = document.getElementById('notif');
btn.addEventListener('click', () => {
const on = btn.getAttribute('aria-pressed') === 'true';
btn.setAttribute('aria-pressed', String(!on));
});
Nu meldt elke reader “Notifications, schakelknop, niet ingedrukt”, is het bereikbaar met Tab, bedienbaar met Enter of Spatie, en schakelt de status hoorbaar om bij activering. De les is algemeen toepasbaar: geef de voorkeur aan native semantiek, en wanneer je ARIA moet gebruiken, test dan dat elke reader de rol en status daadwerkelijk respecteert. Patronen zoals dit defect met ontbrekende status behoren tot de veelvoorkomende toegankelijkheidsproblemen die je moet vermijden.
Aanbevolen reader- en browsercombinaties
Test de combinaties die echte gebruikers draaien, niet willekeurige paren. Een praktische matrix die de grote meerderheid van screenreadergebruikers dekt:
- NVDA + Firefox (Windows) — de schoonste basislijn om markupproblemen op te sporen
- NVDA + Chrome (Windows) — de meest voorkomende gratis-readercombinatie in de praktijk
- JAWS + Chrome (Windows) — dominant in zakelijke en overheidsomgevingen
- VoiceOver + Safari (macOS) — de enige volledig ondersteunde desktop-VoiceOver-combinatie
- VoiceOver + Safari (iOS) — gebaargebaseerd mobiel, een apart doel van desktop
- TalkBack + Chrome (Android) — de standaard Android-combinatie
Combinaties doen ertoe omdat readers zijn afgestemd op specifieke browsers; VoiceOver met Chrome of JAWS met Firefox levert gedrag op dat niet weerspiegelt hoe je publiek de pagina daadwerkelijk ervaart. Wanneer je analytics een bepaald publiek laten zien — bijvoorbeeld een product voor de publieke sector met veel JAWS-gebruik, of een consumenten-app die naar mobiel neigt — weeg de matrix dan dienovereenkomstig. Onze screenreader-evaluatiedienst stemt deze matrix af op de analytics van elke klant in plaats van een vaste lijst te testen.
Veelvoorkomende valkuilen
Zelfs zorgvuldige teams struikelen over dezelfde dingen. Let op deze:
- Testen met je ogen open. Als je het scherm kunt zien, compenseer je onbewust voor wat de reader je niet vertelt. Zet het scherm uit, of kijk er in elk geval weg, en navigeer alleen op het gehoor.
- Slechts één reader testen. Hierboven besproken — het is de allergrootste bron van vals vertrouwen.
- De formulier-/focusmodus overslaan. In NVDA en JAWS hebben aangepaste widgets vaak nodig dat de gebruiker in de juiste modus zit. Als je alleen in bladermodus test, mis je interacties die in focusmodus stuklopen.
aria-labelovermatig gebruiken. Overal ARIA-labels toevoegen kan zichtbare tekst overschrijven, de toegankelijke naam losmaken van wat wordt getoond, en spraakbesturingsgebruikers in de war brengen. Geef de voorkeur aan native labeling; grijp alleen naar ARIA wanneer HTML de relatie niet kan uitdrukken.- Aannemen dat de APG succes garandeert. De ARIA Authoring Practices beschrijven het bedoelde gedrag, niet wat elke reader doet. Verifieer altijd tegen echte readers.
- Overlay-widgets vertrouwen. Overlay- en “AI-toegankelijkheids”-widgets die beweren screenreadertoegang tijdens runtime te repareren, leveren geen betrouwbare ervaring en maken navigatie vaak juist slechter voor de mensen die ze zeggen te helpen. Er is geen vervanging voor toegankelijke markup die door echt testen is bevestigd. Audit de daadwerkelijke DOM en meldingen, niet de marketing van de overlay.
- Mobiel als bijzaak behandelen. iOS VoiceOver en Android TalkBack brengen hun eigen gebaar-, focus- en live-regioproblemen aan het licht die desktoptesten nooit onthult.
Waarom testen door mensen met een beperking waarde toevoegt
Zelf een reader draaien vangt veel af — maar er is een wezenlijk verschil tussen technisch slagen en werkelijk bruikbaar zijn, en dat verschil is precies waar ervaringsdeskundigheid het meeste uitmaakt. Een dagelijkse screenreadergebruiker navigeert per reflex: hij beweegt per kop, scant met de rotor, herkent wanneer een melding langdradig of overbodig is, en voelt onmiddellijk wanneer een flow hem een inefficiënt pad opdwingt, ook al is elk afzonderlijk element “conform”.
Een ziende ontwikkelaar die voor het eerst test, neigt ernaar aanwezigheid te verifiëren — “de knop wordt gemeld” — terwijl een expertgebruiker de ervaring evalueert — “de knop wordt gemeld, maar het label is dubbelzinnig, de bevestiging wordt niet uitgesproken, en hier komen kostte twaalf extra veegbewegingen”. Die bruikbaarheidsbevindingen komen zelden voor in een conformiteitschecklist, en toch bepalen ze precies of iemand een taak daadwerkelijk kan voltooien. Daarom combineert QualiBooth geautomatiseerde toegankelijkheidsscansoftware en onze toegankelijkheidstoolkit met audits door mensen met een beperking: de tools vinden het voor de hand liggende, de experts vinden wat de ervaring werkelijk breekt. Voor producten die vaak veranderen, zorgen terugkerende toegankelijkheidsaudits ervoor dat die dekking niet wegdrijft tussen releases.
Waar het testen met screenreaders in je programma past
Het testen met screenreaders is één discipline binnen een bredere praktijk. Het sluit van nature aan op alleen-toetsenbordtesten en op de adaptieve webtools waarop je gebruikers vertrouwen, en het levert het soort bewijs op dat juridische verplichtingen ondersteunt onder de EAA, de ADA en Section 508. De bevindingen voeden ook rechtstreeks de documentatie: ons team vertaalt reader-voor-reader-resultaten naar VPAT-rapporten en naar de geprioriteerde herstelplannen die we leveren via toegankelijkheidsadvies. Als je een langetermijnprogramma bouwt in plaats van een eenmalige controle, is die integratie wat voorkomt dat toegankelijkheid terugloopt.
Conclusie
Screenreaders zijn niet uitwisselbaar, en een schoon geautomatiseerd rapport is geen bruikbaar product. NVDA, JAWS, VoiceOver en TalkBack interpreteren je markup elk anders, combineren met verschillende browsers en onthullen verschillende defecten — dus testen over de echte combinaties die je publiek gebruikt, is de enige manier om zeker te zijn. Structureer je testen rond meldingen, rollen en statussen, focus, leesvolgorde, live-regio’s en aangepaste widgets; geef de voorkeur aan native semantiek boven ARIA-lapmiddelen; negeer overlays; en laat waar mogelijk de mensen die deze tools dagelijks gebruiken je vertellen wat werkelijk werkt.
Wanneer je die zekerheid door specialisten geverifieerd wilt zien, test QualiBooth’s screenreader-evaluatie over alle grote readers en levert je bevindingen terug met exacte markupoplossingen. Je kunt ook beginnen met een gratis scan of een demo aanvragen om te zien waar je interface vandaag staat.
Veelgestelde vragen
Hoeveel screenreaders moet ik echt testen?
Test minimaal NVDA, JAWS en VoiceOver op desktop, plus VoiceOver op iOS en TalkBack op Android als je een mobiele ervaring uitlevert. Minder testen laat blinde vlekken achter, omdat de readers uiteenlopen in hoe ze ARIA en dynamische content afhandelen.
Kunnen geautomatiseerde tools het testen met screenreaders vervangen?
Nee. Geautomatiseerde tools vangen betrouwbaar slechts een deel van de problemen af — ontbrekende alt-tekst, sommige contrastproblemen, bepaalde structurele fouten — maar ze kunnen niet beoordelen of een melding duidelijk is, of de focus zinvol beweegt, of een taak daadwerkelijk alleen op het gehoor te voltooien is. Daarvoor is een echte reader nodig en, idealiter, een echte gebruiker.
Maken overlay- of “AI-toegankelijkheids”-widgets het testen overbodig?
Nee. Overlays produceren geen betrouwbare screenreaderervaring en introduceren vaak nieuwe problemen. De duurzame oplossing is toegankelijke markup die door echt readertesten is bevestigd, en dat is wat onze screenreader-evaluatiedienst biedt.
Welke WCAG-criteria dekt het testen met screenreaders?
Het ondersteunt rechtstreeks 1.3.1 (Info en relaties), 2.4.3 (Focusvolgorde), 4.1.2 (Naam, rol, waarde) en 4.1.3 (Statusberichten), onder andere. Elke bevinding uit een gestructureerde evaluatie kan worden gekoppeld aan het relevante succescriterium van WCAG 2.2.
Weet je niet zeker hoe je product klinkt op een echte screenreader?