automated in the continuous - nordic testing days · automated accessibility testing in the...

60
Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Upload: others

Post on 02-Jun-2020

14 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Automated accessibility testing in the continuous integration pipelineJesse Beach, Front End Engineer, Specialist in Accessibility

Page 2: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

● Front end engineer at Facebook

● Maintainer of the Quail automated testing project

● Accessibility maintainer of Drupal Core

● Rock climber

Page 3: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

tl;dr

●Lean on QA for critical flows

● Invest in tooling to reduce the testing surface

●Leverage existing tests where possible

●Push vendors to provide ever-better tools

Page 4: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Digital accessibility seeks to enable information interaction for all humans, whatever their unique abilities

Page 5: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Accessibility developer

●Ships code

●Balances concerns of performance & complexity

●Prefers usability over theory

Page 6: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Assistive technology

●Screen readers, speech-to-text

● (Automatic) captioning

●Braille output / input

●Voice and conversational interfaces

●Switch interfaces

Page 7: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Accessible UI component

●Label

●Role

●Focusable

Page 8: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Accessibility ModelAssistive tech service

Browser

PlatformAccessibilityAPI

Phone

Page 9: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Gaem, 8, a Thai girl who is blind, joins other students as they feel the elephants and temple within a bas-relief sculpture at Doi Inthanon National Park in

Chiang Mai, Thailand. BARBARA WALTON / EPA

Page 10: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Story time

Page 11: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Why test a11y features?

●OSX

●VoiceOver

●Aria-labelledby

●Chrome

Page 12: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility
Page 13: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Silent break

<div

tabindex="-1"

aria-labelledby="js_1 js_2 js_3">

<div role="article">

...content…

</div>

</div>

Page 14: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

The label should be

<div

tabindex="-1"

aria-labelledby="Jesse Beach posted on June 3rd. Having

a great time in Estonia!">

<div role="article">

...content…

</div>

Page 15: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

The label should be

<div

tabindex="-1"

aria-labelledby="">

<div role="article">

...content…

</div>

</div>

Page 16: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Accessibility testing approaches

Page 17: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

A11y checkers (machine)

●aXe, Pa11y, Quail, Tenon.io, achecker

●Work at a web page level

●Test against WCAG standards

● Impossible to get a green board (in my opinion)

●Require custom integration into process & toolchain

Page 18: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

A11y checkers (machine)

On a static, templatic site with simple interactions and

basic HTML, run by a small team with a laser-focused

product mission?

YES, this is probably a good solution for you.

Page 19: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

"aAdjacentWithSameResourceShouldBeCombined": {

"id": "aAdjacentWithSameResourceShouldBeCombined",

"cases": [{

"status": "fail",

"selector": "a[href=\"here.html\"]",

"html": "<a href=\"here.html\">Bamboo</a>"

}],

}

Page 20: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Expert evaluators (human)

●Thorough, knowledgeable and expensive

●Long remediation cycles

●They check the other ⅔ of WCAG, too

Page 21: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Expert evaluators (human)

Do you have little or no in-house accessibility expertise,

a pressing requirement to show progress in the

remediation of your product and have good processes to

manage contractors?

YES, this is probably a good solution for you.

Page 22: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

●Unit tests

● Integration tests

●Developer tools

●QA tests

Familiar CI approaches

Page 23: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Signal

Automated

Noise

Manual

Expert tester (small site)

Automated interaction tests

Automated a11y tests (large site)

Automated a11y tests (medium site)

Automated a11y testing (small site)

Users reporting bugs

Expert tester (large site)

QA reporting bugs

Developertools

Page 24: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Signal

Automated

Noise

Manual

Expert tester (small site)

Automated interaction tests

Automated a11y tests (large site)

Automated a11y tests (medium site)

Automated a11y testing (small site)

Users reporting bugs

Expert tester (large site)

QA reporting bugs

Developertools

Page 25: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

ConformancevsUser experience

Page 26: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Quality Assurance

Page 27: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

AX QA testing at Facebook

Trained a QA analyst to test Accessibility issues

Just a few, hi-pri flows

Trained product managers to triage accessibility issues

Undertaken once a month

Bugs are logged as regressions and are release blocking

The accessibility team is largely uninvolved

Page 28: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Developer tools

(reduce the testing surface)

Page 29: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

accessibility.parseapp.com

