User agent reliability for VoiceOver Mac Screen reader compatibility

Last updated: October 16, 2016

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

Latest version tested

VoiceOver OSX 10.11 with Safari 9.1.2

Reliability trend

100%80%60%40%20%0%201382%201474%201575%201675%

Failing tests

 TestModeWhat the user hearsNotes
FailAPPLET with fallback contentReadingNewlineNothing voiced for applet - no indication it exists
FailAPPLET with ARIA-LABEL attributeReadingNewlineNothing voiced for applet - no indication it exists
FailAPPLET with ARIA-LABELLEDBY attributeReading Nothing Nothing voiced for applet - no indication it exists
FailEMBED with ARIA-LABEL attributeReading Nothing Nothing voiced for embed - no description of non-text content
FailEMBED with ARIA-LABELLEDBY attributeReading Nothing Nothing voiced for embed - no description of non-text content
FailOBJECT with ARIA-LABEL attributeReading Nothing Nothing voiced for object - no indication it exists
FailOBJECT with ARIA-LABELLEDBY attributeReading Nothing Nothing voiced for object - no indication it exists
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
FailVIDEO 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
FailIFRAME with fallback contentReadingFrame oneMeaningless frame title read out.
FailABBR with titleReadinge t cABBR expansion ignored.
FailBUTTON wraps IMG with TITLE attributeReadingButtonReads "button" without saying what button does.
FailBUTTON wraps IMG with TITLE attributeTabbingButtonReads "button" without saying what button does.
FailIMG with FIGCAPTIONReadingOne two three four PNG image. Violet, taken on 12/11/2010Reads out meaningless filename, then FIGCAPTION.
WorseAREA with ALT attributeTabbingLink, this is alt text, image map. Link, this is right alt textALT text for IMG read out as label of first link instead of AREA ALT test
WorseAREA with TITLE attributeTabbingThis is alt text, image map. Link, this is right title textIMG ALT text read out instead of AREA TITLE for first AREA link
WorseAREA with aria-label attributeTabbingThis is alt text, image map. Link, this is right aria label textIMG ALT text read out instead of AREA ARIA-LABEL for first AREA link
FailAREA with aria-labelledby attributeReadingThis is alt text, image map. Interact with: this is alt text, image map, 2 items, link, left underline arrow HTM. Link, right underline arrow HTMreads out filename
FailAREA with aria-labelledby attributeTabbingLink, left underline arrow HTM. Link, right underline arrow HTMReads out filename
FailData table with role rowheader headers but no THReadingMorning, morning. FreeTreats as layout table, and doesn't read cells in second column.
FailData table with TH row/columns headers with SCOPEReading 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 name, 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 name, 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. Row header not read out along with column header for cells (same result with and without scope).
FailData 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. Final. Projects, one, column 5 of 7. Two. Final. Row 3 of 3, homework, one five percent, column 1 of 7. Exams one, one five percent, column 2 of 7. Two, one five percent, column 3 of 7. Final, two zero percent, column 4 of 7. Projects one, one zero percent, column 5 of 7. Two, one zero percent, column 6 of 7. Final, one five percent, column 7 of 7. Table incomprehensible - HEADERS relationships not announced correctly.

Passing tests

 TestModeWhat the user hearsNotes
