Learning path · Level 12 · Tutorial 6

Audit a User Task with Keyboard and a Screen Reader

Audit one short user task with a keyboard and an available screen reader, record reproducible accessibility findings, and verify corrections through targeted manual and automated checks.

  • Level: Advanced
  • Duration: 25 min
  • 9 steps
Start tutorial Back to the path
Audit a User Task with Keyboard and a Screen Reader

What you will go through

  1. Define the Task and Its Expected Outcomes Prepare a reproducible local form task with explicit starting conditions, an invalid submission, and a successful correction. 3 min
  2. Run the Keyboard-Only Pass Complete the Workshop registration task without a pointer and collect concise evidence about focus movement, visibility, and recovery. 3 min
  3. Prepare One Screen-Reader Pairing Enable one available screen-reader/browser pairing, establish its key settings, and verify basic reading, silencing, and control activation locally. 3 min
  4. Separate Reading Navigation from Focus Separate screen-reader reading navigation, keyboard focus, and interaction mode while exploring and operating the registration form. 3 min
  5. Check Controls and Instructions in Context Evaluate the initial form controls through both reading navigation and direct keyboard focus in one selected screen-reader/browser pairing. 3 min
  6. Audit Error Recovery and Completion Feedback Observe the same form task through invalid recovery and completion, distinguishing field-level error information from dynamic feedback. 3 min
  7. Write a Reproducible Finding Convert keyboard and screen-reader observations into a concise finding that another tester can reproduce, while preserving uncertainty and coverage limits. 3 min
  8. Correct and Retest the Affected Behavior Correct the two intentional accessibility gaps, repeat the original manual task, and add focused Chromium regression coverage without treating automation as evidence of screen-reader speech. 4 min
  9. Deliver the Audit and State Its Limits Submit a concise, evidence-based audit summary that records what was tested, what the evidence supports, and what remains unverified. 2 min

What you will learn

  • Define and complete a short form task using only the keyboard, checking reachability, focus order, and visible focus.
  • Use basic reading and interaction commands in a local screen-reader/browser pairing.
  • Evaluate control names, instructions, error associations, and dynamic completion feedback during the same task.
  • Document reproducible findings with the tested browser and assistive-technology details.
  • Repeat targeted checks after a correction and state the limits of the combinations tested.

Before you start

  • Run State-Based Accessibility Scans with Playwright
  • Show Accessible Form Validation Feedback
  • Style Accessible Hover, Focus, and Disabled States

Step 1 of 9

Define the Task and Its Expected Outcomes

Prepare a reproducible local form task with explicit starting conditions, an invalid submission, and a successful correction.

Define the evidence before testing

One task, three states

Use one bounded task so every observation has a clear before-and-after condition.

  1. Open the form in its initial state.
  2. Enter alex in Email address.
  3. Select Send session reminders.
  4. Submit with Register and understand the error.
  5. Replace the email with alex@example.com.
  6. Submit again and confirm the complete state.

Use these fictional values only. This specimen simulates registration: it sends nothing and stores nothing.

For later screen-reader checks, evaluate whether the needed meaning is communicated. Do not require one universal spoken order or transcript.

State transition map

A three-panel diagram maps the Workshop registration form from initial to invalid to complete. The invalid panel returns focus to Email address, and the complete panel shows confirmation with focus on Register.

Set observable expectations from this map; do not treat it as a prediction of exact screen-reader speech.

Observable expectations

These are the observations to establish during the task. They describe the interface outcome, not a required assistive-technology transcript.

Expected evidence for the bounded task
StateEmail addressRemindersFeedback and focus
initialEmpty; requiredUncheckedInstruction is visible; no error or completion message
invalidContains alex; marked invalidCheckedError is visible; focus returns to Email address
completeContains alex@example.com; no invalid stateStill checkedError is gone; completion message is visible; focus remains on Register

Build the reproducible page

Assemble the local specimen

Create a local folder named task-audit, then create audit.html inside it. Paste the two sections below into that file in order. Together, they form one complete self-contained page with inline CSS and JavaScript.

Paste section 1 first without adding closing tags. Then append section 2 directly after it, save the file, and open task-audit/audit.html in a browser as a local file. Reloading the page restores the initial state.

audit.html — section 1 of 2

