User agent reliability for VoiceOver Mac Screen reader compatibility
Screen Readers
 Sep 11, 2022
Shows how well VoiceOver Mac supports ARIA and WCAG sufficient techniques.
Latest version tested
VoiceOver macOS 12.5 with Safari 15.6
- All tests: 98 pass of 118 tests (83%)
- ARIA tests: 36 pass of 42 tests (86%)
- WCAG tests: 73 pass of 86 tests (85%)
Reliability trend
Failing tests
| Test | Mode | What the user hears | Notes | |
|---|---|---|---|---|
|  | Page with xml:langset on thehtmlandpelements | Reading | Act-if tay-bill. Ray-day-oh. | Pronounced as English. Ignores xml:lang. | 
|  | application/xhtml+xmlpage with mismatchinglangandxml:langon thehtmlelement | Reading | Ga-raj. Doo-ble. Damm. Un, zway, dray. | Speech pronounced as lang=fr, but CSS matches :lang(de). | 
|  | audiowitharia-labelattribute | Reading | Nothing | Nothing voiced for audio - no indication it exists | 
|  | audiowitharia-labelledbyattribute | Reading | Nothing | Nothing voiced for audio - no indication it exists | 
|  | audiowithtitleattribute | Reading | Nothing | Nothing voiced for audio - no indication it exists | 
|  | aelement placeholder link with no event handler orhrefattribute | Reading | Placeholder text, clickable | Announced as clickable, but no event handler so nothing happens when clicked | 
|  | iframewith fallback content | Reading | Frame one | Meaningless frame title read out. | 
|  | abbrwithtitle | Reading | T L N | ABBR expansion ignored. | 
|  | buttoncontainingimgwithtitleattribute | Reading | Button | Reads "button" without saying what button does. | 
|  | buttoncontainingimgwithtitleattribute | Tabbing | Button | Reads "button" without saying what button does. | 
|  | input type=textwitharia-describedbyattribute | Tabbing | First name, edit text, you are currently on a text element | ARIA-DESCRIBEDBY not read when tabbing | 
|  | input type=textinsidelabelwith text before and after control | Reading | Enter search text. Enter search text, and one more item, edit text. Blanks not allowed | 'And one more item' is read instead of the label text after the control. | 
|  | input type=textinsidelabelwith text before and after control | Tabbing | Enter search text, and one more item, edit text | 'And one more item' is read instead of the label text after the control. | 
|  | imgwithfigcaption | Reading | Violet, 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. | 
|  | areawitharia-labelledbyattribute | Reading | This is alt text, image map. In, this is alt text, image map, 2 items, link, left underscore arrow HTM. Link, right underscore arrow HTM | reads out filename instead of ARIA-LABELLEDBY | 
|  | areawitharia-labelledbyattribute | Tabbing | Link, left underscore arrow HTM. Link, right underscore arrow HTM | Reads out filename instead of ARIA-LABELLEDBY | 
|  | Data table with role=columnheaderheaders but noth | Reading | Nothing | Ignores table completely. | 
|  | Data table with td headersattribute | Reading | 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 title | Reading | Slash SR_PDF_doc_title.pdf | Voices full URL. URL displayed in browser tab instead of title. | 
|  | PDF16 Document default language set to French | Reading | Act-if tay-bill | Pronounced as English, document language ignored | 
Passing tests
| Test | Mode | What the user hears | Notes | |
|---|---|---|---|---|
|  | Page with langset on thehtmlandpelements | Reading | Act-eef tab-le. Rah-di-oh. | Pronounced as French and German. | 
|  | text/htmlpage with mismatchinglangandxml:langon thehtmlelement | Reading | Ga-raj. Doo-ble. Damm. Un, deux, trois. | Speech pronounced as lang=fr, and CSS matches :lang(fr). | 
|  | Match langsubtags | Reading | Dam-he. Dam-he. Dam-he. | All pronounced as German. | 
|  | ARIA role=heading | Heading | Heading level 1, first level heading. Heading level 2, second level heading. | |
|  | Heading is imgwithalt | Heading | Heading level 2, second level alt, image. | |
|  | appletwithtitleattribute | Reading | Nothing | Safari on macOS no longer supports applets, and does not render them on screen | 
|  | appletwith fallback content | Reading | Fallback content for applet | Safari on macOS no longer supports applets | 
|  | appletwitharia-labelattribute | Reading | Aria label for applet, empty group | Safari on macOS no longer supports applets | 
|  | appletwitharia-labelledbyattribute | Reading | This is ARIA-LABELLEDBY text, empty group | Safari on macOS no longer supports applets | 
|  | appletinsidefigurewithfigcaptionelement | Reading | Figure caption for applet, figure. Figure caption for applet. End of, figure caption for applet, figure. | Safari on macOS no longer supports applets | 
|  | embedwithtitleattribute | Reading | Nothing | Nothing displayed on screen and nothing voiced for object | 
|  | embedinsidefigurewithfigcaption | Reading | Figure caption for embed, figure. Figure caption for embed. End of, figure caption for embed, figure. | |
|  | embedwitharia-labelattribute | Reading | Nothing | Nothing displayed on screen and nothing voiced for object | 
|  | embedwitharia-labelledbyattribute | Reading | Nothing | Nothing displayed on screen and nothing voiced for object | 
|  | objectwith fallback content | Reading | Fallback content for object | |
|  | objectwithtitleattribute | Reading | Nothing | Nothing displayed on screen and nothing voiced for object | 
|  | objectwitharia-labelattribute | Reading | Nothing | Nothing displayed on screen and nothing voiced for object | 
|  | objectwitharia-labelledbyattribute | Reading | Nothing | Nothing displayed on screen and nothing voiced for object | 
|  | videowitharia-labelattribute | Reading | Video aria label, empty video playback. | |
|  | videowitharia-labelledbyattribute | Reading | This is ARIA-LABELLEDBY text, empty video playback. | |
|  | videowithtitleattribute | Reading | Video title, empty video playback. | |
|  | aelement placeholder link with no event handler orhrefattribute | Tabbing | Nothing | Skipped when tabbing, as expected | 
|  | iframewith fallback content | Tabbing | Entering frame, link, example hyperlink. Leaving frame. | |
|  | iframewithtitleattribute | Reading | This is an IFRAME title, frame. | IFRAME TITLE attribute read. | 
|  | iframewithtitleattribute | Tabbing | Entering this is an IFRAME title frame, link, example hyperlink. Leaving this is an IFRAME title. | |
|  | buttoncontainingimgwithalt | Reading | This is image alt, button | |
|  | buttoncontainingimgwithalt | Tabbing | This is image alt, button | |
|  | buttoncontainingimgwitharia-label | Reading | This is image aria label, button | |
|  | buttoncontainingimgwitharia-label | Tabbing | This is image aria label, button | |
|  | buttoncontainingimgwitharia-labelledby | Reading | This is aria labelled by, button | |
|  | buttoncontainingimgwitharia-labelledby | Tabbing | This is aria labelled by, button | |
|  | buttonwithtitlecontainingimgwith nullalt | Reading | This is button title, button | |
|  | buttonwithtitlecontainingimgwith nullalt | Tabbing | This is button title, button | |
|  | buttonwitharia-labelcontainingimgwith nullalt | Reading | This is button aria label, button | |
|  | buttonwitharia-labelcontainingimgwith nullalt | Tabbing | This is button aria label, button | |
|  | input type=imagewithalt | Reading | This is image button alt text, button | |
|  | input type=imagewithalt | Tabbing | This is image button alt text, button | |
|  | input type=imagewithtitleattribute | Reading | This is image button title text, button | |
|  | input type=imagewithtitleattribute | Tabbing | This is image button title text, button | |
|  | input type=imagewitharia-labelattribute | Reading | This is image button aria label text, button | |
|  | input type=imagewitharia-labelattribute | Tabbing | This is image button aria label text, button | |
|  | input type=imagewitharia-labelledbyattribute | Reading | This is image button aria-labelled by text, button | |
|  | input type=imagewitharia-labelledbyattribute | Tabbing | This is image button aria-labelled by text, button | |
|  | input type=textwitharia-describedbyattribute | Reading | First name. First name, edit text, a bit of instructions for this field linked with aria describedby | |
|  | input type=textwithtitleattribute | Reading | Enter search text, edit text | |
|  | input type=textwithtitleattribute | Tabbing | Enter search text, edit text | |
|  | input type=textwitharia-labelattribute | Reading | Enter search text, edit text | |
|  | input type=textwitharia-labelattribute | Tabbing | Enter search text, edit text | |
|  | input type=textwitharia-labelledbyattribute | Reading | Enter search text. Enter search text, edit text | |
|  | input type=textwitharia-labelledbyattribute | Tabbing | Enter search text, edit text | |
|  | input type=textwithlabel for | Reading | Enter search text. Enter search text, edit text | |
|  | input type=textwithlabel for | Tabbing | Enter search text, edit text | |
|  | input type=textinsidelabelwith text before control | Reading | Enter search text. Enter search text, edit text | |
|  | input type=textinsidelabelwith text before control | Tabbing | Enter search text, edit text | |
|  | input type=textinsidelabelwith text after control | Reading | Enter search text, edit text. Enter search text | |
|  | input type=textinsidelabelwith text after control | Tabbing | Enter search text, edit text | |
|  | fieldsetcontaining links | Reading | Legend for enclosed links, group. Legend for enclosed links. Link, home. Link, about. Link, contact. End of, legend for enclosed links, group. | |
|  | fieldsetcontaining links | Tabbing | Link 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 fieldsetelement | Reading | I 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 fieldsetelement | Tabbing | Yes, 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. | |
|  | imgwith nullalt | Reading | Nothing | Ignored as expected | 
|  | imgwithalt | Reading | This is alt text, image | |
|  | imgwithtitle | Reading | This is title text, image | |
|  | imgwitharia-label | Reading | This is an aria label, image | |
|  | imgwitharia-labelledby | Reading | This is an aria labelled by, image. This is an aria labelled by | |
|  | areaandimgwithaltattributes | Reading | This 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. | |
|  | areaandimgwithaltattributes | Tabbing | Link, this is left alt text. Link, this is right alt text | |
|  | areawithaltattribute andimgwith nullalt | Reading | Link, this is left alt text. Link, this is right alt text. | |
|  | areawithaltattribute andimgwith nullalt | Tabbing | Link, this is left alt text. Link, this is right alt text. | |
|  | areawithtitleattribute | Reading | This 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 | |
|  | areawithtitleattribute | Tabbing | Link, this is left title text. Link, this is right title text | |
|  | areawitharia-labelattribute | Reading | This 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 | |
|  | areawitharia-labelattribute | Tabbing | Link, this is left aria label text. Link, this is right aria label text | |
|  | Link containing imgwithalt | Reading | Link image, this is a link alt | |
|  | Link containing imgwithalt | Tabbing | Link image, this is a link alt | |
|  | Link containing imgwithtitle | Reading | Link image, this is an image title | |
|  | Link containing imgwithtitle | Tabbing | Link image, this is an image title | |
|  | Click Here link with titleattribute | Reading | Link, click here, this is a link title | |
|  | Click Here link with titleattribute | Tabbing | Link, click here, this is a link title | |
|  | Link text replaced by aria-labelattribute | Reading | Link, this is an aria label | |
|  | Link text replaced by aria-labelattribute | Tabbing | Link, this is an aria label | |
|  | Link text replaced by aria-labelledbyattribute | Reading | Link, this is an aria labelled by. This is an aria labelled by | |
|  | Link text replaced by aria-labelledbyattribute | Tabbing | Link, this is an aria labelled | |
|  | Click Here link with aria-describedbyattribute | Reading | Link, click here, this is an aria described by. This is an aria described by | |
|  | Click Here link with aria-describedbyattribute | Tabbing | Link, click here, this is an aria described by. | |
|  | Layout table with single cell | Reading | This is some text. | Treated as a layout table. | 
|  | Layout table with role=presentation | Reading | Example. Navigation. Links. Content. | Table treated as layout table - not announced as table. | 
|  | Data table with role=grid | Reading | Table, 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 summaryandth | Reading | Table 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 captionandth | Reading | Data 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 thcell headers | Reading | Table, 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 scopeon cell headers | Reading | 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 headings | Reading | Heading level 1, Heading 1. Heading level 2, heading 1.2. | |
|  | PDF1 Image with alt text | Reading | This is alt text, image | |
|  | PDF4 Decorative image marked as artifact | Reading | Nothing | Image ignored as expected | 
|  | PDF19 Phrase language set to German | Reading | Rah-di-oh | Pronounced as German | 
|  | PDF6 Table with header markup | Reading | Table, no selection. Morning, heading, column 1, row 1. Afternoon, heading, column 2, row 1. Morning, free. Afternoon, busy. | |
|  | PDF6 Table with header markup and alt text | Reading | Table, no selection. Morning, heading, column 1, row 1. Afternoon, heading, column 2, row 1. Morning, free. Afternoon, busy. |