PassARIA role=headingHeadingHeading level 1, first level heading. Heading level 2, second level heading.  
PassHeading is IMG with ALTHeadingHeading level 2, second level alt, image.  
PassAPPLET inside FIGURE with FIGCAPTION elementReadingFigure caption for applet  
PassEMBED inside FIGURE with FIGCAPTIONReadingFigure caption for embed  
BetterOBJECT with fallback contentReadingFallback content for object  
PassIFRAME with fallback contentTabbingLink, example hyperlink  
PassIFRAME with titleReadingThis is an IFRAME title, frame.IFRAME TITLE attribute read.  
PassIFRAME with titleTabbingLink, example hyperlink  
PassBUTTON wraps only an IMG with an ALT attributeReadingThis is image alt, button  
PassBUTTON wraps only an IMG with an ALT attributeTabbingThis is image alt, button  
PassBUTTON wraps IMG with aria-labelReadingThis is image aria label, button  
PassBUTTON wraps IMG with aria-labelTabbingThis is image aria label, button  
PassBUTTON wraps IMG with aria-labelledbyReadingThis is aria labelled by, button  
PassBUTTON wraps IMG with aria-labelledbyTabbingThis is aria labelled by, button  
PassBUTTON with TITLE wraps IMG with null ALTReadingThis is button title, button  
PassBUTTON with TITLE wraps IMG with null ALTTabbingThis is button title, button  
PassBUTTON with aria-label wraps IMG with null ALTReadingThis is button aria label, button  
PassBUTTON with aria-label wraps IMG with null ALTTabbingThis is button aria label, button  
PassINPUT type=image with ALT attributeReadingThis is image button alt text, button  
PassINPUT type=image with ALT attributeTabbingThis is image button alt text, button  
PassINPUT type=image with TITLE attributeReadingThis is image button title text, button  
PassINPUT type=image with TITLE attributeTabbingThis is image button title text, button  
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  
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  
PassINPUT type=text with aria-describedby attributeReadingFirst name. First name, edit text, a bit of instructions for this field linked with aria describedby  
PassINPUT type=text with aria-describedby attributeTabbingFirst name, edit text, a bit of instructions for this field linked with aria describedby  
PassINPUT type=text with TITLE attributeReadingEnter search text, edit text  
PassINPUT type=text with TITLE attributeTabbingEnter search text, edit text  
PassINPUT type=text with aria-label attributeReadingEnter search text, edit text  
PassINPUT type=text with aria-label attributeTabbingEnter search text, edit text  
PassINPUT type=text with aria-labelledby attributeReadingEnter search text. Enter search text, edit text  
PassINPUT type=text with aria-labelledby attributeTabbingEnter search text, edit text  
PassINPUT type=text with LABEL FORReadingEnter search text. Enter search text, edit text  
PassINPUT type=text with LABEL FORTabbingEnter search text, edit text  
PassINPUT type=text inside LABEL with text before controlReadingEnter search text. Enter search text, edit text  
PassINPUT type=text inside LABEL with text before controlTabbingEnter search text, edit text  
PassINPUT type=text inside LABEL with text after controlReadingEnter search text, edit text. Enter search text  
PassINPUT type=text inside LABEL with text after controlTabbingEnter search text, edit text  
PassINPUT type=text inside LABEL with text before and after controlReadingEnter search text. Enter search text, blanks not allowed, edit text. Blanks not allowed  
PassINPUT type=text inside LABEL with text before and after controlTabbingEnter search text, blanks not allowed, edit text  
BetterFIELDSET containing linksReadingLegend for enclosed links, with 2 items, group. 2 items interact with legend for enclosed links, with 2 items, group 4 items, legend for enclosed links. Link, home. Link, about. Link, contact.  
BetterFIELDSET containing linksTabbingLink home, legend for enclosed links. Link about. Link contact.  
PassYes/No radio buttons inside FIELDSETReadingI agree to the terms and conditions, with 2 items, group. 2 items, interact with I agree to the terms and conditions with 2 items, group, five items, I agree to terms and conditions. Yes, selected radio button, one of two. Yes. No, radio button, two of two. No. Sign me up for the newsletter, with 2 items, group. 2 items, interact with sign me up for the newsletter with 2 items, group, five items, sign me up to the newsletter. Yes, selected radio button, one of two. Yes. No, radio button, two of two. No.  
BetterYes/No radio buttons inside FIELDSETTabbingYes, selected radio button, one of two, I agree to the terms and conditions. Yes, selected radio button, one of two, sign me up to the newsletter.  
PassIMG with null ALT attributeReading Nothing Ignored as expected  
PassIMG with ALTReadingThis is alt text, image  
PassIMG with TITLEReadingThis is title text, image  
PassIMG with aria-labelReadingThis is an aria label, image  
PassIMG with aria-labelledbyReadingThis is an aria labelled by, image. This is an aria labelled by  
PassAREA with ALT attributeReadingThis is alt text, image map. Interact with: this is alt text, image map, 2 items, link, this is left alt text. Link, this is right alt text.  
PassAREA with TITLE attributeReadingThis is alt text, image map. Interact with: this is alt text, image map, 2 items, link, this is left title text. Link, this is right title text  
PassAREA with aria-label attributeReadingThis is alt text, image map. Interact with: this is alt text, image map, 2 items, link, this is left aria label text. Link, this is right aria label text  
PassA link wraps IMG with ALTReadingLink image, this is a link alt  
PassA link wraps IMG with ALTTabbingLink image, this is a link alt  
PassA link wraps IMG with TITLEReadingLink image, this is an image title  
PassA link wraps IMG with TITLETabbingLink image, this is an image title  
BetterA "click here" link with TITLE attributeReadingLink, click here, this is a link title  
BetterA "click here" link with TITLE attributeTabbingLink, click here, this is a link title  
PassA "click here" link with aria-label attributeReadingLink, this is an aria label  
PassA "click here" link with aria-label attributeTabbingLink, this is an aria label  
PassA "click here" link with aria-labelledby attributeReadingLink, this is an aria labelled by  
PassA "click here" link with aria-labelledby attributeTabbingLink, this is an aria labelled  
BetterA "click here" link with aria-describedby attributeReadingLink, click here, this is an aria described by.  
BetterA "click here" link with aria-describedby attributeTabbingLink, click here, 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.  
BetterData table with role gridReadingTable, 2 columns, 2 rows. Morning, column 1 of 2. Afternoon. Row 2 of 2, morning, free, column 1 of 2. Afternoon, busy, column 2 of 2.  
PassData 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.  
PassData 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.  
PassData 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.