Keyboard Accessibility Testing
Keyboard accessibility testing checks that every function of a page or app can be reached and operated without a mouse or touch, that the user always knows where focus is, and that focus moves in an order that makes sense. It is the fastest high-value accessibility check a tester can run — all it needs is a keyboard and discipline — and it catches defects that also break screen reader, switch and voice-control use.
This guide lists the WCAG 2.2 success criteria involved, shows how to run a keyboard session, explains focus order, visible and unobscured focus, keyboard traps and bypass blocks, gives the expected keys for common custom widgets from the ARIA Authoring Practices Guide, and ends with a test-case checklist, defect examples and what can be automated.
Who depends on the keyboard and which criteria apply
Many people never use a mouse: blind users navigate with a screen reader driven from the keyboard; people with tremors or limited hand movement use a keyboard, a switch device or voice control that emulates keystrokes; others simply prefer it. On phones and tablets, external keyboards and switch access use the same focus model. If something cannot be reached by keyboard, all of these users are locked out of it.
These WCAG 2.2 success criteria are the core of a keyboard test:
- 2.1.1 Keyboard (A) — all functionality is operable through a keyboard interface without requiring specific timings for individual keystrokes (freehand drawing and similar path-dependent input are the exception).
- 2.1.2 No Keyboard Trap (A) — if focus can move into a component with the keyboard, it can move out with the keyboard; if a non-standard key is needed, the user is told which.
- 2.1.4 Character Key Shortcuts (A) — single-character shortcuts can be turned off or remapped, or only work while the relevant component has focus.
- 2.4.1 Bypass Blocks (A) — there is a mechanism to skip blocks repeated on many pages, such as a skip link.
- 2.4.3 Focus Order (A) — focus moves in an order that preserves meaning and operability.
- 2.4.7 Focus Visible (AA) — keyboard focus has a visible indicator.
- 2.4.11 Focus Not Obscured (Minimum) (AA) — a focused component is not entirely hidden by author-created content such as sticky headers or banners.
- 3.2.1 On Focus (A) — receiving focus does not by itself cause a change of context.
- Related: 1.4.13 Content on Hover or Focus (AA) for tooltips and popovers, and the AAA criteria 2.1.3 Keyboard (No Exception), 2.4.12 Focus Not Obscured (Enhanced) and 2.4.13 Focus Appearance.
How to run a keyboard test session
Put the mouse out of reach and start with focus in the browser address bar, so the first Tab lands on the first element of the page. Work through the page in both directions and operate every control. The keys you need:
- Tab and Shift+Tab — move to the next and previous focusable element.
- Enter — activate links and buttons, submit forms. Space — activate buttons, toggle checkboxes, open some selects.
- Arrow keys — move within composite widgets: radio groups, tabs, menus, listboxes, sliders, grids.
- Escape — close dialogs, menus, popovers and tooltips.
- Home, End, Page Up, Page Down — jump within lists, sliders and long widgets where the pattern defines them.
Focus order, visible focus and focus not obscured
Focus order should follow the reading order of the layout: in a left-to-right page from top-left to bottom-right, in an Arabic right-to-left page from the top right. Order breaks when the DOM order differs from the visual order (CSS grid or flex reordering, absolutely positioned panels) or when authors use positive tabindex values, which pull elements ahead of everything else. tabindex="0" adds a custom control to the natural order and tabindex="-1" makes an element focusable by script only; positive values are almost always a defect.
Left-to-right page: dir="ltr"
From top-left to bottom-right.
- First Tab from the address bar:
- Skip link, top left
Arabic right-to-left page: dir="rtl"
The same DOM order, mirrored: it starts from the top right.
- First Tab from the address bar:
- Skip link, top right
Defect: positive tabindexFail
Pulled ahead of everything else: fails 2.4.3 Focus Order.
- First Tab from the address bar:
- Newsletter field in the footer, ahead of the skip link and header
Illustrative page. Numbers are Tab stops; the heading has none, because nothing non-interactive is a Tab stop; see KB-03.
The focus indicator must be visible on every focusable element and against every background it sits on. The most common cause of failure is a global "outline: none" with no replacement style. Check links inside text, buttons in coloured banners, cards, and inputs inside dark footers. WCAG 2.2 AA requires only that an indicator is visible; the AAA criterion 2.4.13 Focus Appearance adds size and contrast requirements that make a good design target.
Finally, check that focus is never entirely hidden. Sticky headers and footers, cookie banners, chat launchers and bottom sheets often cover the focused element as the page scrolls, which fails 2.4.11 Focus Not Obscured (Minimum). Tab through long pages with every sticky element present, including at 200% zoom where they cover more of the viewport.
Keyboard traps and bypass blocks
A keyboard trap is any place focus can enter but not leave. Typical suspects are embedded third-party content in iframes (maps, video players, payment fields), rich-text editors that capture Tab to insert indentation, custom date pickers, and focus-management scripts in dialogs that keep pulling focus back after the dialog is closed. Test each by tabbing in, then trying Tab, Shift+Tab and Escape to get out. If leaving requires something unusual, the component must tell the user how.
Bypass blocks is about effort, not possibility. If a keyboard user must press Tab forty times to get past the navigation on every page, the page may be operable but it is not usable. WCAG 2.4.1 requires a mechanism to skip repeated blocks. A "Skip to main content" link as the first focusable element is the most direct one for keyboard users; landmarks and headings also serve screen reader users. Verify that the skip link becomes visible when focused, and that activating it actually moves focus — not just the scroll position — so the next Tab goes to the first control in the main content.
Custom widgets and the expected key patterns
Native HTML controls — button, a with href, input, select, textarea, details — come with keyboard behaviour built in. Custom widgets built from div and span elements have none until developers add it, and ARIA roles do not add it either. The W3C ARIA Authoring Practices Guide (APG) documents the keyboard interaction users expect for each common pattern; use it as the expected result in your test cases. In composite widgets the whole widget is usually one Tab stop and arrow keys move inside it.
- Button — Enter and Space activate. A div that responds only to click fails.
- Checkbox — Space toggles. Radio group — Tab enters the group at the checked option; arrow keys move and select.
- Tabs — Tab moves into the tab list to the active tab; Left and Right arrows move between tabs; Tab again moves into the panel.
- Menu button — Enter or Space opens the menu and focuses the first item (Down Arrow may also open it); arrows move; Escape closes and returns focus to the button.
- Combobox and listbox — Down Arrow opens or moves through options; Enter selects; Escape closes the popup.
- Slider — arrow keys change the value by a step; Home and End go to the minimum and maximum.
- Right-to-left layouts — APG assigns the horizontal arrow keys (Right Arrow for the next tab or a higher slider value) without addressing right-to-left layouts, so it gives no separate RTL rule. In a mirrored Arabic layout, the expected result this topic uses (see the accessibility testing pillar and the RTL testing guide) is that horizontal arrows follow the visual direction: the next tab sits to the left, so Left Arrow moves to it, and on a slider mirrored so that its minimum is on the right, Left Arrow increases the value. Up and Down Arrow, Home and End keep their meaning. Record the rule in the design specification and check that every widget applies it the same way.
- Disclosure and accordion — Enter or Space expands and collapses the section.
- Dialog (modal) — Tab and Shift+Tab stay inside the dialog; Escape closes it.
Modal dialogs, menus and dynamic content
Focus management is where most single-page applications fail. When a modal dialog opens, focus must move into it — to the first field, the first actionable element, or the dialog heading for long content. While it is open, Tab must cycle inside the dialog and the page behind must not be reachable. When it closes, focus should return to the element that opened it, so the user continues where they were. The native dialog element opened with showModal() handles much of this; custom dialogs must do it in script.
Apply the same rule to every change the user triggers: after deleting a row, focus should move to a neighbouring row or a status message, not fall back to the top of the document; after a client-side route change, focus should move to the new page’s heading or main region; menus and popovers opened by keyboard should close with Escape and return focus to their trigger. Content that appears on hover must also appear on keyboard focus and be dismissible without moving focus (1.4.13 Content on Hover or Focus).
Keyboard test cases
Run these for every page type and every complete process in scope. Each line is a test case with its expected result; record failures with the success criterion.
KB-01 First Tab from the address bar lands on a skip link that becomes visible on focus
KB-02 Activating the skip link moves focus to main; next Tab reaches the first control in main
KB-03 Tab reaches every interactive element; nothing non-interactive is a Tab stop
KB-04 Shift+Tab reverses the order exactly
KB-05 Focus order matches the reading order (check LTR and RTL layouts)
KB-06 Focus indicator visible on every stop, on every background
KB-07 No focused element is fully hidden by sticky header, footer, cookie banner or chat widget
KB-08 Buttons activate with Enter and Space; links with Enter
KB-09 Custom widgets follow APG keys (tabs: arrows; menu: Enter/Space, Esc; slider: arrows, Home/End)
KB-10 Modal: focus moves in on open, Tab cycles inside, Esc closes, focus returns to the trigger
KB-11 No trap: focus can leave every widget, iframe, video player and editor
KB-12 Tooltips and popovers shown on hover also show on focus and close with Esc
KB-13 Focus alone never submits, navigates or changes context
KB-14 Single-key shortcuts can be turned off or remapped, or work only when the component has focus
KB-15 After delete, add or route change, focus lands on a sensible element, not the document body
KB-16 Each complete process (e.g. checkout) can be finished with the keyboard onlyTry it: AI QA Checklist Generator Try it: Test Case Generator
Defect examples
Written as bug titles, with the criterion each one fails. State the browser, the exact key sequence and where focus ended up in the report.
- "Date picker cannot be operated with arrow keys; a date can only be chosen with the mouse" — 2.1.1 Keyboard.
- "Custom Accept terms checkbox (div) does not toggle with Space" — 2.1.1 Keyboard.
- "Tab focus gets stuck inside the embedded map iframe on the Branches page" — 2.1.2 No Keyboard Trap.
- "No skip link or landmarks; 42 Tab presses needed to reach the search results" — 2.4.1 Bypass Blocks.
- "Positive tabindex on the newsletter field sends the first Tab to the footer, ahead of the skip link and header" — 2.4.3 Focus Order.
- "Focus moves to the document start after closing the Filters drawer" — 2.4.3 Focus Order.
- "Focus ring removed on all links (outline: 0) with no replacement" — 2.4.7 Focus Visible.
- "Sticky cookie banner covers the focused Pay now button at 200% zoom" — 2.4.11 Focus Not Obscured (Minimum).
- "Focusing the language selector immediately reloads the page in Arabic" — 3.2.1 On Focus.
What you can automate
Rule engines catch some keyboard-related problems statically — positive tabindex, interactive roles that are not focusable, scrollable regions with no keyboard access — but they cannot judge order or visibility. Browser automation fills part of the gap: a Playwright, Cypress or Selenium test can press keys and assert which element has focus, which makes focus-management regressions in dialogs and route changes cheap to catch. Keep the manual pass for order, visibility and obscured focus, which need eyes.
test("edit address dialog returns focus to its trigger", async ({ page }) => {
await page.goto("/account/addresses");
const edit = page.getByRole("button", { name: "Edit address" });
await edit.focus();
await page.keyboard.press("Enter");
await expect(page.getByRole("dialog", { name: "Edit address" })).toBeVisible();
await expect(page.getByRole("textbox", { name: "Street" })).toBeFocused();
await page.keyboard.press("Escape");
await expect(page.getByRole("dialog")).toBeHidden();
await expect(edit).toBeFocused();
});Frequently asked questions
Why does Tab skip links in Safari on macOS?
By default Safari moves Tab only between form controls. Enable "Press Tab to highlight each item on a webpage" in Safari’s advanced settings, or use Option+Tab. Also turn on keyboard navigation in macOS keyboard settings before testing.
Should every element be focusable?
No. Only interactive elements should be Tab stops. Making headings or paragraphs focusable adds noise for keyboard users. Use tabindex="-1" when script needs to move focus to a non-interactive target, such as a heading after a route change.
Is a skip link required by WCAG?
WCAG 2.4.1 Bypass Blocks requires a mechanism to skip repeated blocks; a skip link is one way, and landmarks and headings are others. For sighted keyboard users a visible-on-focus skip link is the most direct mechanism.
What is the difference between Focus Visible and Focus Appearance?
2.4.7 Focus Visible (AA) requires that a focus indicator is visible. 2.4.13 Focus Appearance (AAA) adds requirements on the indicator’s size and contrast. Meeting AA is mandatory for most targets; the AAA criterion is a good design goal.
Does a keyboard pass replace screen reader testing?
No. A keyboard pass shows whether controls can be reached and operated; it does not show whether they have correct names, roles and states, or whether changes are announced. Run both, keyboard first.
How do I test keyboard access in a mobile app?
Pair a Bluetooth keyboard with the device and navigate with Tab and the arrow keys, and try the platform’s switch access. Check the same things as on the web: reachability, order, visible focus and no traps.
References
- Web Content Accessibility Guidelines (WCAG) 2.2The W3C Recommendation that defines the testable success criteria for accessible web content, organised under four principles and three conformance levels (A, AA, AAA).
- Understanding WCAG 2.2The informative explanation of each WCAG 2.2 guideline and success criterion: intent, who benefits, examples and techniques (not normative).
- ARIA Authoring Practices Guide (APG)Patterns for common widgets (tabs, menus, dialogs, comboboxes) with the expected keyboard interaction and ARIA usage — the reference testers compare custom components against.
- Easy Checks – A First Review of Web AccessibilitySimple first checks anyone can run — page title, text alternatives, headings, contrast, text resize, keyboard access — before a full evaluation.
- Accessibility — MDNPractical guides to building and checking accessible web pages: semantic HTML, ARIA, keyboard support and testing.
- Playwright DocumentationOfficial documentation for Playwright, an end-to-end test framework that drives Chromium, WebKit and Firefox.
Practice exercise
From keyboard session notes to defects
You test the appointment site of a private hospital (fictional), which has an English and an Arabic interface. Release 5.4 adds a "Book an appointment" page, and the accessibility target is WCAG 2.2 level AA. Before testing, you read a simplified excerpt of the page markup; then you ran a keyboard-only session in Chrome and wrote the notes N1–N11. Both are below. Names, roles and announcements are out of scope today: they belong to the screen reader session.
Work on paper with the guide’s keyboard test cases KB-01 to KB-16 and its list of success criteria. For each note, decide whether it records a failure or the expected behaviour, and turn the failures into defect reports a developer can act on. Allow 20–30 minutes.
Private hospital appointment site (fictional) - web, English and Arabic interface
Release 5.4 adds the page "Book an appointment". Accessibility target: WCAG 2.2 AA.
Markup excerpt (simplified, in DOM order)
<a class="skip" href="#main">Skip to main content</a>
<header class="site-header">
<a href="/"><img src="logo.svg" alt="Hospital home"></a>
<nav> Home | Clinics | Doctors | Offers | My appointments | Help </nav>
<select aria-label="Language"> English | Arabic </select>
<div class="btn" role="button" tabindex="0" onclick="openSignIn()">Sign in</div>
</header>
<main id="main">
<h1>Book an appointment</h1>
<input type="search" aria-label="Search doctors" tabindex="1">
<div role="tablist"> Dermatology | Dentistry | Paediatrics </div>
<div role="tabpanel"> 6 x (<a href="...">View profile</a> <button>Choose</button>)</div>
<section class="promo"> Winter offers ... <a href="/offers">See offer</a> </section>
<fieldset> Time slot: 8 x <input type="radio" name="slot">, 09:00 ... 12:30 </fieldset>
<div contenteditable="true" aria-label="Notes for the doctor"></div>
<button type="button">Book</button>
</main>
<footer> 4 x <a href="...">...</a>, <a href="/privacy">Privacy</a> </footer>
<button class="chat-launcher">Need help?</button>
<div role="dialog" aria-modal="true" hidden> Confirm booking: Confirm | Cancel </div>
CSS excerpt
.site-header { position: sticky; top: 0; }
.chat-launcher { position: fixed; bottom: 16px; }
.promo a:focus { outline: none; } /* no other focus style inside .promo */
Also: the promo banner is dark green; no time slot is selected when the page loads;
"Book" opens the dialog by removing its hidden attribute; a smooth-scroll script on the
skip link cancels the jump to #main and only scrolls the page to <main>.
Keyboard session - Chrome on Windows, staging build 5.4.0-rc2, English interface,
100% zoom unless stated. Mouse put away; start: focus in the address bar.
N1 Tab press 1: focus on "Search doctors" in the main content. Tab press 2: "Skip to
main content" appears top left. Then: logo, 6 nav links, language, "Sign in".
N2 Enter on the skip link: the page scrolls to "Book an appointment", but the next
Tab goes to the logo link in the header.
N3 "Sign in" shows a focus ring, but Enter and Space do nothing. Checked later with
the mouse: a click opens the sign-in dialog.
N4 Tabs: Tab lands on the active tab "Dermatology"; Right Arrow moves to
"Dentistry" and shows its doctors; the next Tab goes into the panel.
Arabic interface (mirrored): "Dermatology" is on the right, and Left Arrow
moves to "Dentistry".
N5 "See offer" in the promo banner: no focus indicator at all. Links elsewhere on
the page show a blue outline.
N6 Time slots: Tab goes to "09:00"; the other 7 slots are not Tab stops. Down
Arrow moves to "09:30" and selects it; the next Tab goes to "Notes for the
doctor".
N7 "Notes for the doctor": Tab inserts an indent, Shift+Tab removes it, Esc does
nothing, and nothing on screen says how to leave. You clicked once below the
editor to continue the session.
N8 Enter on "Book": the "Confirm booking" dialog appears, but focus stays on
"Book" behind it. Tab goes through the 5 footer links and "Need help?" before
it reaches "Confirm". Esc closes the dialog; focus is lost and the next Tab
goes to the first stop again, "Search doctors".
N9 200% zoom, Shift+Tab up through the doctor cards: twice, the focused "Choose"
button stops under the sticky header and cannot be seen at all.
N10 Footer: the "Need help?" launcher covers about half of the focused "Privacy"
link; the rest of the link and its outline stay visible.
N11 Pressing H on its own (no Ctrl or Alt) opens the Help panel from anywhere on
the page except text fields. Settings has no option to turn it off or change
the key.- Before reading the notes, read the markup: predict the first five Tab stops from the address bar, and list what in the markup you expect to fail and why.
- Go through N1–N11. For a failure, name the KB test case that fails and the WCAG 2.2 success criterion with its level; for expected behaviour, name the rule it follows.
- Write a bug title for each failure in the style of the guide’s defect examples, with the criterion and, where the markup shows it, the likely cause.
- Answer KB-16: can a keyboard-only user finish a booking? Then mark which failures a rule engine or a Playwright test could catch in later runs, and which need the manual pass.
Show the model answer
Step 1, the markup. The first five Tab stops are "Search doctors" (its tabindex="1" puts it ahead of everything in the natural order), the skip link, the logo link, Home and Clinics. After "Sign in" the next stop is the active tab: "Search doctors" is never reached in its place after the heading. Risks you can name before pressing a key: the positive tabindex (2.4.3); the skip-link script, which cancels the jump and only scrolls, so focus may stay on the link (2.4.1); the div with role="button" and tabindex="0", which is focusable and announced as a button but gets no Enter or Space behaviour from either attribute (2.1.1); outline: none inside .promo with no replacement (2.4.7); the sticky header and the fixed chat launcher, which can cover focused elements, more so at 200% zoom (2.4.11); the contenteditable editor, which may capture Tab (2.1.2); and the custom dialog, where aria-modal="true" tells assistive technologies that it is modal but neither moves focus nor keeps Tab inside (2.4.3). The <h1> not being a Tab stop is correct, and so is a single Tab stop for the eight radio buttons that share name="slot". Reading markup is static testing: it finds risks and some defects without running anything, and the session then shows which of them cause failures.
N1 — failure. KB-01 fails (the first Tab does not reach the skip link), and so does KB-05 (the order does not follow the reading order): 2.4.3 Focus Order (A). Cause: tabindex="1" on the search field, which is focusable without it. Title: "First Tab jumps to Search doctors in the main content, ahead of the skip link and header (positive tabindex)".
N2 — failure, KB-02. The skip-link script scrolls the page but does not move focus, so focus stays on the link and the user still passes 9 stops (logo, 6 nav links, language, Sign in) before the main content. Record it against 2.4.1 Bypass Blocks (A). WCAG also accepts landmarks and headings as a bypass mechanism, and this page has <header>, <main> and an <h1>, so an auditor may decide that 2.4.1 is formally met; it is a defect either way, because the link sighted keyboard users rely on does not do what it offers. Expected: Enter moves focus to <main>, and the next Tab reaches its first control ("Search doctors" once N1 is fixed); a script that scrolls must also move focus, for example to <main> given tabindex="-1". Title: "Skip to main content only scrolls the page; the next Tab goes to the header logo".
N3 — failure, KB-08: 2.1.1 Keyboard (A). role="button" and tabindex="0" make the div focusable and announce it as a button, but neither adds keyboard behaviour, and an onclick handler on a div does not run on Enter or Space. Likely fix: a native <button>, which runs the same handler on both keys. Title: "Sign in (a div with role button) ignores Enter and Space; signing in works only with a mouse".
N5 — failure, KB-06: 2.4.7 Focus Visible (AA). The CSS shows the cause: .promo a:focus { outline: none; } and no other focus style. Expected: a focus indicator that is visible on the dark green banner. Title: "No focus indicator on See offer in the Winter offers banner (outline removed)".
N7 — failure, KB-11: 2.1.2 No Keyboard Trap (A). An editor may use Tab for indenting only if there is another way out and, when that way is not a standard key, the user is told what it is — for example "Esc, then Tab" in the field’s hint. Here nothing works and nothing is said. Title: "Focus is trapped in Notes for the doctor: Tab and Shift+Tab change the indent, Esc does nothing".
N8 — failure, KB-10, with three failed expectations: focus does not move into the dialog when it opens, Tab reaches the page behind it, and focus does not return to "Book" when it closes. Record it against 2.4.3 Focus Order (A), like the guide’s Filters drawer example; Esc closing the dialog passed. One report is reasonable, because all three come from one missing piece, the dialog’s focus management: the native dialog element opened with showModal() handles much of it, as the guide says; a custom dialog needs a script that moves focus in, keeps Tab inside and returns focus to "Book". Title: "Confirm booking dialog: focus stays on Book behind it, Tab reaches the page, focus is lost on close".
N9 — failure, KB-07: 2.4.11 Focus Not Obscured (Minimum) (AA), because author-created content — the sticky header — hides the focused button entirely. Put the conditions in the report: 200% zoom, Shift+Tab, and the cards where it happened. A common fix keeps the header height clear when the page scrolls to a focused element, for example with the CSS property scroll-padding-top. Title: "At 200% zoom the sticky header fully hides the focused Choose button when tabbing backwards".
N11 — failure, KB-14: 2.1.4 Character Key Shortcuts (A). A single-character shortcut is allowed only if the user can turn it off, can remap it to include a modifier key such as Ctrl or Alt, or if it works only while a particular component has focus; H works page-wide and none of the three applies. It matters most to speech-input users, whose spoken words can arrive as key presses, and to anyone who hits a key by accident. Title: "Single-key shortcut H opens Help anywhere on the page and cannot be turned off or changed".
Expected behaviour, not defects. N4 passes KB-09: Tab lands on the active tab, arrows move between tabs and the next Tab enters the panel, as the APG tabs pattern describes; in the mirrored Arabic interface, Left Arrow moving to the next tab is the expected result this topic uses (horizontal arrows follow the visual direction). Record it as passed, and check that other horizontal widgets apply the same rule. N6 meets KB-03 and the radio group pattern: the group is one Tab stop, Tab enters at the checked option (at the first one when none is checked), and arrows move and select; reporting "Tab skips 7 slots" would be a false positive. N10 is not an AA failure: 2.4.11 and KB-07 fail only when the focused element is entirely hidden, and here half of the link and its outline stay visible. It does fail the AAA criterion 2.4.12 Focus Not Obscured (Enhanced), which allows no part to be hidden; with an AA target, record it as an improvement, not as an AA failure.
KB-16 fails: a keyboard-only user cannot finish a booking, because focus is trapped in "Notes for the doctor" (N7) before the "Book" button; you got past it only with the mouse. Report N7 first. N3 also locks keyboard users out of signing in. In total: 8 failures — 6 at level A (N1, N2, N3, N7, N8, N11) and 2 at AA (N5, N9) — 2 notes of expected behaviour (N4, N6) and 1 AAA improvement (N10). In ISTQB terms, the notes record observed behaviour; a failure is a deviation from the expected result, and the defect is its cause in the code, such as tabindex="1" or the removed outline.
Automation for later runs. A rule engine flags the positive tabindex (N1) without pressing a key. Playwright tests that press keys and assert which element has focus suit the behaviour fixes: the skip link moves focus into <main> (N2), Enter and Space on "Sign in" open the sign-in dialog (N3), Tab leaves the notes editor by the agreed way (N7), the dialog takes focus, keeps Tab inside and returns focus to "Book" (N8, like the guide’s example), and H does not open Help outside the agreed conditions (N11). Keep the manual pass for what needs eyes: the visible indicator on every background (N5), focus hidden behind sticky or fixed content (N9, N10), and whether the order makes sense in both layouts (N1, N4). Every report also needs the browser, the exact key sequence and where focus ended, as the guide asks, plus the build; the notes give you all four.
If your answer differs, check three things: each failure names the criterion that gives its expected result; N4, N6 and N10 are not reported as AA failures; and each title says what happens, where and with which key, so that a developer can reproduce it.
Your progress on this topic
Not started
Mark the topic complete when you have studied it and done the exercise.
Sign in to track your progress
Mark topics complete, continue where you left off and unlock specialisation exams.
Part of the QA Roadmap
Before this topic
Next topics
Tools mentioned in this guide
Generate a tailored QA checklist (functional, UI, API, security, performance, accessibility, release) for any feature with Mutqan AI.
Generate structured test cases (id, title, preconditions, steps, expected result, priority) from a feature description and field list.
Generate clear, searchable bug titles from a messy description with Mutqan AI.