html
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Workshop registration</title>
  <style>
    body { font-family: system-ui, sans-serif; margin: 2rem; }
    main { max-width: 34rem; }
    form { display: grid; gap: 1rem; }
    label, input, button { font: inherit; }
    input, button { padding: 0.5rem; }
    input:focus-visible, button:focus-visible {
      outline: 3px solid #005fcc;
      outline-offset: 3px;
    }
    .field { display: grid; gap: 0.4rem; }
    .check { display: flex; gap: 0.5rem; align-items: center; }
    .error { color: #a40000; min-height: 1.5rem; }
  </style>
</head>
<body>
  <main>
    <h1>Workshop registration</h1>
    <form id="registration-form" novalidate>
      <div class="field">
        <label for="email">Email address</label>
        <input
          id="email"
          name="email"
          type="email"
          required
          aria-describedby="email-help"
        >
        <p id="email-help">Use a complete email address.</p>
        <p id="email-error" class="error" role="alert"></p>
      </div>

audit.html — section 2 of 2

html
      <label class="check">
        <input id="reminders" name="reminders" type="checkbox">
        Send session reminders
      </label>
      <button type="submit">Register</button>
    </form>
    <p id="signup-status"></p>
  </main>

  <script>
    const form = document.querySelector('#registration-form');
    const email = document.querySelector('#email');
    const emailError = document.querySelector('#email-error');
    const status = document.querySelector('#signup-status');
    const submitButton = document.querySelector('button[type="submit"]');

    form.addEventListener('submit', (event) => {
      event.preventDefault();

      if (!email.validity.valid) {
        emailError.textContent = 'Enter an email address such as alex@example.com.';
        email.setAttribute('aria-invalid', 'true');
        status.textContent = '';
        email.focus();
        return;
      }

      email.removeAttribute('aria-invalid');
      emailError.textContent = '';
      status.textContent = 'Registration complete.';
      submitButton.focus();
    });
  </script>
</body>
</html>
Expected output
Workshop registration

Email address
[empty required email input]
Use a complete email address.

[unchecked] Send session reminders
[Register]

No error text is shown.
No completion feedback is shown.

Open the completed file locally in a browser. This is the expected visible result immediately after opening or reloading it; later steps exercise its invalid and complete states.

Prepare a repeatable local check

Prepare one local pairing

Open audit.html directly in your browser as a local file. The specimen has no external assets, network requests, or persistence; reload it before each repeat to return to initial.

Prepare one local pairing for the later manual checks:

  • Windows: NVDA with Firefox.
  • macOS: VoiceOver with Safari.

Confirm that your browser and operating-system settings allow Tab to move through webpage controls. On macOS, if expected controls are skipped, check Safari’s webpage keyboard-navigation setting or the relevant macOS Keyboard navigation setting. Record the actual setting you verified or changed.

Record the environment without inventing version numbers: OS and version / browser and version / screen reader and version / relevant settings. If neither pairing is available, the later screen-reader check is Not tested.

Tip

Keep the task reproducible

The page is deliberately local and self-contained. It uses fictional registration data only and does not transmit or retain information. Reload before every new run so the same task starts from the same state.

Warning

Keep scan coverage in perspective

A clean automated accessibility scan from the preceding tutorial does not establish that this task is usable. It cannot by itself show reachable keyboard focus, understandable error recovery, or useful dynamic feedback through a screen reader.

Apply the task definition

Sequence the task

Put the actions of the defined audit task in the only order that preserves its intended state transitions.

  1. Check the error and the returned focus on Email address.
  2. Select Send session reminders.
  3. Enter `alex` in Email address.
  4. Replace the email value with `alex@example.com`.
  5. Activate Register.
  6. Reload the page to restore the initial state.
  7. Activate Register again and confirm the complete state.

Identify the completion evidence

After the second submission, which combined observation establishes successful error recovery and completion?

Step 2 of 9

Run the Keyboard-Only Pass

Complete the Workshop registration task without a pointer and collect concise evidence about focus movement, visibility, and recovery.

Set up the keyboard-only pass

Start from a controlled initial state

Turn the screen reader off for this pass. Open task-audit/audit.html, reload it, and begin from the initial state. After opening the file, do not use a mouse, trackpad, or touch input.

Use Tab to move forward and Shift+Tab to move backward. For every focused control, check two things: can you reach it in the task sequence, and can you visually identify the current focus location?

If Tab appears to skip native controls, first check the browser or operating-system keyboard-navigation setting. On macOS with Safari, enable the setting that allows Tab to highlight each item on a webpage when needed. Repeat from the initial state after changing a setting; a configuration condition is not automatically a page defect.

Focus order is observable evidence

A diagram shows a visible focus outline moving from an email field to a reminder checkbox and then to a registration button, with arrows in both directions.

Within the form, the intended forward order is Email address, Send session reminders, then Register. Reverse navigation should traverse the same controls in the opposite direction.

Tip

Evidence can confirm a pass

A keyboard pass can legitimately produce passing evidence. Record what happened instead of assuming that an audit must uncover a defect. Use Pass when the observed behavior supports the task, and use Fail only after reproducing the behavior from the documented initial state.

Complete the invalid-to-complete journey

Run the task and observe recovery

Perform the same bounded task defined earlier. Keep the checkbox selected in both submissions. Observe the visible focus indicator after every action, especially after each submission.

Keyboard actions and evidence

Use this sequence as a compact observation guide. Keep notes short, but include the state, action, and result label (Pass or Fail).

Keyboard-only task sequence
StateKeyboard actionsEvidence to capture
initialReload. Use Tab forward, then Shift+Tab backward.Actual reachable sequence; reverse sequence; visible focus.
invalidEnter alex. Tab to reminders; press Space. Tab to Register; press Space.Where focus lands after submission; whether it remains visible and reversible.
completeAt the email field, replace the value with alex@example.com. Tab through the already-selected checkbox to Register; press Space.Whether completion is visible; focus location; whether Tab and Shift+Tab still work.

Tip

Interpret what you observe

Use Space to toggle the focused checkbox. Use Space to activate the focused native button in this pass. A native button also commonly supports Enter, but do not assume that one activation key operates every kind of control.

After the invalid submission, check whether focus supports immediate correction. After the complete submission, verify that you can still move forward or backward rather than becoming trapped. Reaching browser chrome after moving past the last page control is not, by itself, a focus trap.

Report the observed result

Record the keyboard evidence

Complete the keyboard-only pass now. Report what you actually observed in your environment; do not infer a result from the intended fixture behavior.

Write at least 120 characters (0/120).

Step 3 of 9

Prepare One Screen-Reader Pairing

Enable one available screen-reader/browser pairing, establish its key settings, and verify basic reading, silencing, and control activation locally.

Select a supported local pairing

Choose one local branch

Choose exactly one pairing that you can run locally:

  • Windows: NVDA with Firefox.
  • macOS: VoiceOver with Safari.

Do not substitute a reference video, an illustration, or a different pairing for a local check. If neither pairing is available, record this check as Not tested rather than assuming equivalent behavior.

For the Windows branch, if NVDA is not installed, obtain the installer from the official NV Access site, install it locally, and launch NVDA from the Start menu. Use Firefox for this audit.

For the macOS branch, use the built-in VoiceOver reader with Safari. Turn VoiceOver on in System Settings > Accessibility > VoiceOver, or use Command+F5. On keyboards where function keys require it, use Fn+Command+F5.

A two-panel diagram comparing a Windows keyboard and browser with a Mac keyboard and browser, highlighting the modifier keys used by NVDA and VoiceOver.

Use one complete local pairing: NVDA with Firefox on Windows, or VoiceOver with Safari on macOS.

Configure and use essential commands

Make the configuration known

Establish these settings before testing. For NVDA, open Preferences > Settings > Keyboard, choose the Desktop keyboard layout, and confirm that NVDA is the configured modifier—normally Insert.

For VoiceOver, define VO as Control+Option. Keep Quick Nav off; if necessary, toggle it with Left Arrow+Right Arrow pressed together. Ensure your browser and system configuration allow Tab to move through webpage controls. Record the actual setting name and value if you change or verify one.

If your keyboard requires Fn for function keys, use it with the commands below.

Essential local commands

Use this short reference during the setup check. It is intentionally not a complete command catalog.

Commands for the selected screen-reader/browser pairing.
ActionNVDA with FirefoxVoiceOver with Safari
Start or stop readerLaunch NVDA from Start; exit with NVDA+QToggle with Command+F5
Read the current itemNVDA+TabVO+F3
Read continuouslyNVDA+Down ArrowVO+A
Silence current speechControlControl
Move focus forward or backwardTab / Shift+TabTab / Shift+Tab
Activate a focused native controlSpace for checkbox; Enter for buttonSpace for checkbox; Enter for button

Tip

Use Control to stop speech already in progress; it does not turn the screen reader off. Let speech begin before silencing it, so you verify both actions locally.

Verify local access before auditing

Perform a local setup check

Run a small setup check before testing task outcomes:

  1. Open task-audit/audit.html and reload it so the form is in the initial state.
  2. Start your selected screen reader.
  3. Use Tab to reach Email address, then use your branch's command for reading the current item. Let speech begin.
  4. Press Control to silence speech.
  5. Continue with Tab to Send session reminders and press Space once to select it. Do not submit the form yet.
  6. Reload the page to restore the initial state, then stop the screen reader when finished.

At this stage, verify only that you can start the reader, hear one item, silence speech, and activate a native control. Do not evaluate instructions, errors, or completion feedback yet.

Tip

Record the real environment

Record a concise note using the required finding fields:

  • Environment: actual OS and version / browser and version / screen reader and version / relevant settings
  • State: initial
  • Actions: the commands and control you used
  • Expected: reader starts; one item can be read, silenced, and activated
  • Observed: begin with Pass, Fail, or Not tested
  • Impact, Retest, Limits: state only what this setup check supports

When paraphrasing speech, write Meaning heard: followed by the meaning. Use quotation marks only for wording you actually observed. Do not invent version numbers or a universal spoken transcript.

Apply the selected pairing

Confirm the essential actions

Match each essential setup action to its command for the stated pairing.

Tap an item and then its matching pair.

Confirm your local setup result

Now report the result of the setup check you actually performed. Include:

  • Selected pairing: NVDA with Firefox or VoiceOver with Safari
  • Environment: actual OS and version / browser and version / screen reader and version / relevant settings
  • Result: Pass, Fail, or Not tested
  • Observed: whether speech began, whether Control silenced it, and whether Send session reminders changed state after Space

If you could not perform the check, use Not tested and state what was unavailable. If you paraphrase speech, begin with Meaning heard:.

Write at least 80 characters (0/80).

Step 4 of 9

Separate Reading Navigation from Focus

Separate screen-reader reading navigation, keyboard focus, and interaction mode while exploring and operating the registration form.

Recognize the two navigation targets

Two positions, two purposes

A screen reader can have a reading position while the browser has keyboard focus. The reading position is where the screen reader is exploring or reading. Keyboard focus is the element that receives keys such as typing, Space, Enter, and Tab.

They may appear to move together because tracking settings can synchronize them, but they are not the same thing. For example, you can read the email instruction without placing keyboard focus in the email field.

Use this distinction in the Workshop registration task: read the instruction, move focus to Email address, then enter and operate controls. The diagram is a model of the two positions—not evidence of what happens in your own environment.

Reading position and keyboard focus

Diagram showing a screen-reader reading cursor at an instruction while keyboard focus is on a separate email input.

The reading position can explore content while keyboard focus remains on the control that receives keystrokes.

Tip

Audit habit

Before recording a navigation problem, identify both positions: what the screen reader is reading and which element receives keyboard input. A surprising key result can be a mode or navigation issue rather than a page defect.

Select the method that fits the goal

Read, focus, then operate

Choose navigation based on your immediate goal. The commands below use the pairing prepared in the previous step; screen-reader settings can affect the details.

Navigation choices by pairing

Use reading navigation to understand surrounding content. Use Tab or Shift+Tab to put browser focus on a native control before typing or using its normal keyboard operation.

The task determines which position or mode matters.
GoalNVDA with FirefoxVoiceOver with SafariWhat to check
Read the email instructionBrowse mode; use reading navigationUse VO+Right Arrow or VO+Left ArrowReading position reaches the instruction
Enter an emailFocus mode usually activates for the editable field; type normallyUse Tab to move keyboard focus, then typeThe email input receives text
Operate remindersTab to the checkbox; use SpaceTab to the checkbox; use SpaceThe checked state changes
Operate RegisterTab to the button; use Enter or SpaceTab to the button; use Enter or VO+SpaceThe button receives activation

Warning

Mode checks before a diagnosis

NVDA: Browse mode uses keys for document reading; focus mode sends relevant keys to a control. An editable field commonly triggers focus mode automatically. If a navigation key edits or moves the text caret when you intended to read, confirm the mode; NVDA+Space switches between browse and focus mode.

VoiceOver: With Quick Nav off, VO+Right Arrow moves VoiceOver navigation, while Tab moves keyboard focus. When VoiceOver presents a relevant group, use VO+Shift+Down Arrow to interact and VO+Shift+Up Arrow to stop interacting. VO means Control+Option.

Apply the navigation distinction

Choose the next navigation action

In NVDA with Firefox, keyboard focus is in the Email address input. Pressing Down Arrow moves the text caret, but the tester wants to explore nearby page content rather than edit the email. What should the tester do first?

Step 5 of 9

Check Controls and Instructions in Context

Evaluate the initial form controls through both reading navigation and direct keyboard focus in one selected screen-reader/browser pairing.

Compare two navigation paths

Keep the task bounded

Stay within the initial portion of the same Workshop registration task. Reload audit.html so the form returns to its initial state, turn on your selected screen-reader/browser pairing, and do not submit the form yet.

First, use reading navigation briefly to encounter the instruction near the email field. Then move keyboard focus directly to Email address, select Send session reminders, and continue to Register.

This comparison answers two different questions:

  • Can nearby content be discovered while reading?
  • Does the control itself communicate the information needed when it receives focus?

Only the second question establishes the relationship a person receives when navigating directly to the control.

Reading nearby content versus focusing a control

A split diagram compares a reading cursor moving through surrounding form content with keyboard focus landing directly on an email control.

Reading navigation can find adjacent text. Direct keyboard focus checks what is communicated in the control's own context.

Tip

Capture meaning, not a scripted announcement

Do not try to capture a universal spoken transcript. Screen readers and settings can change the order and wording. In your notes, paraphrase the meaning with the prefix Meaning heard:. Use quotation marks only for wording you actually observed.

Gather direct-control evidence

Check controls where users operate them

For each direct-focus check, listen for enough information to operate the control confidently. A useful record identifies the control’s meaningful name and role, plus its current value or relevant state. Record whether guidance remains available when you arrive at the email field directly—not only after reading nearby content.

Operate the checkbox with its native keyboard action, then listen again for its changed state. Reach the button with keyboard focus and confirm its purpose before moving on. Keep the form in the initial state; error recovery and completion feedback are checked later.

Initial-state control checklist

Use this as a compact observation checklist. Record what your actual pairing communicates; do not mark an item as heard merely because the corresponding text is visible on screen.

Direct focus and interaction provide stronger evidence than nearby reading alone.
TargetDirect-focus evidence to checkInteraction evidence
Email addressMeaningful name and input role; current value and required state as communicatedGuidance is available when focus arrives directly
Send session remindersMeaningful name and checkbox role; current stateAfter its native keyboard toggle, the changed checked state is communicated
RegisterMeaningful name and button roleIts purpose is clear before activation

Distinguish the source of information

Classify the evidence

Match each observation to the kind of evidence it provides.

Tap an item and then its matching pair.

Apply the contextual check

Record the communicated meaning

Reload to the initial state and perform the initial portion of the task with your screen reader: use reading navigation to locate nearby guidance, move focus to Email address, select Send session reminders, then move to Register. Do not submit.

In your response, create three short direct-control records—one for the email input, checkbox, and button. Begin each with Meaning heard: and state the meaning communicated about name, role, and relevant value or state. Then add a separate line beginning Nearby text discovered by reading navigation: describing only information you found before direct focus.

Do not invent a quotation. If something was not communicated, say so clearly.

Write at least 180 characters (0/180).

Step 6 of 9

Audit Error Recovery and Completion Feedback

Observe the same form task through invalid recovery and completion, distinguishing field-level error information from dynamic feedback.

Observe the invalid transition

Submit the invalid attempt

Run the invalid transition

Reload audit.html so the form is in the initial state. Use your selected screen reader and browser pairing.

Using keyboard focus, enter alex in Email address, select Send session reminders, move to Register, and activate it. Let ordinary speech finish before pressing another reading or navigation key.

Then capture three separate observations:

  • Where keyboard focus lands after submission.
  • Whether the problem identifies the affected field and tells you how to recover.
  • Whether that error is still available when you return focus to Email address.

Do not treat one state cue as proof of the whole error. For speech you did not transcribe exactly, record a semantic note beginning with Meaning heard: rather than presenting a guessed universal transcript.

type=image

A three-stage diagram shows the form moving from initial to invalid with focus returned to the email field, then to complete with focus remaining on Register.

Treat each arrow as a transition to observe: focus, error availability, and later completion feedback.

Test error recovery at the field

Separate state from recovery information

An announcement or state such as invalid can establish that the field has a problem. It does not by itself establish that the screen reader can obtain the actual error text when the field receives focus again.

After invalid submission, first note the focused item. Then move away and return to Email address using normal keyboard focus navigation. This isolates the field-level experience from information you may have encountered only by reading nearby page content.

Invalid-state observation prompts

Use this compact record while the form is in the invalid state. Capture what your pairing communicates, not an assumed order of name, role, state, and description.

Record the outcome and any meaningful speech paraphrase in your notes.
CheckProbeEvidence to capture
Focused destinationImmediately after activating RegisterWhich control has keyboard focus
Problem stateReturn focus to Email addressWhether an invalid state is conveyed
Recovery textKeep focus on Email addressWhether the error explains the needed correction
Error availabilityLeave and return to the fieldWhether the error remains available on return
Position recoveryMove forward and backward afterwardWhether normal navigation continues without a trap

Evaluate dynamic completion feedback

Check the correction and completion transition

Continue from the invalid state. Replace alex with alex@example.com; keep Send session reminders selected. Return to Register and activate it.

The resulting complete state updates the feedback container with Registration complete. and keeps keyboard focus on Register. Before searching or reading elsewhere, pause and allow normal speech to finish. Ask whether completion became apparent at that moment.

Next, use keyboard focus to return to Email address and check for stale invalid or error information. A corrected field should not continue to present obsolete failure feedback.

Warning

Repeat uncertainty from the same start

A message that can be found later by reading around the page is not necessarily feedback that was communicated when it appeared.

If completion was unclear, reload to initial and repeat the same two attempts: alex plus selected reminders, then alex@example.com plus selected reminders. Keep the same browser, screen-reader settings, and navigation method. Nearby reading, interrupted speech, or a changed setting can explain an uncertain result; record that uncertainty rather than guessing.

Record your evidence

Document the transition you observed

Write a short evidence note from one run, using the state names invalid and complete. Describe what your selected screen reader communicated after the invalid submission and after the correction. Include: where focus went after each submission; whether the error was available when you returned to Email address; whether the error explained recovery; whether stale error information remained after correction; and whether completion was apparent without a manual search. Use Meaning heard: for paraphrased speech.

Write at least 350 characters (0/350).

Step 7 of 9

Write a Reproducible Finding

Convert keyboard and screen-reader observations into a concise finding that another tester can reproduce, while preserving uncertainty and coverage limits.

Build evidence, not a verdict

Turn notes into a record

A reproducible finding lets another tester repeat one result in one stated environment. It is evidence about this task—not a verdict on the whole site.

Begin with a result label: Pass, Fail, or Not tested. Then preserve enough context to reproduce the result:

  • Environment: actual OS and version / browser and version / screen reader and version / relevant settings.
  • State: initial, invalid, or complete.
  • Actions: exact keys, entered values, checkbox action, and whether you used keyboard focus or reading navigation.
  • Expected, Observed, Impact: what should happen, what actually happened, and the task consequence.

Use the versions your computer reports. Do not replace them with assumed version numbers.

Evidence structure

A diagram of connected cards representing environment, state, actions, expected behavior, observed behavior, impact, and limits in one audit record.

A finding connects the test context to an observed outcome and its task impact.

Write with traceable boundaries

Facts first; interpretation second

Keep observation and interpretation separate. Observed contains facts from your run: focus location, visible feedback, keys used, and a concise semantic paraphrase of speech. Prefix a paraphrase with Meaning heard:. Use quotation marks only for wording you actually captured.

A suspected implementation cause is not an observation. Put it in a separate Suspected cause note and qualify it: “not confirmed by this check” or “requires source inspection.” Do not turn a suspected cause into a claim that a change has fixed anything.

For a supported Pass, say what was checked and what passed. For an unavailable check, use Not tested rather than filling the gap with an assumption.

Finding field guide

Use these fields consistently. Add a result label at the top and keep Suspected cause clearly separate from the required finding fields.

A concise record gives someone else a repeatable test, not just a conclusion.
FieldRecordAvoid
ResultPass, Fail, or Not testedAn unqualified overall verdict
EnvironmentActual OS / browser / screen reader / relevant settingsAssumed versions
Stateinitial, invalid, or completeA vague point in the journey
ActionsKeys, `alex` or `alex@example.com`, checkbox, submission, navigation method“Tested the form”
ExpectedSpecific task outcomeA source-code diagnosis
ObservedDirect behavior; use `Meaning heard:` for a paraphraseInvented universal speech
ImpactConcrete user uncertainty or barrierA broad conformance claim
RetestCurrent result, or Not testedA promised future outcome
LimitsUntested combinations or behaviorsClaims beyond this environment

Example

Example

Illustrative supported Pass record — adapt it; do not copy it as your result.

Result: Pass

Environment: [actual OS and version] / [actual browser and version] / screen reader off / pointer not used.

State: complete

Actions: From initial, use Tab to reach Email address; enter alex; use Space to select Send session reminders; activate Register; correct the value to alex@example.com; activate Register again.

Expected: Completion feedback is visible and focus remains on Register.

Observed: The completion feedback was visible, and keyboard focus remained on Register.

Impact: No keyboard-only barrier was established for this completion check.

Suspected cause: Not applicable; no failure was observed.

Retest: Not tested — no correction was applied in this record.

Limits: This supports the keyboard-only check in the stated browser. It does not establish screen-reader behavior or results in other combinations.

Do not manufacture a failure

Label unavailable evidence

You completed the keyboard-only task successfully, but no screen reader was available on this computer. Which result label belongs to the screen-reader portion of the audit?

Your evidence-based finding

Produce one reproducible record

Write one record from your own audit. It may be a Fail supported by evidence, a supported Pass, or a Not tested record for an unavailable check.

Include: Result; Environment; State; Actions; Expected; Observed; Impact; a separate Suspected cause note; Retest; and Limits. Use the actual task inputs and describe whether your evidence came from keyboard focus or reading navigation. Keep observed facts separate from any unconfirmed cause.

Write at least 400 characters (0/400).

Step 8 of 9

Correct and Retest the Affected Behavior

Correct the two intentional accessibility gaps, repeat the original manual task, and add focused Chromium regression coverage without treating automation as evidence of screen-reader speech.

Apply the Targeted Correction

Reveal and Correct the Two Gaps

Only after preserving your baseline records, reveal the two intentional gaps in audit.html:

  1. The email input describes email-help but does not include email-error, so the conditional error is not part of its programmatic description.
  2. The existing completion container receives new text but has no live-region semantics.

Make only the two edits shown next. Keep the existing validation, focus behavior, help text, error text, error styling, and error alert behavior unchanged. The completion container must expose its semantics in the initial state, before text is inserted in the complete state.

Two Relationships to Repair

Diagram showing the email input connected to both help and error information, plus a completion container prepared to announce a later message.

The corrected email relationship includes persistent help and conditional error information. The completion container has notification semantics before success content is inserted.

Two Targeted Markup Edits

In audit.html, replace only the email input opening tag and the completion container opening tag with these versions. Leave the surrounding label, help paragraph, error paragraph, and JavaScript exactly as they are.

html
<input
  id="email"
  name="email"
  type="email"
  required
  aria-describedby="email-help email-error"
>

<p id="signup-status" role="status"></p>

Manually Retest from a Known State

Repeat the Original Task, Not a New One

Save the edits and reload audit.html. This restores the initial state. Use the same manual environment, screen-reader settings, and browser keyboard-navigation settings that you documented for the baseline.

First repeat affected keyboard observations with the screen reader off. Then repeat the affected task with the screen reader on. Do not substitute an automated result for a screen-reader retest. Let ordinary speech finish before deciding whether the completion feedback was communicated.

Use the original inputs in both attempts: enter alex, select Send session reminders, and activate Register; then correct the field to alex@example.com, keep reminders selected, and activate Register again.

Retest Record

Use Pass, Fail, or Not tested. Keep the actual manual environment separate from automated Chromium details.

Retest the same invalid-to-complete journey with reminders selected in both attempts.
StateActionsEvidence to record
initialReload; use Tab and Shift+Tab through the three controls.Reachability, logical order, and a visible focus indicator.
invalidEnter alex; select reminders; activate Register.Email receives focus; returning directly to Email address makes the error available. If applicable, write Meaning heard: followed by a paraphrase.
completeEnter alex@example.com; keep reminders selected; activate Register.Stale invalid feedback is removed; focus remains on Register; completion is apparent without searching the page.
limitsRepeat uncertain observations from initial.Actual pairing and settings, plus behavior not tested.

Tip

Keep the Evidence Types Separate

A DOM-exposed description, role, focus position, or status text can be protected with automation. None of those checks proves that a particular screen reader delivered speech at a useful time, without duplication or disruption. Your manual retest supplies that communication evidence.

Automate the Corrected States

Add a Focused Chromium Regression Check

From task-audit, create playwright.audit.config.ts and audit.spec.ts using the complete files below. If this folder does not yet have package.json, the first command creates it. The spec constructs a local file URL, so it needs no server.

The test logs the actual Chromium version. Record that automated browser detail separately from your manual Firefox/NVDA or Safari/VoiceOver environment. This is a Chromium DOM and browser-behavior regression check, not a screen-reader test.

Install and Run

Run these commands from task-audit after saving the two files below.

bash
npm init -y
npm install -D @playwright/test @axe-core/playwright
npx playwright install chromium
npx playwright test --config=playwright.audit.config.ts --project=chromium
Expected output
Automated Chromium: <actual Chromium version>

  1 passed (<actual duration>)

Package-installation output varies and is omitted. The version and timing below are examples of variable fields; preserve the actual values from your run.

Playwright Configuration

Save as playwright.audit.config.ts. It limits discovery to this local regression file and runs the supplied check in Chromium.

typescript
import { defineConfig } from '@playwright/test';

export default defineConfig({
  testDir: '.',
  testMatch: 'audit.spec.ts',
  projects: [
    {
      name: 'chromium',
      use: { browserName: 'chromium' }
    }
  ]
});

Regression Spec

Save as audit.spec.ts. It asserts the corrected error description and focus in invalid, then stale-error removal, focus, and status content in complete. Each scan is tied to the rendered state; neither scan is evidence of screen-reader speech.

typescript
import { expect, test } from '@playwright/test';
import AxeBuilder from '@axe-core/playwright';
import path from 'node:path';
import { pathToFileURL } from 'node:url';

const auditUrl = pathToFileURL(path.resolve('audit.html')).href;

test('retests corrected registration feedback', async ({ page }) => {
  console.log('Automated Chromium:', page.context().browser()?.version());
  await page.goto(auditUrl);

  const email = page.getByLabel('Email address', { exact: true });
  const reminders = page.getByRole('checkbox', {
    name: 'Send session reminders',
    exact: true
  });
  const register = page.getByRole('button', {
    name: 'Register',
    exact: true
  });

  await email.fill('alex');
  await reminders.check();
  await register.click();

  await expect(email).toBeFocused();
  await expect(email).toHaveAccessibleDescription(
    /Use a complete email address\.\s+Enter an email address such as alex@example\.com\./
  );
  expect((await new AxeBuilder({ page }).analyze()).violations).toEqual([]);

  await email.fill('alex@example.com');
  await register.click();

  await expect(email).not.toHaveAttribute('aria-invalid', 'true');
  await expect(page.locator('#email-error')).toHaveText('');
  await expect(register).toBeFocused();
  await expect(page.getByRole('status')).toHaveText('Registration complete.');
  expect((await new AxeBuilder({ page }).analyze()).violations).toEqual([]);
});

Verify and Record the Retest

Complete the Semantic Locator

Complete the targeted assertion for the corrected completion feedback.

typescript
await expect(page.getByRole()).toHaveText('Registration complete.');

Classify the Evidence

What does the completed automated assertion establish?

Preserve Before-and-After Evidence

Create a concise before-and-after retest record from your actual work. Include all four parts:

  1. Before correction — manual environment, state, and the observed error-description or completion-feedback behavior.
  2. After correction — the same manual environment and the corresponding retest result.
  3. Automated Chromium — Pass, Fail, or Not tested; name the completed locator/assertion and identify it as DOM-level evidence.
  4. Limits — one untested combination or behavior.

Prefix every paraphrase of speech with Meaning heard:. Do not infer manual speech from the automated result.

Write at least 220 characters (0/220).

Step 9 of 9

Deliver the Audit and State Its Limits

Submit a concise, evidence-based audit summary that records what was tested, what the evidence supports, and what remains unverified.

Assemble evidence, not a verdict

Evidence has boundaries

A diagram showing one audit handoff assembled from keyboard, screen-reader, and automated-test evidence, with a visible boundary around what was not tested.

Combine evidence from each check, but keep the coverage boundary visible.

Summary

Final review

A useful handoff is short enough to act on and specific enough to reproduce. It reports evidence—not a broad accessibility verdict.

  • Name the exact task and the states exercised: initial, invalid, and complete.
  • Record the actual manual environment separately from the automated browser details.
  • Keep Pass, Fail, and Not tested results tied to the check that supports them.
  • For each supported finding, retain Environment, State, Actions, Expected, Observed, Impact, Retest, and Limits.
  • State what remains unverified. A pass in one pairing is not universal accessibility or conformance.

Write the summary so another tester can use it

Handoff template

Use this compact structure for the handoff:

Scope — Workshop registration: from initial, enter alex, select Send session reminders, submit, understand and correct the error with alex@example.com, then confirm completion.

Manual environment — Record actual OS and version / browser and version / screen reader and version / relevant settings. List keyboard-only results and the one screen-reader/browser pairing separately, using Pass, Fail, or Not tested.

Findings — For every supported result, use: Environment; State; Actions; Expected; Observed; Impact; Retest; Limits. Distinguish what you heard or observed from a suspected code cause. For speech, write Meaning heard: before a paraphrase; quote only wording you actually captured.

Correction and retest — State whether the targeted correction was applied and whether the original task was repeated from initial with the same inputs and settings.

Automation — Record Chromium and its actual reported version separately. Describe behavioral assertions and state-based scan results as automated evidence, not as a screen-reader test.

Limits — Name untested pairings, unavailable checks, or behavior not established. Do not conclude that the page is universally accessible or conformant.

Tip

Keep the claim proportional

A defensible conclusion is narrow: for example, it can say that a particular observation passed or failed in the stated environment after the stated actions. It cannot turn an untested combination into a pass. Leave unresolved and Not tested checks visible.

Produce the audit handoff

Final application

Write your final audit handoff for the Workshop registration task. Identify the task and tested states; give your actual manual environment; report supported keyboard and screen-reader results; include any supported finding with the required fields; state correction and retest outcomes; record automated Chromium evidence separately; and name at least one meaningful coverage limit. Use only claims supported by checks you actually performed.

Write at least 500 characters (0/500).

Finish

Tutorial completed

Congratulations! You completed: Audit a User Task with Keyboard and a Screen Reader

Audit complete. Reuse the sequence: define one task, run keyboard-only checks, repeat it with a screen reader, document evidence, correct, retest, and disclose the limits of what you tested.

Download the App now to have access to + 5000 free courses, exercises, certificates and lots of content without paying anything!

  • 100% free online courses from start to finish

    Thousands of online courses in video, ebooks and audiobooks.

  • More than 60 thousand free exercises

    To test your knowledge during online courses

  • Valid free Digital Certificate with QR Code

    Generated directly from your cell phone's photo gallery and sent to your email

Cursa app on the ebook screen, the video course screen and the course exercises screen, plus the course completion certificate