Manual accessibility testing
Runbook for manual keyboard and screen reader testing of Rizzo components: prerequisites, step-by-step checks, and results log.
Overview
This runbook guides manual keyboard and screen reader testing of Rizzo CSS components. Use it before a release or when adding or changing interactive components. Run automated tests first, then work through the priorities below. Each row links to the component doc page so you can open it and test the live demo.
Full prose and component matrix: Accessibility and docs/ACCESSIBILITY.md (repo).
Before you start
- Automated tests β Run
pnpm test:a11yand fix any failures. Manual testing does not replace axe, keyboard, and ARIA specs. - Build and preview β Use
pnpm build && pnpm preview(or your deployed docs URL). Test against the same build you will ship. - Browser and AT β Use a recent Chrome, Firefox, or Safari. For screen reader: NVDA (Windows), VoiceOver (macOS: Cmd+F5), or JAWS (Windows). Disable mouse for keyboard-only passes.
- Theme β Optional: lock theme (e.g.
data-theme="github-dark-classic") so contrast and focus rings are consistent while testing.
Priority 1 β High interaction (test first)
Test these components with keyboard-only, then with a screen reader (NVDA, VoiceOver, or JAWS).
| Component | What to test | Doc page |
|---|---|---|
| Modal | Focus moves into modal when opened; focus trapped inside (Tab/Shift+Tab); Escape closes and focus returns to trigger; ARIA: role=dialog, aria-modal, aria-labelledby; screen reader announces purpose. | Modal |
| Dropdown | Trigger opens menu; arrow keys move; Enter/Space activates and closes; Escape closes and returns focus; nested submenus if any; ARIA: aria-expanded, role=menu/menuitem; screen reader announces menu and items. | Dropdown |
| Theme Switcher | Same as Dropdown; selected theme announced; ARIA: expanded, selected, menuitemradio. | Theme Switcher |
| Font Switcher | Same as Dropdown (in Settings or standalone); arrow keys, Enter to select pair; Escape closes; preview and label announced. | Font Switcher |
| Tabs | Tab reaches tab list; arrows change tab; Enter/Space activates; panel updates and is announced; ARIA: tablist, tab, tabpanel, aria-selected, aria-controls. | Tabs |
| Search (Cmd+K) | Open with keyboard; focus in input; Escape closes and returns focus; results keyboard navigable and announced. | Search |
| Settings | Open/close with trigger; focus trap when open; Escape closes; theme, font size, font pair, sound effects, and other toggles keyboard operable and announced. | Settings |
| Accordion | Headers focusable; Enter/Space toggles; ARIA: aria-expanded, aria-controls; screen reader announces expanded/collapsed. | Accordion |
Priority 2 β Forms and feedback
| Component | What to test | Doc page |
|---|---|---|
| Forms | All inputs reachable by Tab; labels associated (for/id or aria-label); error/required announced; ARIA: aria-required, aria-invalid, aria-describedby. | Forms |
| Tooltip | Trigger focus shows tooltip; keyboard user can read it; no focus trap. | Tooltip |
| Toast | New toasts announced (live region); dismiss focusable and keyboard operable. | Toast |
| CopyToClipboard | Button has accessible name; success feedback announced. | Copy to Clipboard |
Priority 3 β Navigation and layout
| Component | What to test | Doc page |
|---|---|---|
| Navbar | Skip link or main content first; nav links and mobile menu keyboard accessible; mobile menu open/close and focus trap. | Navbar |
| Docs Sidebar | Nav landmark; group labels and links focusable in order; current page indicated (e.g. aria-current or visible active state); collapse/expand if present. | Docs Sidebar |
| Footer | Landmark (role="contentinfo" or semantic footer); links focusable with clear names; no interactive traps. | Footer |
| Pagination, Breadcrumb, Buttons, Badge, Card, Table | Links/buttons focusable with clear names; table headers associated if sortable. | Components overview |
| Sound Effects | When used standalone: checkbox focusable, label "Play sound on click" and help text announced; state change announced. (When in Settings, covered by Settings.) | Sound Effects |
Tools
- Keyboard-only β No mouse. Tab, Shift+Tab, Enter, Space, arrows, Escape. Confirm all actions possible and no focus traps (except intentional in modal/search/settings).
- Screen reader β NVDA (Windows), VoiceOver (macOS: Cmd+F5), or JAWS. Check announcements (labels, state changes, live regions).
- 200% zoom β Test at 200% browser zoom (or 200% text scaling). Content should reflow without horizontal scrolling.
- Increased font size β Use the Settings font-size slider or OS font-size settings.
- Color blindness / vision β Browser DevTools (e.g. Chrome Rendering β Emulate vision deficiencies) to check information is not conveyed by color alone.
- axe DevTools β Browser extension for one-off page scans.
- Lighthouse β Chrome DevTools β Lighthouse β Accessibility for periodic checks.
Step-by-step example: Modal
Use this pattern for other Priority 1 components. Open Modal and follow in order.
- Tab to the trigger button (βOpen modalβ). Activate with Enter or Space.
- Confirm focus moves into the dialog (first focusable element or the dialog container).
- Tab and Shift+Tab repeatedly β focus must stay inside the modal (no focus on page behind).
- Press Escape β modal closes and focus returns to the trigger button.
- Re-open the modal. With a screen reader, confirm the dialog is announced (e.g. βdialogβ and title/aria-labelledby). Navigate and confirm focus and labels are announced correctly.
Results log
Copy the table below (or use a spreadsheet) to log results. Record Pass, Fail, or N/A and add notes for failures or follow-ups.
| Component | Keyboard | Screen reader | Notes |
|---|---|---|---|
| Modal | β | β | |
| Dropdown | β | β | |
| Theme Switcher | β | β | |
| Font Switcher | β | β | |
| Tabs | β | β | |
| Search | β | β | |
| Settings | β | β | |
| Accordion | β | β |
Screen reader quick reference
- NVDA (Windows) β Tab / Shift+Tab: focus; Down/Up: read next/previous line; Insert+Down: read all; Insert+F7: elements list (headings, landmarks, links).
- VoiceOver (macOS) β VO+Right/Left: move; VO+Shift+Down: enter group; VO+Shift+Up: leave group; VO+A: read all; VO+U: rotor (headings, links, landmarks).
- JAWS (Windows) β Tab / Shift+Tab: focus; Down/Up: read; Insert+Down: read next; Insert+F7: links list; Insert+F6: headings list.
Suggested order
- Keyboard-only pass on Priority 1 (Modal, Dropdown, Theme Switcher, Font Switcher, Settings, Tabs, Search, Accordion). Fix focus and traps.
- Screen reader pass on the same. Fix labels and announcements.
- axe DevTools on those pages. Fix reported issues.
- Repeat for Priority 2 and 3; update Best practices if you find new patterns.