What we test against WCAG 2.2
Accessibility testing is mostly a person’s job. A tool can find some failures reliably, help a tester gather evidence for others, and keep the record. This page says, criterion by criterion, which is which, so a report from LumensOS Pro Tester never claims more than it checked.
How to read this
- Automated checks use axe-core by Deque Systems and flag failures. A page with no flagged failure is not thereby conformant: most criteria also need a person.
- Narrow automated check means the only rule for that criterion looks at one specific thing. Nothing found there says very little, and the report says so.
- By hand criteria are judgement calls (are the captions right? is the focus order sensible?). LumensOS Pro Tester lists them as a checklist and records your result per site.
- “Planned” items are on the roadmap and are not counted as support until they are built. With all of them, 40 of 55 AA criteria would have an automated rule, 9 a guided test, and 6 would stay manual.
- WCAG 2.2 is the current W3C Recommendation (and ISO/IEC 40500:2025). Level A and AA are the usual legal and contractual targets. 4.1.1 Parsing was removed from WCAG 2.2 and is not listed.
1. Perceivable
| Criterion | Level | LumensOS Pro Tester today | What a person has to confirm |
|---|---|---|---|
| 1.1.1 Non-text Content | A | ● Automated checksaxe-core: aria-meter-name aria-progressbar-name image-alt +4 | Every image, icon, chart and image button has a text alternative that does the same job; purely decorative ones are hidden from assistive technology. Automation finds MISSING alternatives, not WRONG ones. |
| 1.2.1 Audio-only and Video-only (Prerecorded) | A | ◐ Narrow automated checkIt only notices audio with no transcript link on the page.axe-core: | Audio-only has a transcript; video-only has a transcript or an audio track describing it. |
| 1.2.2 Captions (Prerecorded) | A | ◐ Narrow automated checkIt only checks that a captions track exists, not that it is right.axe-core: video-caption | Play each video muted: captions exist, are in sync, and include speakers and meaningful sounds. |
| 1.2.3 Audio Description or Media Alternative (Prerecorded) | A | ◐ Narrow automated checkIt only notices video with no descriptions track, described version or transcript link.axe-core: | Video whose visuals carry meaning has audio description or a full text alternative. |
| 1.2.4 Captions (Live) | AA | ◐ Narrow automated checkIt only notices live streams without a captions track.axe-core: | Live streams have real-time captions. |
| 1.2.5 Audio Description (Prerecorded) | AA | ◐ Narrow automated checkIt only notices video with no descriptions track, described version or transcript link.axe-core: | Prerecorded video has an audio-description track. |
| 1.2.6 Sign Language (Prerecorded) | AAA | ○ By hand | Prerecorded audio has a sign-language interpretation. |
| 1.2.7 Extended Audio Description (Prerecorded) | AAA | ○ By hand | Where pauses are too short for description, the video pauses for an extended one. |
| 1.2.8 Media Alternative (Prerecorded) | AAA | ○ By hand | A full text alternative exists for prerecorded synchronised media and video-only content. |
| 1.2.9 Audio-only (Live) | AAA | ○ By hand | Live audio-only content has a text alternative. |
| 1.3.1 Info and Relationships | A | ● Automated checksaxe-core: aria-hidden-body aria-required-children aria-required-parent +6 | Structure that looks visual is also in the code: real headings, lists, table headers, form labels and groups. Compare with the headings/landmarks outline and with CSS off. |
| 1.3.2 Meaningful Sequence | A | ◐ Narrow automated checkIt only finds controls that CSS shows in a different order from the DOM (order, row-reverse); reading order of text is not checked.axe-core: | The reading order in the code matches the visual order (check with CSS off and with the tab order). |
| 1.3.3 Sensory Characteristics | A | ◐ Narrow automated checkIt only finds a few common phrasings that point at colour, shape, position or sound.axe-core: | Instructions never depend on shape, colour, size, position or sound alone ("press the green button", "see the right column"). |
| 1.3.4 Orientation | AA | ◐ Narrow automated checkIt only finds style rules in orientation media queries that hide large content or rotate it.axe-core: | Content works in both portrait and landscape unless one orientation is essential. |
| 1.3.5 Identify Input Purpose | AA | ◐ Narrow automated checkIt only checks autocomplete hints that are present, and fields whose purpose is obvious from their type or name.axe-core: autocomplete-valid | Fields that collect the user’s own details (name, email, address, card …) carry the matching autocomplete token. |
| 1.3.6 Identify Purpose | AAA | ○ By hand | The purpose of controls, icons and regions can be determined programmatically (landmarks, personalisation semantics). |
| 1.4.1 Use of Color | A | ◐ Narrow automated checkIt only checks links inside blocks of text, not errors, charts or states (the colour-vision previews in the report are for your eye).axe-core: link-in-text-block | Colour is never the only way to show a link inside text, an error, a required field, a chart series or a state. Check with the colour-vision simulator. |
| 1.4.2 Audio Control | A | ◐ Narrow automated checkIt only checks audio and video that start playing by themselves.axe-core: no-autoplay-audio | Audio that plays automatically for more than 3 seconds can be paused, stopped or muted. |
| 1.4.3 Contrast (Minimum) | AA | ● Automated checksaxe-core: color-contrast | Text is 4.5:1 (3:1 large) against what it really sits on. Text over photos, gradients and video cannot be judged from CSS: look at it. |
| 1.4.4 Resize Text | AA | ◐ Narrow automated checkIt only looks for text cut off, overlapping or buried by a fixed bar at 200 % zoom, not every loss of content or function.axe-core: meta-viewport | At 200% text size nothing is lost, clipped or overlapping, and no feature disappears. |
| 1.4.5 Images of Text | AA | ○ By hand | Real text is used instead of pictures of text (logos excepted). |
| 1.4.6 Contrast (Enhanced) | AAA | ● Automated checksaxe-core: color-contrast-enhanced | Text is 7:1 (4.5:1 large) against what it really sits on. |
| 1.4.7 Low or No Background Audio | AAA | ○ By hand | Speech in prerecorded audio has no background sound, or it is at least 20 dB quieter. |
| 1.4.8 Visual Presentation | AAA | ◐ Narrow automated checkIt only checks justified text, line length and line spacing of paragraphs; colours, resizing and paragraph spacing need a person.axe-core: | Users can choose colours; lines are at most 80 characters; text is not justified; line spacing is at least 1.5; text resizes to 200% without horizontal scrolling. |
| 1.4.9 Images of Text (No Exception) | AAA | ○ By hand | Images of text are used only for decoration or where the exact look is essential. |
| 1.4.10 Reflow | AA | ● Automated checksaxe-core: | At 320 CSS px wide (400% zoom on a 1280 px window) content needs no horizontal scrolling. Maps, data tables and charts are excepted. |
| 1.4.11 Non-text Contrast | AA | ◐ Narrow automated checkIt only checks the boundaries of form fields, not icons, focus rings, chart marks or custom controls.axe-core: | Input borders, icons, chart marks, focus rings and state indicators are at least 3:1 against what is next to them. |
| 1.4.12 Text Spacing | AA | ◐ Narrow automated checkIt only looks for text cut off once WCAG’s spacing is applied, not every layout break.axe-core: avoid-inline-spacing | With line height 1.5, paragraph spacing 2×, letter spacing 0.12 em and word spacing 0.16 em, nothing is clipped, hidden or overlapping. |
| 1.4.13 Content on Hover or Focus | AA | ○ By handPlanned: Hover and focus content (dismissible, hoverable, persistent) | Tooltips and pop-overs can be dismissed (Esc), hovered without vanishing, and stay until dismissed. |
2. Operable
| Criterion | Level | LumensOS Pro Tester today | What a person has to confirm |
|---|---|---|---|
| 2.1.1 Keyboard | A | ◐ Narrow automated checkIt only checks scroll areas, frames and things that look clickable but cannot be focused, not whether every widget works from the keyboard.axe-core: frame-focusable-content scrollable-region-focusable server-side-image-map | Everything works with the keyboard alone: links, menus, sliders, custom widgets, and an alternative to every drag. |
| 2.1.2 No Keyboard Trap | A | ○ By handPlanned: Keyboard traps | Focus can always leave a component with the keyboard (modals, embedded players, editors). |
| 2.1.3 Keyboard (No Exception) | AAA | ● Automated checksaxe-core: scrollable-region-focusable | Everything works with the keyboard alone, including path-dependent input such as freehand drawing. |
| 2.1.4 Character Key Shortcuts | A | ○ By hand | Single-key shortcuts can be turned off, remapped, or only work while their component has focus. |
| 2.2.1 Timing Adjustable | A | ◐ Narrow automated checkIt only checks for a meta refresh, not other time limits.axe-core: meta-refresh | Time limits can be turned off, adjusted or extended (at least 10×, or warned 20 seconds ahead). |
| 2.2.2 Pause, Stop, Hide | A | ◐ Narrow automated checkIt only checks blink, marquee and CSS animations over 5 seconds, not scripted motion.axe-core: blink marquee | Moving, blinking or scrolling content lasting over 5 seconds, and auto-updating content, can be paused, stopped or hidden. |
| 2.2.3 No Timing | AAA | ○ By hand | Timing is not an essential part of any event or activity. |
| 2.2.4 Interruptions | AAA | ● Automated checksaxe-core: meta-refresh-no-exceptions | Interruptions (alerts, updates) can be postponed or suppressed, except emergencies. |
| 2.2.5 Re-authenticating | AAA | ○ By hand | After a session expires, the user can continue without losing data. |
| 2.2.6 Timeouts | AAA | ○ By hand | Users are warned about inactivity timeouts that cause data loss. |
| 2.3.1 Three Flashes or Below Threshold | A | ◐ Narrow automated checkIt only finds CSS and Web Animations that switch opacity or visibility; video, canvas and GIF flashes are not measured.axe-core: | Nothing flashes more than three times in any second (run a flash analyser on suspect animation). |
| 2.3.2 Three Flashes | AAA | ● Automated checksaxe-core: | Nothing flashes more than three times in any second, at any intensity. |
| 2.3.3 Animation from Interactions | AAA | ○ By hand | Motion triggered by interaction can be disabled (honours prefers-reduced-motion). |
| 2.4.1 Bypass Blocks | A | ● Automated checksaxe-core: bypass | A skip link or landmarks let keyboard users jump past repeated blocks such as the header and navigation. |
| 2.4.2 Page Titled | A | ● Automated checksaxe-core: document-title | The title says what the page is about and differs from other pages. |
| 2.4.3 Focus Order | A | ◐ Narrow automated checkIt finds tab stops on non-controls, controls inside controls, positive tabindex, CSS-reordered rows and modal dialogs without focus; the order of a whole journey still needs a person.axe-core: | Tab moves through a meaningful, predictable sequence, including into and out of dialogs and menus. |
| 2.4.4 Link Purpose (In Context) | A | ● Automated checksaxe-core: area-alt link-name | Each link’s purpose is clear from its text plus its context ("Read more" needs the sentence around it). |
| 2.4.5 Multiple Ways | AA | ◐ Narrow automated checkIt only looks at this page for navigation, search, a site map and breadcrumbs.axe-core: | There is more than one way to find a page: search, site map, navigation, links. |
| 2.4.6 Headings and Labels | AA | ◐ Narrow automated checkIt only finds buttons that share the same short name in one area; whether headings and labels describe their topic needs a person.axe-core: | Headings and labels describe their topic or purpose. |
| 2.4.7 Focus Visible | AA | ◐ Narrow automated checkIt only finds focus that changes nothing at all, not a faint or low-contrast indicator.axe-core: | Keyboard focus is always visible. |
| 2.4.8 Location | AAA | ◐ Narrow automated checkIt only looks for breadcrumbs and aria-current in the navigation.axe-core: | Users can tell where they are in the site (breadcrumbs, current-page marking). |
| 2.4.9 Link Purpose (Link Only) | AAA | ● Automated checksaxe-core: identical-links-same-purpose | A link’s purpose is clear from its text alone. |
| 2.4.10 Section Headings | AAA | ◐ Narrow automated checkIt only finds long runs of paragraphs without a heading.axe-core: | Content is organised under section headings. |
| 2.4.11 Focus Not Obscured (Minimum) | AA new in 2.2 | ● Automated checksaxe-core: | A focused element is never completely hidden by a sticky header, cookie banner or chat widget. |
| 2.4.12 Focus Not Obscured (Enhanced) | AAA new in 2.2 | ● Automated checksaxe-core: | No part of a focused element is hidden by other content. |
| 2.4.13 Focus Appearance | AAA new in 2.2 | ◐ Narrow automated checkIt only measures outline thickness and contrast, not indicators drawn with backgrounds or shadows.axe-core: | The focus indicator is at least as thick as a 2 CSS px outline and changes by at least 3:1. |
| 2.5.1 Pointer Gestures | A | ○ By handPlanned: Pointer gestures, cancellation and motion actuation | Pinch, swipe and path gestures have a single-pointer alternative. |
| 2.5.2 Pointer Cancellation | A | ○ By handPlanned: Pointer gestures, cancellation and motion actuation | Actions fire on release (up-event), or can be aborted or undone. |
| 2.5.3 Label in Name | A | ◐ Narrow automated checkIt only compares visible text with the accessible name.axe-core: label-content-name-mismatch | The accessible name of a control contains its visible label text, so voice control works. |
| 2.5.4 Motion Actuation | A | ○ By handPlanned: Pointer gestures, cancellation and motion actuation | Shake or tilt features have a button alternative and can be disabled. |
| 2.5.5 Target Size (Enhanced) | AAA | ◐ Narrow automated checkIt measures size only; inline and equivalent-control exceptions beyond links in sentences need a person.axe-core: | Targets are at least 44 × 44 CSS px. |
| 2.5.6 Concurrent Input Mechanisms | AAA | ○ By hand | Touch, keyboard, mouse and voice can all be used on the same page. |
| 2.5.7 Dragging Movements | AA new in 2.2 | ◐ Narrow automated checkIt only finds elements marked draggable, not scripted drag and drop.axe-core: | Anything done by dragging can also be done with a single click or tap. |
| 2.5.8 Target Size (Minimum) | AA new in 2.2 | ● Automated checksaxe-core: target-size | Targets are at least 24 × 24 CSS px, or have enough spacing around them. |
3. Understandable
| Criterion | Level | LumensOS Pro Tester today | What a person has to confirm |
|---|---|---|---|
| 3.1.1 Language of Page | A | ● Automated checksaxe-core: html-has-lang html-lang-valid html-xml-lang-mismatch | The page declares its language and it is the right one. |
| 3.1.2 Language of Parts | AA | ◐ Narrow automated checkIt only checks the lang values that are present, not passages that lack one.axe-core: valid-lang | Passages in another language carry their own lang attribute. |
| 3.1.3 Unusual Words | AAA | ○ By hand | Idioms and jargon are explained. |
| 3.1.4 Abbreviations | AAA | ◐ Narrow automated checkIt only finds capitalised abbreviations with no expansion on the page.axe-core: | The meaning of abbreviations can be found. |
| 3.1.5 Reading Level | AAA | ◐ Narrow automated checkIt only measures English text with the Flesch–Kincaid grade.axe-core: | Text beyond lower-secondary reading level has a simpler version. |
| 3.1.6 Pronunciation | AAA | ○ By hand | Ambiguous pronunciations are given. |
| 3.2.1 On Focus | A | ○ By hand | Receiving focus never triggers an unexpected change of context. |
| 3.2.2 On Input | A | ○ By handPlanned: Form journey | Changing a field never submits or navigates unexpectedly, unless the user was told. |
| 3.2.3 Consistent Navigation | AA | ○ By hand | Repeated navigation appears in the same order on every page. |
| 3.2.4 Consistent Identification | AA | ○ By hand | Components with the same function are labelled the same everywhere. |
| 3.2.5 Change on Request | AAA | ● Automated checksaxe-core: meta-refresh-no-exceptions | Context changes happen only when the user asks for them. |
| 3.2.6 Consistent Help | A new in 2.2 | ○ By hand | Help (contact, chat, FAQ link) is in the same relative place on every page that offers it. |
| 3.3.1 Error Identification | A | ◐ Narrow automated checkIt only finds error messages already on screen next to a field that does not reference them; errors are not triggered.axe-core: | Submit with bad data: the error is described in text and tied to the field. |
| 3.3.2 Labels or Instructions | A | ◐ Narrow automated checkIt only checks for duplicate labels, not for missing ones.axe-core: form-field-multiple-labels | Every input has a visible label or instruction, including format hints and required markers. |
| 3.3.3 Error Suggestion | AA | ○ By handPlanned: Form journey | When the fix is known, the error message says what it is. |
| 3.3.4 Error Prevention (Legal, Financial, Data) | AA | ○ By handPlanned: Form journey | Legal, financial or data-changing submissions can be reversed, checked or confirmed. |
| 3.3.5 Help | AAA | ○ By hand | Context-sensitive help is available. |
| 3.3.6 Error Prevention (All) | AAA | ○ By hand | Every submission can be reversed, checked or confirmed. |
| 3.3.7 Redundant Entry | A new in 2.2 | ○ By handPlanned: Form journey | Information already entered in the same process is pre-filled or selectable, not retyped. |
| 3.3.8 Accessible Authentication (Minimum) | AA new in 2.2 | ◐ Narrow automated checkIt only finds blocked paste and switched-off autofill, not memory or transcription tests.axe-core: | Signing in needs no memory or transcription test without an alternative; paste and password managers work. |
| 3.3.9 Accessible Authentication (Enhanced) | AAA new in 2.2 | ○ By hand | Signing in needs no cognitive function test at all, not even object recognition. |
4. Robust
| Criterion | Level | LumensOS Pro Tester today | What a person has to confirm |
|---|---|---|---|
| 4.1.2 Name, Role, Value | A | ● Automated checksaxe-core: area-alt aria-allowed-attr aria-braille-equivalent +25 | Every control exposes a name, role and state to assistive technology and custom widgets follow ARIA patterns. Confirm with a screen reader. |
| 4.1.3 Status Messages | AA | ◐ Narrow automated checkIt only finds loading indicators and countdowns visible during the audit; messages after an action are not observed.axe-core: | Status updates (item added, saved, 12 results) are announced without moving focus. |
Test your own pages with LumensOS Pro Tester
Run the whole audit in one click on any page: contrast, 200 % zoom, reflow, text spacing, focus and more. Get a sealed, printable report with every failure marked on the page, and work through the checklist for what a tool cannot judge. Your first 3 reports are free. $9.99 a month, includes everything in Pro. Cancel any time.
LumensOS Pro Tester helps you test. It does not make a website conform to WCAG or any law, and a report from it is not a certificate of conformance.