Page 30: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Nuclide<MyCoolComponentlabel={"Toggle notifications"}role={"toggle"} />^^^^^^^^^^^^^^^ -- "toggle" is an invalid for the attribute "role"

Page 31: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Automated tests

(Make the code you already wrote do more)

Page 32: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Developers will never do more work than is absolutely required

And writing new tests is painful

Page 33: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

iBuddy test framework

End to End tests in iOS

Similar to UI Automation

Coverage is solid and growing

Provides interaction convenience methods like

Keyboard.sendKeys

element.tap

Page 34: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

The types of actions taken in tests has a long-tail distribution

Page 35: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

find element, click / tap

Page 36: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

We slipped a code path into the tap method:

Fail if the tapped element is inaccessible.

Page 37: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Provide docs to fix the failure

Q: Why does elementIsVisible/isVisible/tap fail on my visible element?

A: Typically, this occurs because that element's isAccessibilityElement

field returns NO. To fix this, if the element's accessibility label should be

read out in voiceover mode, set isAccessibilityElement to return YES.

Page 38: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Roll it out slowly

● Opt-in tag "accessibility" in our testing framework

● Optimize heuristics for inaccessible components

○ In iOS, a Button is already an accessibility element, but it turns out that TextEdit

is not

● Run the opt-in tests every 15 minutes on master

● Help teams migrate their products, get them green, methodically

move to 100% coverage

Page 39: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Let's do the same thing for web!

Page 40: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

React + Jest:Unit-testing components● Fire a key event any time a click event is fired

● If a click event is attached to a component, make sure it has a

corresponding key event

● Assert that an element that can be click, can be focused

Page 41: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Results were mixed

● Turns out browsers fire click events on some element when a key

event is dispatched

● Because of composition and bubbling, we can't be sure if the key

event isn't handled somewhere else.

● Low number of tests even simulating clicks, like 0.5%

Page 42: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Let's try with WebDriver & Selenium

Page 43: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

In-house WebDriver wrappers

● Test that the interaction succeeded, not the an isolated

components behavior

● Assert that clickable elements are also focusable

● Co-opt the click actions

○ Run the whole test suite, firing simulated key-press events where ever a mouse

event is fired.

Page 44: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

protected function focusOnElement() {

if ($this->locationProvider) {

$this->mouse->click($this->locationProvider->getCoordinates());

}

}

Page 45: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Convenience methods

●pressTab

●arrow[Up, Down, Left, Right]

●pressEsc

●assertTabbable

●assertFocusable

Page 46: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

● So far, yes

● Same approach with iOS, isolate upgraded tests and opt-in

● Roll out slowly and with product team participation

Prospect for success?

Page 47: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Android has great support for automated AX testing

AccessibilityChecks class

Page 48: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Automated Android AX testing

● Existing services, supported by Google

○ google.github.io/android-testing-support-library/docs/accesibility-checking/

● Checks can be rolled out by product

● Be conservative with the view root to eliminate testing noise

across products

● Takes some fine-tuning

Page 49: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Push vendors to open more access points

(Next-level AX testing)

Page 50: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

AX information is not available in the DOM or through WebDriver(yet, but so close!...)

Page 51: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

EDGE WebDriver support

"[...] we’re working to help enable WebDriver support for automating

accessibility API testing." (September, 2015. link)

Page 52: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Accessibility ModelAssistive tech service

Browser

PlatformAccessibilityAPI

Phone

Page 53: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Accessibility ModelAssistive tech service

Browser

PlatformAccessibilityAPI

PhoneAXTree

Page 54: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

If we had access to the AX Tree in the browser, we could assert against values, not side effects

Page 55: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility
Page 56: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

What the DOM knows

<div

tabindex="-1"

aria-labelledby="js_1 js_2 js_3">

<div role="article">

...content…

</div>

</div>

Page 57: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

What the AX Tree knows

<div

tabindex="-1"

aria-labelledby="Jesse Beach posted on June 3rd. Having

a great time in Estonia!">

<div role="article">

...content…

</div>

Page 58: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

And finally, my dream product

Page 59: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Interaction recorder

● Product teams want to test their code in the same way they

interact with it.

● An interaction recording service that translated mouse UX to

keyboard UX and vice versa.

● When tests fail, watch a playback of the test in a browser and

breakpoint at the failed step.

Page 60: Automated in the continuous - Nordic Testing Days · Automated accessibility testing in the continuous integration pipeline Jesse Beach, Front End Engineer, Specialist in Accessibility

Lõpp