User agent reliability for VoiceOver Mac Screen reader compatibility

Screen Readers
Nov 26, 2024

Shows how well VoiceOver Mac supports ARIA and WCAG sufficient techniques.

Latest version tested

VoiceOver macOS 14.6 with Safari 17.6

  • All tests: 109 pass of 125 tests (87%)
  • ARIA tests: 43 pass of 47 tests (91%)
  • WCAG tests: 74 pass of 86 tests (86%)

Reliability trend

100%80%60%40%20%0%201470%201571%201671%201775%201876%201977%202083%202181%202283%202384%202487%

Failing tests

 TestModeWhat the user hearsNotes
Page with xml:lang set on the html and p elementsReadingAct-if tay-bill. Ray-day-oh.Pronounced as English. Ignores xml:lang.
application/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).
audio with aria-label attributeReading Nothing Nothing voiced for audio - no indication it exists
audio with aria-labelledby attributeReading Nothing Nothing voiced for audio - no indication it exists
audio with title attributeReading Nothing Nothing voiced for audio - no indication it exists
a element placeholder link with no event handler or href attributeReadingPlaceholder text, clickableAnnounced as clickable, but no event handler so nothing happens when clicked
iframe with fallback contentReadingFrame oneMeaningless frame title read out.
abbr with titleReadingT L NABBR expansion ignored.
button containing img with title attributeReadingButtonReads "button" without saying what button does.
button containing img with title attributeTabbingButtonReads "button" without saying what button does.
img with figcaptionReadingViolet, taken on 12/11/2010, figure. One thousand, two hundred and thirty four PNG, image. Violet, taken on 12/11/2010. End of, Violet, taken on 12/11/2010, figure.Reads out meaningless filename and FIGCAPTION.
area with aria-labelledby attributeReadingThis is alt text, image map. In, this is alt text, image map, 2 items, link, comma left underscore arrow HTM. Link, comma right underscore arrow HTMreads out filename instead of ARIA-LABELLEDBY
area with aria-labelledby attributeTabbingLink, comma left underscore arrow HTM. Link, comma right underscore arrow HTMReads out filename instead of ARIA-LABELLEDBY
Data table with td headers attributeReading Table, 7 columns, 3 rows. Spans 2 rows, homework, column 1 of 7. Spans 3 columns, exams, column 2 of 7. Spans 3 columns, projects, column 5 of 7. Row 2 of 3, exams, one, column 2 of 7. Two column 3 of 7. Final column 4 of 7. Projects, one, column 5 of 7. Two column 6 of 7. Final column 7 of 7. Row 3 of 3, homework, fifteen percent, column 1 of 7. Exams and one, fifteen percent, column 2 of 7. Two, fifteen percent, column 3 of 7. Final, twenty percent, column 4 of 7. Projects and one, ten percent, column 5 of 7. Two, ten percent, column 6 of 7. Final, fifteen percent, column 7 of 7. Table incomprehensible - HEADERS relationships not announced correctly.
PDF18 Document with doc titleReadingSlash SR_PDF_doc_title.pdfVoices full URL. URL displayed in browser tab instead of title.
PDF16 Document default language set to FrenchReadingAct-if tay-billPronounced as English, document language ignored

Passing tests

 TestModeWhat the user hearsNotes
