Manual test procedure
Before manual testing be sure to run automated in-browser testing first, logging any issues raised:
Deque's
WebAIM's
Keyboard
Ensure all interactive elements are reachable via keyboard.
- Use the tab key to check every element that requires focus receives focus.
- Check each focusable element has a clear and distinguishable focus state.
- Check the focus order matches the visual order and makes sense – that it doesn't jump out of sequence.
- Check there is a skip-to-content link which appears first in the page's tab order.
- Check the skip-to-content link jumps straight to the main content, preferably the
h1
. - Check interactive elements do not contain other focusable interactive elements.
Add this bookmarklet to the browsers bookmarks to highlight all keyboard tab stops
Modals
Check keyboard focus is managed correctly:
- Check keyboard focus is locked within the open modal.
- Check the background page cannot receive keyboard focus while the modal is open.
- From the URL bar, check keyboard focus is moved straight into an open modal.
- Check the esc key exits the modal.
- Check an open modal is not closed by pressing esc while dismissing active: tooltips, dropdowns, selects, multi-selects, popups, pop-overs, etc.
- Check the modal has a visible close button. Preferably, one top right, and one at the end of the modal.
- Upon closure, check keyboard focus returns to the activating button or link.
- If the activating button or link is deleted as part of the function, then check focus is returned to the nearest, most sensible, element, heading or container.
Page information
- Check the page, or view,
title
is unique, descriptive, informative, and front-loaded. - Check that a language is set on the
html
element. - Check any element which has a change of language is marked with an appropriate
lang
attribute.
Headings
- Check there is only one
h1
per page, view, or document. - Check headings are used in strict descending order,
h1
throughh6
. Don't skip heading levels. - Check headings contain an appropriate description of the content that follows. Remember that a heading applies to all the content that follows until another heading or landmark is reached.
Add this bookmarklet, to the browsers bookmarks, to outline all headings:
Lists
- Check lists:
ul
,ol
anddl
are used appropriately. - Check list HTML has
role="list"
iflist-style: none
is applied via CSS.
Add this bookmarklet, to the browsers bookmarks, to outline all lists:
Images
- Check embedded images have a meaningful
alt
text. - Check decorative images have a an empty
alt=""
. - Check embedded SVGs contain a meaningful
title
. - Check there's a text alternative for complex images such as: graphs, charts and maps.
Forms
Forms should be intuitive and easy to use, with simple, clear, instructions and prompts.
- Check every form control is keyboard accessible.
- Check every form control has an associated
label
. - Check labels use the
for
attribute to explicitly associate to the form control. - Check each form control includes necessary instructions, either in the
label
, oraria-describedby
. - Check information such as: required, input format, how to use, and errors are available to all users.
- If only some fields are required, then clearly indicate in an accessible manner.
- Check the user is alerted to validation error messages.
- Check data is not lost between submission attempts.
- Check validation error messages are clear, apparent and appropriate.
- Check groups of form controls, for example radio buttons, are contained within a
fieldset
and identified by alegend
. Alternatively, userole="group"
, then usearia-labelledby
to point to a legend equivalent.
Best practice suggests each label, and each control, are left aligned, explicitly associated, and, if not a radio or checkbox, appear on their own line.
Landmarks
- Check the header (content that remains the same across the site or app) is in a
header
element or has arole="banner"
. - Check the main navigation is in a
nav
element or has arole="navigation"
. - If there is a secondary navigation block, Check each
nav
has a label with a distinguishing name. Examples:aria-label="main"
,aria-label="section"
- Check the content area is in a
main
element or has arole="main"
. - Check the footer area is in a
footer
element or has arole="contentinfo"
. - If there is a search function, contain it within a
role="search"
, but don't overwrite an implicit role such asform
.
Add this bookmarklet, to the browsers bookmarks, to outline all landmarks: