User agent reliability for NVDA Firefox Screen reader compatibility

Screen Readers
Nov 26, 2024

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

Latest version tested

NVDA 2024.4 with FF 128

  • All tests: 114 pass of 125 tests (91%)
  • ARIA tests: 44 pass of 47 tests (94%)
  • WCAG tests: 79 pass of 86 tests (92%)

Reliability trend

100%80%60%40%20%0%201484%201576%201671%201778%201878%201978%202084%202187%202287%202387%202491%

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, zwoy, dry-i.Speech pronounced as lang=fr, but CSS matches :lang(de) and German CSS content pronounced as French.
FailMatch lang subtagsReadingDam-he. Dam-he. Daim.lang=de and lang=de-DE pronounced as German, lang=de-AT pronounced as English.
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
Failabbr with titleReadingT L NABBR expansion ignored in screen reader, available to sighted users as dotted underline tooltip links in browser.
Failarea with title attributeReadingThis is alt text, graphic, this is alt text, link, slash left arrow dot HTM. This is alt text, graphic link, slash right arrow dot HTM.Link URLs read out instead of link title
Failarea with title attributeTabbingSlash left arrow dot HTM, link, this is alt text, graphic. Slash right arrow dot HTM, link, this is alt text, graphic.Link URLs read out each time user tabs.
FailData table with role=columnheader headers but no thReadingMorning. Afternoon. Free. Busy.Table treated as layout table - not announced as table, and no headers read.
FailPDF19 Phrase language set to GermanReadingRah-di-ohPronounced as French, using document language, phrase language ignored

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).  
PassARIA role=headingHeadingFirst level heading, heading level 1. Second level heading, heading level 2.  
PassHeading is img with altHeadingSecond level alt, graphic heading level 2.  
Betterapplet with title attributeReading Nothing Firefox 52 removed applet support in 2017, and doesn't render applet on screen unless applet has fallback content  
Betterapplet with fallback contentReadingFallback content for appletFirefox 52 removed applet support in 2017, and doesn't render applet on screen unless applet has fallback content  
Betterapplet with aria-label attributeReading Nothing Firefox 52 removed applet support in 2017, and doesn't render applet on screen unless applet has fallback content  
Betterapplet with aria-labelledby attributeReading Nothing Firefox 52 removed applet support in 2017, and doesn't render applet on screen unless applet has fallback content  
Passapplet inside figure with figcaption elementReadingFigure caption, figure caption for applet. Out of caption, out of figure.Firefox 52 removed applet support in 2017, and doesn't render applet on screen unless applet has fallback content  
Betterembed with title attributeReadingTitle text for embed, frame button play. Button mute. Blank. Out of frame, blank.  
Passembed inside figure with figcaptionReadingFigure frame, button play. Button mute. Blank. Out of frame, blank. Caption, figure caption for embed. Out of caption, out of figure.  
Betterembed with aria-label attributeReadingARIA label for embed, frame, button play. Button mute. Blank. Out of frame, blank.  
Betterembed with aria-labelledby attributeReadingThis is ARIA-LABELLEDBY text, frame, button play. Button mute. Blank. Out of frame, blank.  
Betterobject with fallback contentReadingFallback content for object.Flash is no longer supported by Firefox.  
Betterobject with title attributeReading Nothing Nothing displayed on screen and nothing voiced for object  
Betterobject with aria-label attributeReading Nothing Nothing displayed on screen and nothing voiced for object  
Betterobject with aria-labelledby attributeReading Nothing Nothing displayed on screen and nothing voiced for object  
Bettervideo with aria-label attributeReadingVideo aria label, grouping, out of grouping.  
Bettervideo with aria-labelledby attributeReadingThis is ARIA-LABELLEDBY text, grouping, out of grouping  
Bettervideo with title attributeReadingVideo title grouping, out of grouping.  
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  
Passiframe with fallback contentReadingFrame, this is an, link, example hyperlink in the target page. Out of frame, blank.Fallback content is ignored  
Betteriframe with fallback contentTabbingFrame, example hyperlink, link.  
Passiframe with title attributeReadingThis is an IFRAME title, frame, this is an, link, example hyperlink in the target page. Out of frame, blank.  
Betteriframe with title attributeTabbingThis is an iframe title, frame, example hyperlink, link.  
PassInteractive iframe with role=presentation and no accessible nameReadingThis is a link, example hyperlink, in the target page.role=presentation makes frame seamless  
PassInteractive iframe with role=presentation and no accessible nameTabbingExample hyperlink, link  
PassInteractive iframe with role=presentation and title attributeReadingThis is frame title, frame, this is an, visited link, example hyperlink, in the target page.  
PassInteractive iframe with role=presentation and title attributeTabbingThis is frame title, frame, example hyperlink, visited link.  
PassInteractive iframe with role=presentation and aria-label attributeReadingThis is aria-label, frame, this is an, visited link, example hyperlink, in the target page.  
PassInteractive iframe with role=presentation and aria-label attributeTabbingThis is aria-label, frame, example hyperlink, visited link.  
Passbutton containing img with altReadingButton graphic, this is image alt  
Passbutton containing img with altTabbingThis is image alt, graphic button  
Passbutton containing img with title attributeReadingButton graphic, this is image title.  
Passbutton containing img with title attributeTabbingThis is image title, graphic button.  
Passbutton containing img with aria-labelReadingButton graphic, this is image aria label.  
Passbutton containing img with aria-labelTabbingThis is image aria label, graphic button.  
Passbutton containing img with aria-labelledbyReadingButton graphic, this is an aria labelled by, this is an aria labelled by  
Passbutton containing img with aria-labelledbyTabbingThis is an aria labelled by, graphic button.  
Passbutton with title containing img with null altReadingButton, this is button title  
Passbutton with title containing img with null altTabbingThis is button title, button  
Passbutton with aria-label containing img with null altReadingButton, this is button aria label  
Passbutton with aria-label containing img with null altTabbingThis is button aria label, button  
Passinput type=image with altReadingButton, this is image button alt text  
Passinput type=image with altTabbingThis is image button alt text, button  
Passinput type=image with title attributeReadingButton, this is image button title text  
Passinput type=image with title attributeTabbingThis is image button title text, button  
Passinput type=image with aria-label attributeReadingButton, this is image button aria label text  
Passinput type=image with aria-label attributeTabbingThis is image button aria label text, button  
Passinput type=image with aria-labelledby attributeReadingButton, this is image button aria labelled by text, this is image button aria labelled by text  
Passinput type=image with aria-labelledby attributeTabbingThis is image button aria labelled by text, button  
Passinput type=text with aria-describedby attributeReadingClickable, first name, edit has auto complete, a bit of instructions for this field linked with aria describedby  
Passinput type=text with aria-describedby attributeTabbingFirst name, edit, has auto complete, a bit of instructions for this field linked with aria describedby, blank  
Betterinput type=text with title attributeReadingEnter search text, edit has auto complete  
Passinput type=text with title attributeTabbingEnter search text, edit, has auto complete, blank  
Betterinput type=text with aria-label attributeReadingEnter search text, edit has auto complete  
Passinput type=text with aria-label attributeTabbingEnter search text, edit, has auto complete, blank  
Passinput type=text with aria-labelledby attributeReadingEnter search text, edit has auto complete  
Passinput type=text with aria-labelledby attributeTabbingEnter search text, edit, has auto complete, blank  
Passinput type=text with label forReadingClickable, enter search text, edit has auto complete  
Passinput type=text with label forTabbingEnter search text, edit, has auto complete, blank  
Passinput type=text inside label with text before controlReadingClickable, enter search text, edit has auto complete  
Passinput type=text inside label with text before controlTabbingArticle, enter search text, edit has auto complete, blank  
Passinput type=text inside label with text after controlReadingClickable, edit has auto complete, enter search text  
Passinput type=text inside label with text after controlTabbingArticle, enter search text, edit has auto complete, blank  
Passinput type=text inside label with text before and after controlReadingClickable, enter search text, edit has auto complete, blanks not allowed  
Passinput type=text inside label with text before and after controlTabbingArticle, enter search text, blanks not allowed, edit has auto complete, blank  
Passfieldset containing linksReadingLegend for enclosed links grouping, legend for enclosed links. Link home, link about, link contact. Out of grouping.  
Betterfieldset containing linksTabbingLegend for enclosed links, grouping, home link. About link. Contact link.  
PassYes/No radio buttons inside fieldset elementReadingI agree to terms and conditions grouping, I agree to terms and conditions. Clickable radio button checked, yes, clickable radio button not checked, no. Out of grouping, sign me up to the newsletter grouping, sign me up to the newsletter. Clickable radio button checked, yes, clickable radio button not checked, no. Out of grouping.  
PassYes/No radio buttons inside fieldset elementTabbingI agree to terms and conditions grouping, yes radio button checked, one of two. Sign me up to the newsletter grouping, yes radio button checked, one of two.  
Passimg with null altReading Nothing Ignored as expected  
Passimg with altReadingGraphic, this is alt text  
Passimg with figcaptionReadingFigure caption, Violet, taken on 12/11/2010. Out of caption, out of figure.  
Passimg with titleReadingGraphic, this is title text  
Passimg with aria-labelReadingGraphic, this is an aria label  
Passimg with aria-labelledbyReadingGraphic, this is an aria labelled by, this is an aria labelled by  
Betterarea and img with alt attributesReadingThis is alt text, graphic, this is alt text, link this is left alt text, link this is right alt text  
Betterarea and img with alt attributesTabbingThis is left alt text, link, this is alt text graphic. This is right alt text, link, this is alt text graphic  
Passarea with alt attribute and img with null altReadingGraphic link, this is left alt text, link, this is right alt text.  
Passarea with alt attribute and img with null altTabbingThis is left alt text, link graphic. This is right alt text, link graphic.  
Betterarea with aria-label attributeReadingThis is alt text, graphic, this is alt text link, this is left aria label text, link, this is right aria label text.  
Betterarea with aria-label attributeTabbingThis is left aria label text, link, this is alt text, graphic. This is right aria label text, link, this is alt text, graphic  
Betterarea with aria-labelledby attributeReadingThis is alt text, graphic, this is alt text link, this is left aria labelled by text, link, this is right aria labelled by text.  
Betterarea with aria-labelledby attributeTabbingThis is left aria labelled by text, link, this is alt text graphic. This is right aria labelled by text, link, this is alt text graphic.  
PassLink containing img with altReadingLink graphic, this is a link alt  
PassLink containing img with altTabbingThis is a link alt, graphic link  
PassLink containing img with titleReadingLink graphic, this is an image title  
PassLink containing img with titleTabbingThis is an image title, graphic link  
PassClick Here link with title attributeReadingLink, click here  
PassClick 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  
BetterLink 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  
PassClick Here link with aria-describedby attributeTabbingClick here link, this is an aria described by  
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.  
PassData table with role=gridReadingTable with two rows and two columns, row one column one, morning. Column two afternoon. Row two, morning, column one, free. Afternoon, column two, busy.  
PassData table with role=tableReadingTable with 1 rows and 1 columns. Row 1, columns 1, this is some text.  
PassData table with summary and thReadingTable with two rows and two columns, data table summary. Row one column one, morning. Column two, afternoon. Row two, morning, column one, free. Afternoon, column two, busy.  
PassData table with caption and thReadingTable with two rows and two columns, data table caption. Caption, data table caption. Out of caption, row one column one, morning. Column two afternoon. Row two, morning, column one, free. Afternoon, column two, busy.  
PassData table with th cell headersReadingTable with two rows and two columns, row one, column one, morning. Column two, afternoon. Row two, morning, column one, free. Afternoon, column two, busy.  
BetterData table with th scope on cell headersReading Table with 4 rows and 5 columns, contact information. Caption, contact information. Out of caption row 1, column 1. Column 2, name. Column 3, phone number. Column 4, fax number. Column 5, city. Row 2, column 1, one. Name, column 2, Joel Garner. Phone number, column 3, 412 212 5421. Fax number, column 4, 412 212 5400. City, column 5, Pittsburgh Column headers, but no row headers, announced for TD cells in reading mode, but row headers are announced when using table navigation commands.  
PassData table with td headers attributeReading Table with 3 rows and 7 columns, row 1 through 2 column 1, homework. Row 1 column 2 through 4, exams. Column 5 through 7, projects. Row 2, exams, column 2, one. Exams, column 3, two. Exams, column 4, final. Projects, column 5, one. Projects, column 6, two. Projects, column 7, final. Row 3, homework, column 1, fifteen percent. Exams one, column 2, fifteen percent. Exams two, column 3, fifteen percent. Exams final, column 4, twenty percent. Projects one, column 5, ten percent. Projects two, column 6, ten percent. Projects final, column 7, fifteen percent. Headers associated with the cell read out before column number.  
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 level 1, heading 1. Heading level 2, heading 1.2  
BetterPDF1 Image with alt textReadingThis is alt text, figure  
PassPDF4 Decorative image marked as artifactReading Nothing Image ignored as expected  
BetterPDF16 Document default language set to FrenchReadingAct-eef tab-leDocument pronounced as French, document language applied  
BetterPDF6 Table with header markupReadingTable with 2 rows and 2 columns, column 1, morning. Column 2, afternoon. Row 2, morning column 1, free. Afternoon column 2, busy. Out of table  
BetterPDF6 Table with header markup and alt textReadingTable with 2 rows and 2 columns, alt description for table. Row 1, column 1, morning. Column 2, afternoon. Row 2, morning, column 1, free. Afternoon, column 2, busy. Out of table