Page with lang set on the html and p elementsReadingAct-eef tab-le. Rah-di-oh.Pronounced as French and German.  
text/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).  
Match lang subtagsReadingDam-he. Dam-he. Dam-he.All pronounced as German.  
ARIA role=headingHeadingHeading level 1, first level heading. Heading level 2, second level heading.  
Heading is img with altHeadingHeading level 2, second level alt, image.  
applet with title attributeReading Nothing Safari on macOS no longer supports applets, and does not render them on screen  
applet with fallback contentReadingFallback content for appletSafari on macOS no longer supports applets  
applet with aria-label attributeReadingAria label for applet, empty groupSafari on macOS no longer supports applets  
applet with aria-labelledby attributeReadingThis is ARIA-LABELLEDBY text, empty groupSafari on macOS no longer supports applets  
applet inside figure with figcaption elementReadingFigure caption for applet, figure. Figure caption for applet. End of, figure caption for applet, figure.Safari on macOS no longer supports applets  
embed with title attributeReading Nothing Nothing displayed on screen and nothing voiced for object  
embed inside figure with figcaptionReadingFigure caption for embed, figure. Figure caption for embed. End of, figure caption for embed, figure.  
embed with aria-label attributeReading Nothing Nothing displayed on screen and nothing voiced for object  
embed with aria-labelledby attributeReading Nothing Nothing displayed on screen and nothing voiced for object  
object with fallback contentReadingFallback content for object  
object with title attributeReading Nothing Nothing displayed on screen and nothing voiced for object  
object with aria-label attributeReading Nothing Nothing displayed on screen and nothing voiced for object  
object with aria-labelledby attributeReading Nothing Nothing displayed on screen and nothing voiced for object  
video with aria-label attributeReadingVideo aria label, empty video playback.  
video with aria-labelledby attributeReadingThis is ARIA-LABELLEDBY text, empty video playback.  
video with title attributeReadingVideo title, empty video playback.  
a element placeholder link with no event handler or href attributeTabbing Nothing Skipped when tabbing, as expected  
iframe with fallback contentTabbingEntering frame, link, example hyperlink. Leaving frame.  
iframe with title attributeReadingThis is an IFRAME title, frame.IFRAME TITLE attribute read.  
iframe with title attributeTabbingEntering this is an IFRAME title frame, link, example hyperlink. Leaving this is an IFRAME title.  
Interactive iframe with role=presentation and no accessible nameReadingThis is an. Link, example hyperlink. In the target page.role=presentation makes frame seamless  
Interactive iframe with role=presentation and no accessible nameTabbingLink, example hyperlink, article  
Interactive iframe with role=presentation and title attributeReadingThis is an. Example hyperlink, link. In the target page.role=presentation makes frame seamless  
Interactive iframe with role=presentation and title attributeTabbingLink, example hyperlink  
Interactive iframe with role=presentation and aria-label attributeReadingThis is an. Example hyperlink, link. In the target page.role=presentation makes frame seamless  
Interactive iframe with role=presentation and aria-label attributeTabbingLink, example hyperlink  
button containing img with altReadingThis is image alt, button  
button containing img with altTabbingThis is image alt, button  
button containing img with aria-labelReadingThis is image aria label, button  
button containing img with aria-labelTabbingThis is image aria label, button  
button containing img with aria-labelledbyReadingThis is aria labelled by, button  
button containing img with aria-labelledbyTabbingThis is aria labelled by, button  
button with title containing img with null altReadingThis is button title, button  
button with title containing img with null altTabbingThis is button title, button  
button with aria-label containing img with null altReadingThis is button aria label, button  
button with aria-label containing img with null altTabbingThis is button aria label, button  
input type=image with altReadingThis is image button alt text, button  
input type=image with altTabbingThis is image button alt text, button  
input type=image with title attributeReadingThis is image button title text, button  
input type=image with title attributeTabbingThis is image button title text, button  
input type=image with aria-label attributeReadingThis is image button aria label text, button  
input type=image with aria-label attributeTabbingThis is image button aria label text, button  
input type=image with aria-labelledby attributeReadingThis is image button aria-labelled by text, button  
input type=image with aria-labelledby attributeTabbingThis is image button aria-labelled by text, button  
input type=text with aria-describedby attributeReadingFirst name. First name, a bit of instructions for this field linked with aria describedby, edit text  
input type=text with aria-describedby attributeTabbingFirst name, a bit of instructions for this field linked with aria describedby, edit text.  
input type=text with title attributeReadingEnter search text, edit text  
input type=text with title attributeTabbingEnter search text, edit text  
input type=text with aria-label attributeReadingEnter search text, edit text  
input type=text with aria-label attributeTabbingEnter search text, edit text  
input type=text with aria-labelledby attributeReadingEnter search text. Enter search text, edit text  
input type=text with aria-labelledby attributeTabbingEnter search text, edit text  
input type=text with label forReadingEnter search text. Enter search text, edit text  
input type=text with label forTabbingEnter search text, edit text  
input type=text inside label with text before controlReadingEnter search text. Enter search text, enter search text, edit text  
input type=text inside label with text before controlTabbingEnter search text, enter search text, edit text  
input type=text inside label with text after controlReadingEnter search text, enter search text, edit text. Enter search text  
input type=text inside label with text after controlTabbingEnter search text, enter search text, edit text  
input type=text inside label with text before and after controlReadingEnter search text. Enter search text, blanks not allowed, enter search text and one more item, edit text. Blanks not allowed  
input type=text inside label with text before and after controlTabbingEnter search text, blanks not allowed, enter search text and one more item, edit text  
fieldset containing linksReadingLegend for enclosed links, group. Legend for enclosed links. Link, home. Link, about. Link, contact. End of, legend for enclosed links, group.  
fieldset containing linksTabbingLink home, legend for enclosed links, legend for enclosed links, group. Link about, legend for enclosed links. Link contact, legend for enclosed links.Legend read out for every link.  
Yes/No radio buttons inside fieldset elementReadingI agree to terms and conditions, group. I agree to terms and conditions. Yes, selected radio button, one of two. Yes. No, radio button, two of two. No. End of, I agree to terms and conditions, group. Sign me up to the newsletter, group. Sign me up to the newsletter. Yes, selected radio button, one of two. Yes. No, radio button, two of two. No. End of, sign me up to the newsletter, group.  
Yes/No radio buttons inside fieldset elementTabbingYes, selected radio button, one of two, I agree to terms and conditions, I agree to terms and conditions group. Yes, selected radio button, one of two, sign me up to the newsletter, sign me up to the newsletter group.  
img with null altReading Nothing Ignored as expected  
img with altReadingThis is alt text, image  
img with titleReadingThis is title text, image  
img with aria-labelReadingThis is an aria label, image  
img with aria-labelledbyReadingThis is an aria labelled by, image. This is an aria labelled by  
area and img with alt attributesReadingThis is alt text, image map. In, this is alt text, image map, 2 items, link, this is left alt text. Link, this is right alt text.  
area and img with alt attributesTabbingLink, this is left alt text. Link, this is right alt text  
area with alt attribute and img with null altReadingLink, this is left alt text. Link, this is right alt text.  
area with alt attribute and img with null altTabbingLink, this is left alt text. Link, this is right alt text.  
area with title attributeReadingThis is alt text, image map. In, this is alt text, image map, 2 items, link, this is left title text. Link, this is right title text  
area with title attributeTabbingLink, this is left title text. Link, this is right title text  
area with aria-label attributeReadingThis is alt text, image map. In, this is alt text, image map, 2 items, link, this is left aria label text. Link, this is right aria label text  
area with aria-label attributeTabbingLink, this is left aria label text. Link, this is right aria label text  
Link containing img with altReadingLink image, this is a link alt  
Link containing img with altTabbingLink image, this is a link alt  
Link containing img with titleReadingLink image, this is an image title  
Link containing img with titleTabbingLink image, this is an image title  
Click Here link with title attributeReadingLink, click here, this is a link title  
Click Here link with title attributeTabbingLink, click here, this is a link title  
Link text replaced by aria-label attributeReadingLink, this is an aria label  
Link text replaced by aria-label attributeTabbingLink, this is an aria label  
Link text replaced by aria-labelledby attributeReadingLink, this is an aria labelled by. This is an aria labelled by  
Link text replaced by aria-labelledby attributeTabbingLink, this is an aria labelled  
Click Here link with aria-describedby attributeReadingLink, click here, this is an aria described by. This is an aria described by  
Click Here link with aria-describedby attributeTabbingLink, click here, this is an aria described by.  
Layout table with single cellReadingThis is some text.Treated as a layout table.  
Layout table with role=presentationReadingExample. Navigation. Links. Content.Table treated as layout table - not announced as table.  
Data table with role=gridReadingTable, 2 columns, 2 rows. Morning, column 1 of 2. Afternoon, column 2 of 2. Row 2 of 2, morning, free, column 1 of 2. Afternoon, busy, column 2 of 2.  
Data table with role=tableReadingTable, 1 column, 1 row. This is some text, column 1 of 1.  
Data table with summary and thReadingTable two columns, two rows, data table summary. Morning, column one of two. Afternoon, column two of two. Row two of two, morning, free, column one of two. Afternoon, busy, column two of two.  
Data table with caption and thReadingData table caption, table, two columns, two rows. Morning, column one of two. Afternoon, column two of two. Row two of two morning, free, column one of two. Afternoon, busy, column two of two.  
Data table with role=columnheader headers but no thReadingTable two columns, two rows. Morning, column one of two. Afternoon, column two of two. Row two of two, morning, free, column one of two. Afternoon, busy, column two of two.  
Data table with th cell headersReadingTable, 2 columns, 2 rows. Morning, column 1 of 2. Afternoon, column 2 of 2. Row 2 of 2, morning, free, column 1 of 2. Afternoon, busy, column 2 of 2.  
Data table with th scope on cell headersReading Contact information, table, 5 columns, 4 rows. Blank, column 1 of 5. Name, column 2 of 5. Phone number, column 3 of 5. Fax number, column 4 of 5. City, column 5 of 5. Row 2 of 4, one, column 1 of 5. Name, Joel Garner, column 2 of 5. Phone, 412 212 5421, column 3 of 5. Fax, 412 212 5400, column 4 of 5. City, Pittsburgh, column 5 of 5. Row 3 of 4, two, column 1 of 5. Name, Clive Lloyd, column 2 of 5. Phone, 410 306 1420, column 3 of 5. Fax, 410 306 5400, column 4 of 5. City, Baltimore, column 5 of 5.  
PDF9 Document with headingsReadingHeading level 1, Heading 1. Heading level 2, heading 1.2.  
PDF1 Image with alt textReadingThis is alt text, image  
PDF4 Decorative image marked as artifactReading Nothing Image ignored as expected  
PDF19 Phrase language set to GermanReadingRah-di-ohPronounced as German  
PDF6 Table with header markupReadingTable, no selection. Morning, column 1, row 1. Afternoon, column 2, row 1. Morning, free. Afternoon, busy.  
PDF6 Table with header markup and alt textReadingTable, no selection. Morning, column 1, row 1. Afternoon, column 2, row 1. Morning, free. Afternoon, busy.