User agent reliability for JAWS Firefox Screen reader compatibility

Screen Readers
Dec 12, 2023

Shows how well JAWS Firefox supports ARIA and WCAG sufficient techniques.

Latest version tested

JAWS 2023.2311.34 with FF 115

  • All tests: 104 pass of 127 tests (82%)
  • ARIA tests: 38 pass of 47 tests (81%)
  • WCAG tests: 70 pass of 86 tests (81%)

Reliability trend

100%80%60%40%20%0%201472%201576%201677%201778%201872%201977%202080%202180%202280%202382%

Failing tests

 TestModeWhat the user hearsNotes
FailPage with xml:lang set on the html and p elementsReadingAct-if tay-bill. Ray-day-oh.Pronounced as English. Ignores xml:lang.
Failapplication/xhtml+xml page with mismatching lang and xml:lang on the html elementReadingGa-raj. Doo-ble. Damm. Un, zway, dray.Speech pronounced as lang=fr, but CSS matches :lang(de) and German CSS content pronounced as French.
Worseembed with title attributeReadingVideo start. Play button. Mute button. Video end.No description of non-text content
Worseembed with aria-label attributeReadingVideo start. Play button. Mute button. Video end.No description of non-text content
Worseembed with aria-labelledby attributeReadingVideo start. Play button. Mute button. Video end.No description of non-text content
Failaudio with aria-label attributeReading Nothing Nothing voiced for audio - no indication it exists
Failaudio with aria-labelledby attributeReading Nothing Nothing voiced for audio - no indication it exists
Failaudio with title attributeReading Nothing Nothing voiced for audio - no indication it exists
Worsevideo with aria-label attributeReading Nothing Nothing voiced for video - no indication it exists
Failvideo with aria-labelledby attributeReading Nothing Nothing voiced for video - no indication it exists
Worsevideo with title attributeReading Nothing Nothing voiced for video - no indication it exists
FailInteractive iframe with role=presentation and negative tabindex and no accessible nameTabbing Nothing Skips over focusable link in iframe
Failabbr with titleReadingT L NABBR expansion ignored using default JAWS settings, available to sighted users as dotted underline tooltip links in browser.
Failbutton containing img with aria-labelledbyReadingUnlabeled six buttonReads "unlabeled button" without saying what button does.
Failbutton containing img with aria-labelledbyTabbingUnlabeled six button, to activate press enterReads "unlabeled button" without saying what button does.
Failarea with title attributeReadingImage map link graphic, slash left underline arrow dot HTM. Image map link graphic, slash right underline arrow dot HTM.Reads out URL instead of title
Worsearea with title attributeTabbingThis is alt text graphic, slash left underline arrow dot HTM, image map link graphic. Slash right underline arrow dot HTM, image map link graphic.Reads out URL instead of link title
WorseData table with role=columnheader headers but no thReadingMorning, afternoon. Free, busy.Table treated as layout table - not announced as table, and no headers read.
WorseData table with td headers attributeReading Table with 7 columns and 3 rows. Homework (column 1, row 1, homework). Exams (column 2, row 1, exams). Projects (column 3, row 1, projects). One (column 1, row 2, homework, one). Two (column 2, row 2, exams, two). Final (column 3, row 2, projects, final). One (column 4, row 2, one). Two (column 5, row 2, two). Final (column 6, row 2, final). Fifteen percent (column 1, row 3, homework one, fifteen percent). Fifteen percent (column 2, row 3, exams two, fifteen percent). Fifteen percent (column 3, row 3, projects final, fifteen percent). Twenty percent (column 4, row 3, one, twenty percent). Ten percent (column 5, row 3, two, ten percent). Ten percent (column 6, row 3, final, ten percent). Fifteen percent (column 7, row 3, fifteen percent). Wrong headers (and no headers for some cells) read out when using table navigation commands.
FailPDF1 Image with alt textReading Nothing Image ignored - but Firefox accessibility inspector shows figure named 'this is alt text' in accessibility tree
FailPDF19 Phrase language set to GermanReadingRah-di-ohPronounced as French, using document language, phrase language ignored
FailPDF6 Table with header markupReadingTable with 2 columns and 2 rows. Morning (column 1). Afternoon (column 1). Free (morning afternoon, column 1). Busy (column 2).Incorrect cell headers voiced.
FailPDF6 Table with header markup and alt textReadingTable with 2 columns and 2 rows. Alt description for table. Morning (column 1). Afternoon (column 1). Free (morning afternoon, column 1). Busy (column 2).Incorrect cell headers voiced.

Passing tests

 TestModeWhat the user hearsNotes
PassPage with lang set on the html and p elementsReadingAct-eef tab-le. Rah-di-oh.Pronounced as French and German.  
Passtext/html page with mismatching lang and xml:lang on the html elementReadingGa-raj. Doo-ble. Damm. Un, deux, trois.Speech pronounced as lang=fr, and CSS matches :lang(fr).  
PassMatch lang subtagsReadingDam-he. Dam-he. Dam-he.All pronounced as German.  
PassARIA role=headingHeadingFirst level heading, heading level 1. Second level heading, heading level 2.  
PassHeading is img with altHeadingSecond level alt, heading level 2, graphic.  
Betterapplet with title attributeReadingTitle text for applet  
Betterapplet with fallback contentReadingFallback content for applet  
Betterapplet with aria-label attributeReadingAria label for applet  
Betterapplet with aria-labelledby attributeReadingThis is ARIA-LABELLEDBY text  
Betterapplet inside figure with figcaption elementReadingFigure caption for applet, figure. Figure caption for applet. Figure caption for applet, figure end.  
Betterembed inside figure with figcaptionReadingFigure caption for embed, figure. Video start. Play button. Mute button. Video end. Figure caption for embed. Figure caption for embed, figure end.  
Betterobject with fallback contentReadingFallback content for object  
Betterobject with title attributeReadingTitle for object.  
Betterobject with aria-label attributeReadingARIA label for object.  
Betterobject with aria-labelledby attributeReadingThis is ARIA-LABELLEDBY text.  
Passa element placeholder link with no event handler or href attributeReadingPlaceholder text  
Passa element placeholder link with no event handler or href attributeTabbing Nothing Skipped when tabbing, as expected  
Betteriframe with fallback contentReadingThis is an. Link example hyperlink. In the target page.Doesn't read out fallback content.  
Passiframe with fallback contentTabbingFrame, example target. Example hyperlink, link.Reads out title tag of frame source page.  
Passiframe with title attributeReadingThis is an. Link example hyperlink. In the target page.  
Betteriframe with title attributeTabbingThis is an IFRAME title frame, this is an IFRAME title. Example hyperlink, link.  
PassInteractive iframe with role=presentation and no accessible nameReadingThis is an. Link, example hyperlink. In the target page.role=presentation makes frame seamless  
PassInteractive iframe with role=presentation and no accessible nameTabbingFrame example target. Example hyperlink, link.  
PassInteractive iframe with role=presentation and negative tabindex and no accessible nameReadingThis is an. Link, example hyperlink. In the target page.role=presentation makes frame seamless  
PassInteractive iframe with role=presentation and title attributeReadingThis is an. Link, example hyperlink. In the target page.role=presentation makes frame seamless  
PassInteractive iframe with role=presentation and title attributeTabbingThis is frame title, frame, this is frame title. Example hyperlink, link.  
PassInteractive iframe with role=presentation and aria-label attributeReadingThis is an. Link, example hyperlink. In the target page.role=presentation makes frame seamless  
PassInteractive iframe with role=presentation and aria-label attributeTabbingThis is aria-label, frame, this is aria-label. Example hyperlink, link.  
Passbutton containing img with altReadingThis is image alt, button  
Passbutton containing img with altTabbingThis is image alt, button, to activate press enter  
Passbutton containing img with title attributeReadingThis is image title, button  
Passbutton containing img with title attributeTabbingThis is image title, button, to activate press enter  
Passbutton containing img with aria-labelReadingThis is image aria label, button  
Passbutton containing img with aria-labelTabbingThis is image aria label, button, to activate press enter  
Passbutton with title containing img with null altReadingThis is button title, button  
Passbutton with title containing img with null altTabbingThis is button title, button, to activate press enter  
Passbutton with aria-label containing img with null altReadingThis is button aria label, button  
Passbutton with aria-label containing img with null altTabbingThis is button aria label, button, to activate press enter  
Passinput type=image with altReadingThis is image button alt text, button  
Passinput type=image with altTabbingThis is image button alt text, button, to activate press enter  
Passinput type=image with title attributeReadingThis is image button title text, button  
Passinput type=image with title attributeTabbingThis is image button title text, button, to activate press enter  
Passinput type=image with aria-label attributeReadingThis is image button aria label text, button  
Passinput type=image with aria-label attributeTabbingThis is image button aria label text, button, to activate press enter  
Passinput type=image with aria-labelledby attributeReadingThis is image button aria labelled by text, button  
Passinput type=image with aria-labelledby attributeTabbingThis is image button aria labelled by text, button, to activate press enter  
Betterinput type=text with aria-describedby attributeReadingFirst name. First name. Blank, edit, first name edit. Blank, a bit of instructions for this field linked with aria describedby.  
Passinput type=text with aria-describedby attributeTabbingFirst name, edit, a bit of instructions for this field linked with aria describedby, type in text  
Passinput type=text with title attributeReadingEnter search text. Blank edit, enter search text edit.  
Passinput type=text with title attributeTabbingEnter search text, edit, type in text  
Passinput type=text with aria-label attributeReadingEnter search text. Blank edit, enter search text edit.  
Passinput type=text with aria-label attributeTabbingEnter search text, edit, type in text  
Passinput type=text with aria-labelledby attributeReadingEnter search text. Enter search text. Blank edit, enter search text edit.  
Passinput type=text with aria-labelledby attributeTabbingEnter search text, edit, type in text  
Passinput type=text with label forReadingEnter search text. Enter search text. Blank edit, enter search text edit.  
Passinput type=text with label forTabbingEnter search text, edit, type in text  
Passinput type=text inside label with text before controlReadingEnter search text. Blank, edit, enter search text, edit.  
Passinput type=text inside label with text before controlTabbingEnter search text, edit, type in text  
Passinput type=text inside label with text after controlReadingBlank, edit, enter search text, edit. Blank, enter search text.  
Passinput type=text inside label with text after controlTabbingEnter search text, edit, type in text  
Passinput type=text inside label with text before and after controlReadingEnter search text. Blank, edit, enter search text, blanks not allowed edit.  
Passinput type=text inside label with text before and after controlTabbingEnter search text, blanks not allowed, edit, type in text  
Passfieldset containing linksReadingGroup start, legend for enclosed links. Legend for enclosed links. Link home. Link about. Link contact. Group end, legend for enclosed links.  
Passfieldset containing linksTabbingLegend for enclosed links group, home link. About link. Contact link.  
PassYes/No radio buttons inside fieldset elementReadingGroup start, I agree to terms and conditions. I agree to terms and conditions. Yes, radio button checked, one of two. No, radio button not checked, two of two. Group end, I agree to terms and conditions. Group start, sign me up to the newsletter. Sign me up to the newsletter. Yes, radio button checked, one of two. No, radio button not checked, two of two. Group end, sign me up to the newsletter.  
BetterYes/No radio buttons inside fieldset elementTabbingI agree to terms and conditions group, yes, radio button checked, one of two. Sign me up to the newsletter group, yes, radio button checked, one of two.  
Passimg with null altReading Nothing Ignored as expected  
Passimg with altReadingThis is alt text, graphic  
Betterimg with figcaptionReadingViolet, taken on 12/11/2010, figure. Violet, taken on 12/11/2010. Violet, taken on 12/11/2010, figure end.  
Passimg with titleReadingThis is title text, graphic  
Passimg with aria-labelReadingThis is an aria label, graphic  
Passimg with aria-labelledbyReadingThis is an aria labelled by, graphic. This is an aria labelled by  
Betterarea and img with alt attributesReadingImage map link graphic, this is left alt text. Image map link graphic, this is right alt text.  
Betterarea and img with alt attributesTabbingThis is alt text graphic, this is left alt text, image map link graphic. This is right alt text, image map link graphic.  
Betterarea with alt attribute and img with null altReadingImage map link graphic, this is left alt text. Image map link graphic, this is right alt text.  
Passarea with alt attribute and img with null altTabbingGraphic, this is left alt text, image map link graphic. This is right alt text, image map link graphic.  
Betterarea with aria-label attributeReadingImage map link graphic, this is left aria label text. Image map link graphic, this is right aria label text.  
Betterarea with aria-label attributeTabbingThis is alt text, graphic, this is left aria label text, image map link graphic. This is right aria label text, image map link graphic.  
Betterarea with aria-labelledby attributeReadingImage map link graphic, this is left aria labelled by text. Image map link graphic, this is right aria labelled by text.  
Betterarea with aria-labelledby attributeTabbingThis is alt text graphic, this is left aria labelled by text, image map link graphic. This is right aria labelled by text, image map link graphic.  
PassLink containing img with altReadingLink graphic, this is a link alt  
PassLink containing img with altTabbingThis is a link alt, link graphic  
PassLink containing img with titleReadingLink graphic, this is an image title  
PassLink containing img with titleTabbingThis is an image title, link graphic  
PassClick Here link with title attributeReadingLink, click here  
BetterClick Here link with title attributeTabbingClick here, link, this is a link title  
BetterLink text replaced by aria-label attributeReadingLink, this is an aria label  
BetterLink text replaced by aria-label attributeTabbingThis is an aria label, link  
PassLink text replaced by aria-labelledby attributeReadingLink, this is an aria labelled by. This is an aria labelled by.  
PassLink text replaced by aria-labelledby attributeTabbingThis is an aria labelled by, link  
PassClick Here link with aria-describedby attributeReadingLink, click here. This is an aria described by.  
BetterClick Here link with aria-describedby attributeTabbingClick here, link, this is an aria described by.aria-describedby is read when tabbing  
PassLayout table with single cellReadingThis is some text.Treated as a layout table.  
PassLayout table with role=presentationReadingExample. Navigation. Links. Content.Table treated as layout table - not announced as table.  
BetterData table with role=gridReadingGrid with two columns and two rows. Morning (column one, row one, morning). Afternoon (column two, row one, morning, afternoon). Free (column one, row two, morning, free). Busy (column two, row two, afternoon, busy). Grid end.Reads cell headers when using table navigation commands.  
PassData table with role=tableReadingTable with 1 columns and 1 rows. This is some text.  
BetterData table with summary and thReadingTable with two columns and two rows. Data table summary. Morning (column one, row one, morning). Afternoon (column two, row one, afternoon). Free (column one, row two, morning, free). Busy (column two, row two, afternoon, busy).  
BetterData table with caption and thReadingTable with two columns and two rows. Data table caption. Morning (column one, row one, morning). Afternoon (column two, row one, afternoon). Free (column one, row two, morning, free). Busy (column two, row two, afternoon, busy).  
BetterData table with th cell headersReadingTable with two columns and two rows. Morning. Afternoon. Free. Busy.Reads cell headers when using table navigation commands  
PassData table with th scope on cell headersReading Table with 5 columns and 4 rows. Contact information. Blank (column 1, row 1, blank). Name (column 2, row 1, name). Phone number (column 3, row 1, phone number). Fax number (column 4, row 1, fax number). City (column 5, row 1, city). One (column 1, row 2, one). Joel Garner (column 2, row 2, name, Joel Garner). 412 212 5421 (column 3, row 2, phone number, Joel Garner, 412 212 5421). 412 212 5400 (column 4, row 2, fax number, Joel Garner, 412 212 5400). Pittsburgh (column 5, row 2, city, Joel Garner, Pittsburgh) Row header read out along with column header for cells when using table navigation commands.  
PassPDF18 Document with doc titleReadingThis is document title - SR_PDF_doc_title.pdfVoices PDF document title, and filename part of URL.  
BetterPDF9 Document with headingsReadingHeading 1, heading level 1. Heading 1.2, heading level 2.  
BetterPDF4 Decorative image marked as artifactReading Nothing Image ignored as expected and not present in Firefox accessibility tree.  
BetterPDF16 Document default language set to FrenchReadingAct-eef tab-leDocument pronounced as French, document language applied