User agent reliability for VoiceOver iOS Screen reader compatibility

Last updated: September 5, 2016

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

Failing tests

TestModeWhat the user hearsNotes
FailAPPLET with ARIA-LABEL attributeTouch Nothing Nothing voiced for applet - no indication it exists
FailAPPLET with ARIA-LABELLEDBY attributeTouch Nothing Nothing voiced for applet - no indication it exists
FailEMBED with ARIA-LABEL attributeTouchStart playback, buttonNo description of non-text content
FailEMBED with ARIA-LABELLEDBY attributeTouchStart playback, buttonNo description of non-text content
FailOBJECT with ARIA-LABEL attributeTouch Nothing Nothing voiced for object - no indication it exists
FailOBJECT with ARIA-LABELLEDBY attributeTouch Nothing Nothing voiced for object - no indication it exists
FailAUDIO with ARIA-LABEL attributeTouch Nothing Nothing voiced for audio - no indication it exists
FailAUDIO with ARIA-LABELLEDBY attributeTouch Nothing Nothing voiced for audio - no indication it exists
FailVIDEO with ARIA-LABEL attributeTouchStart playback, buttonNo description of non-text content
FailVIDEO with ARIA-LABELLEDBY attributeTouchStart playback, buttonNo description of non-text content
FailABBR with titleTouche t cABBR expansion ignored.
FailBUTTON wraps IMG with TITLE attributeTouchButtonReads «button» without saying what button does.
FailYes/No radio buttons inside FIELDSETTouchI agree to the terms and conditions. Yes, radio button ticked, one of one. No, radio button unticked, one of one. Sign me up to the newsletter. Yes, radio button ticked, one of one. No, radio button unticked, one of one.No indication that each Yes/No is a pair of choices - all radio buttons announced as one of one.
FailIMG with FIGCAPTIONTouchOne thousand, two hundred and thirty four PNG, image, Violet, taken on twelve slash eleven slash two thousand and ten.Reads out meaningless filename, then FIGCAPTION.
FailAREA with ALT attributeTouchAreas in the library, select an area for more information on that area.Very hard to find AREA links because image map links are not announced when reading. It is possible to find them by minesweeping, but there are no audible cues to tell the user they’re missing links.
FailAREA with TITLE attributeTouchThis is alt text.Very hard to find AREA links because image map links are not announced when reading. It is possible to find them by minesweeping, but there are no audible cues to tell the user they’re missing links.
FailAREA with aria-label attributeTouchThis is alt text.Very hard to find AREA links because image map links are not announced when reading. It is possible to find them by minesweeping, but there are no audible cues to tell the user they’re missing links.
FailAREA with aria-labelledby attributeTouchThis is alt text.Very hard to find AREA links because image map links are not announced when reading. It is possible to find them by minesweeping, but there are no audible cues to tell the user they’re missing links.
FailData table with role rowheader headers but no THReadingMorning, afternoon. Free, busy.Table treated as layout table - not announced as table, and no headers read.
FailData table with TH row/columns headers with SCOPETouch Contact information, table start. Phone number, name. Fax number, phone number. City, fax number. City. Name, one. Phone number, Joel Garner. Fax number, 412 212 5421. City, 412 212 5400. Pittsburgh. Name, two. Phone number, Clive Lloyd. Fax number, 410 306 1420. City, 410 306 5400. Baltimore. Incomprehenisible - reads out the wrong headings for cells
FailData table with TD HEADERS attributeReading Homework, table start. Exams. Projects. Exams, one. Exams, one, two. Exams, one, final. Projects, one. Projects, one, two. Projects, one. final. Homework, fifteen percent. Exams, fifteen percent. Exams, twenty percent. Projects, ten percent. Projects, ten percent. Projects, fifteen percent, table end. Table incomprehensible - HEADERS relationships not announced correctly.

Passing tests

TestModeWhat the user hearsNotes
PassARIA role=headingTouchFirst level heading, heading level 1. Second level heading, heading level 2
PassHeading is IMG with ALTTouchSecond level alt, heading level 2, image.
PassAPPLET with fallback contentTouchFallback content for appletiOS does not support applets
PassAPPLET inside FIGURE with FIGCAPTION elementTouchFigure caption for applet
PassEMBED inside FIGURE with FIGCAPTIONTouchStart playback, button. Figure caption for embed
PassOBJECT with fallback contentTouchFallback content for object
PassIFRAME with fallback contentTouchThis is an, example hyperlink, link, in the target page.Fallback content is ignored
PassIFRAME with titleTouchThis is an, example hyperlink, link, in the target page.
PassBUTTON wraps only an IMG with an ALT attributeTouchThis is image alt, button
PassBUTTON wraps IMG with aria-labelTouchThis is image aria label, button
PassBUTTON wraps IMG with aria-labelledbyTouchThis is aria labelled by, button
PassBUTTON with TITLE wraps IMG with null ALTTouchThis is button title, button
PassBUTTON with aria-label wraps IMG with null ALTTouchThis is button aria label, button
PassINPUT type=image with ALT attributeTouchThis is image button alt text, button
PassINPUT type=image with TITLE attributeTouchThis is image button title text, button
PassINPUT type=image with aria-label attributeTouchThis is image button aria label text, button
PassINPUT type=image with aria-labelledby attributeTouchThis is image button aria-labelled by text, button
PassINPUT type=text with aria-describedby attributeTouchFirst name, text field, a bit of instructions for this field linked with aria describedby, double tap to edit
PassINPUT type=text with TITLE attributeTouchEnter search text, text field, double tap to edit
PassINPUT type=text with aria-label attributeTouchEnter search text, text field, double tap to edit
PassINPUT type=text with aria-labelledby attributeTouchEnter search text, text field, double tap to edit
PassINPUT type=text with LABEL FORTouchEnter search text, text field, double tap to edit
PassINPUT type=text inside LABEL with text before controlTouchEnter search text, text field, double tap to edit
PassINPUT type=text inside LABEL with text after controlTouchEnter search text, text field, double tap to edit
PassINPUT type=text inside LABEL with text before and after controlTouchEnter search text blanks not allowed, text field, double tap to edit
PassFIELDSET containing linksTouchLegend for enclosed links. Home, link. About, link. Contact, link.
PassIMG with null ALT attributeTouch Nothing Ignored as expected
PassIMG with ALTTouchThis is alt text, image
PassIMG with TITLETouchThis is title text, image
PassIMG with aria-labelTouchThis is an aria label, image
PassIMG with aria-labelledbyTouchThis is an aria labelled by, image
PassA link wraps IMG with ALTTouchThis is a link alt, link image
PassA link wraps IMG with TITLETouchThis is an image title, link image
PassA «click here» link with TITLE attributeTouchClick here, link, this is a link title
PassA «click here» link with aria-label attributeTouchThis is an aria label, link
PassA «click here» link with aria-labelledby attributeTouchThis is an aria labelled by link
PassA «click here» link with aria-describedby attributeTouchClick 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 gridReadingMorning, table start. Afernoon. Free. Busy, table end.
PassData table with SUMMARY and THReadingMorning, table start. Afternoon. Morning, free. Afternoon, busy, table end.
PassData table with CAPTION and THTouchData table caption, table start, morning. Afternoon. Morning, free. Afternoon, busy, table end.
PassData table with TH cell headersReadingMorning, table start. Afternoon. Morning, free. Afternoon, busy, table end.