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 iframe
outline won't change colour upon focus.
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: