One agent live · seven in development

Keyboard accessibility testing: real keys, real evidence

Keyboard accessibility testing means operating a site with nothing but the keyboard, and checking that every element can be reached, focus stays visible and nothing traps you. Reviseberg's keyboard agent does the part of that a machine can do reliably: it presses Tab through the pages you name – with real key events – and keeps a trail of every step as evidence, so you audit the test instead of repeating it.

Run a free scan – the full report includes a keyboard run

A small barrier. A real customer lost.

Illustrative example

Keyboard evidence

Tab

The journey starts with a key.

The agent follows the page’s tab order. The collection button receives focus, ready to open the dialog.

Focus visible · Button reached

Explore an illustrative keyboard test. No live scan is running.

Why test with the keyboard?

Many people use the web without a mouse: with a keyboard, with switches, with voice control, or with a screen reader that also moves through the page by keyboard. For them, a button that Tab never reaches does not exist. A dialog you cannot get out of ends the visit.

Rule-based scanners see little of this. They check one state of the page – whether an element has a positive tabindex, for instance. Whether you can actually get through a menu, a filter or a checkout only shows when someone presses the keys. That is why the keyboard agent exists.

What the keyboard agent does

You name the pages it should walk – basket, booking flow, application form. The agent drives Chromium with real key events, never a scripted focus call. A scripted call reaches elements the tab order does not – and that gap is exactly the bug it is looking for.

On every page it:

  • records how each focusable element looks without focus, before the first key press,
  • presses Tab and notes where focus lands, with the element's role and name,
  • compares the focused element with how it looked before – on the element, its ::before and ::after, its parent and the nearest elements inside it (a card used as a link often draws the ring on the card), and for a form control that is not drawn itself, on its visible label (how Bootstrap draws checkboxes), because design systems draw the focus ring on any of those,
  • checks whether focus lands on something with no size, something transparent or something off-screen,
  • looks for things that behave like controls but no Tab reaches,
  • checks whether the first focusable element is a working link to the main content,
  • confirms a keyboard trap with Tab, Shift+Tab and Escape before it calls it one.

It does not press Enter or Space: it does not open menus or dialogs. On a crawl from an account, the same walk also runs on one page of each template the crawl finds, and a check of our own presses controls there with Enter and Space. It reports a dialog or menu that focus neither moves into nor reaches next, focus that is dropped when it closes, and a trap or invisible focus inside it. Focus management in dialogs behind a step it cannot take remains a manual check.

The agent runs on every full crawl, on every plan and on the free account. In the free full report it walks the start page you give on the form. The instant one-page scan and single-page checks leave it out.

What it reports – and which WCAG criteria are involved

What the keyboard agent reports, and the criteria it is filed under
FindingRuleWCAG 2.2EN 301 549 (V3.2.1)
Something behaves like a control, but no Tab or arrow key reaches itkeyboard:unreachable2.1.1 Keyboard (A)9.2.1.1
Keyboard trap: focus cannot leave with Tab, Shift+Tab or Escapekeyboard:trap2.1.2 No Keyboard Trap (A)9.2.1.2
No working way to skip the repeated navigationkeyboard:skip-link2.4.1 Bypass Blocks (A)9.2.4.1
Focus lands on something with no size, or that is transparent or off-screenkeyboard:focus-invisible2.4.7 Focus Visible (AA)9.2.4.7
Focus lands on an element and nothing about it changeskeyboard:focus-visible2.4.7 Focus Visible (AA)9.2.4.7

If the agent finds no failure on its pages, these criteria stay "partial" rather than "passed": it walks the pages you named, not every page, and whether an order makes sense is ultimately a human call. Focus order (2.4.3) is therefore judged by a person – the agent's trail shows them the order it found. Whether a sticky header or a cookie banner covers the focused element (2.4.11) is not something the agent checks; it has a guided manual test instead. Our methodology explains how each status is derived.

Every finding shows its working

A score you cannot interrogate is a liability. Open a keyboard finding and you see the run that produced it. Auditors and developers look at the same artefact.

Every finding shows its working
StepEvidence keptWhat a person does with it
Every key pressThe key, the element that received focus, its role and its nameFollow the same path in 20 seconds
Every failureA screenshot of the page at that momentConfirm it, or mark it a false positive with a reason
Every verdictPass, fail or "human" – with a note saying whyDecide the ones the agent would not

Keyboard findings appear in the issue list with points back like everything else. Developers can pull them straight into their coding agent via the MCP server – keyboard:focus-visible with its selector and affected page, for example.

Run a keyboard test yourself in five minutes

Want to check for yourself first? Here is how to test a site's keyboard accessibility without any tool:

  1. Click into the address bar and press Tab. The first focused element should be a skip link ("Skip to content"). Enter should take you to the main content.
  2. Keep pressing Tab. Can you see where focus is at every step? Does the order follow the reading order?
  3. Open menus, filters and dialogs with Enter or Space. Close them with Escape. Does focus return somewhere sensible?
  4. Go back with Shift+Tab. Can you leave every area again?
  5. Watch sticky headers, cookie banners and chat widgets: do they cover the focused element?
  6. Complete your most important journey to the last step – without the mouse.

Five minutes for one page; too long for a whole site on every release. That is what the agent is for – and for steps 3 and 5, which it does not do, the guided tests in Reviseberg.

Honest limits

Some judgements are not ours to make. These stay with people, and the product says so in the interface rather than quietly guessing:

  • Plain-language quality and editorial intent
  • Sign-language interpretation quality
  • Legal sign-off on the accessibility statement
  • Flows requiring real payment or real identity documents
  • Anything the evidence leaves ambiguous – it is marked "human" rather than asserted

When the agent is wrong, you mark the finding a false positive with a reason; it then costs no points and no longer fails its criterion. Agreement rates against human auditors will be published once there is a run history to compute them from – not before.

Seven more agents, in development

One agent runs today: keyboard and focus. The seven below do not exist yet. None of them is in the product, none feeds a score or a status, and each is badged "In development" here until it is real.

  • Screen reader In development

    The page read with NVDA, JAWS and VoiceOver semantics. Output: the captured speech stream against what should have been announced.

  • Alt-text relevance In development

    A vision model asks whether the text describes this image, in this context. Today the model writes a suggestion for a missing alternative; judging an existing one is the next step.

  • Zoom, reflow & contrast In development

    400% zoom, 320 px reflow, text spacing, contrast in real rendered state including hover and focus styles.

  • Forms & errors In development

    Labels, instructions, error identification, error suggestion, required-field handling and whether errors reach assistive technology.

  • Media & captions In development

    Captions present and synchronised, audio description, autoplay, controls reachable by keyboard.

  • Pointer & voice control In development

    Target size, dragging alternatives, pointer cancellation, and whether visible labels match accessible names for voice control.

  • Content sense In development

    Link purpose out of context, heading outline, sensory-only instructions, language of parts.

Point the agent at your hardest page

Checkout, booking flow, application form: name the page the keyboard walk should start on – ideally the one your team dreads testing.

Run a free scan Book a demo

Frequently asked questions

How do I test a website's keyboard accessibility?

Use only Tab, Shift+Tab, Enter, Space and Escape. Check that every element can be reached, focus is always visible and you can leave every area. Reviseberg's keyboard agent does the Tab walks automatically and records every step.

What is a keyboard trap?

An area you can enter by keyboard but not leave – often a dialog, an embedded video or a widget. It fails WCAG 2.1.2. The agent only reports a trap once Tab, Shift+Tab and Escape have confirmed it.

Do regular accessibility scanners find keyboard problems?

Only partly. Rules spot individual code patterns, such as a positive tabindex. Whether focus is visible, disappears or gets stuck only shows when someone operates the page.

Does the agent use real key presses?

Yes. It drives Chromium with real key events. Scripted focus calls would reach elements a person pressing Tab never reaches.

Is the keyboard agent included in every plan?

Yes, it runs on every full crawl, including on the free account. The free full report includes a run from the start page you give.

Is there a screen reader agent?

Not yet. It is in development. Until it exists, the criteria that need a screen reader are covered by guided manual tests.

Sources

  1. W3C: WCAG 2.2 – https://www.w3.org/TR/WCAG22/
  2. W3C: Understanding SC 2.1.1 Keyboard – https://www.w3.org/WAI/WCAG22/Understanding/keyboard.html
  3. W3C: Understanding SC 2.1.2 No Keyboard Trap – https://www.w3.org/WAI/WCAG22/Understanding/no-keyboard-trap.html
  4. W3C: Understanding SC 2.4.7 Focus Visible – https://www.w3.org/WAI/WCAG22/Understanding/focus-visible.html
  5. W3C: Understanding SC 2.4.11 Focus Not Obscured (Minimum) – https://www.w3.org/WAI/WCAG22/Understanding/focus-not-obscured-minimum.html
  6. ETSI: EN 301 549 V3.2.1 – https://www.etsi.org/deliver/etsi_en/301500_301599/301549/03.02.01_60/en_301549v030201p.pdf

Further reading

  • Methodology

    How Reviseberg tests: axe-core rules, a keyboard agent, a status for every WCAG criterion, how the score is calculated, and where automation stops.

See what a scan finds on your site

One page in about thirty seconds, no email needed. The full report covers up to 100 pages and a keyboard journey.