Index of test cases

Various focus indicator examples

Guidelines: Passing

Total bug count: 0

Popup appears on focus

This is a web page of test cases. You probably already knew that.

Expected Result:

  • Failure count for this test case: 0
  • axe-core findings for this test case (initial load): 0
  • axe-core findings that require additional scans: 0
Bug count breakdown
Rules Description Bug Count SCs
passing

The button doesn't have a traditional focus indicator, but its accessible name "close" appears on hover/focus.

Note: while this revealed content does not have a means to dismiss it, it does not fail 1.4.13 Content on Hover or Focus.

0 N/A

Tab widget

Apples

This tab widget requires explicit activation of a tab to render its associated tabpanel.

Here's a link just to test keyboard tabbing. (it's odd talking about tabs, and tabs.)

Bananas

This is an example of a heading being used to populate the tab's label, while also not removing heading from the tabpanel. This is done by adding the value "keep" to data-atabs-heading.

There are two headings here

The tab is getting its label from the data-atabs-tab-label. The heading is kept in the tabpanel because it does not have the data-atabs-heading attribute.

It wouldn't make much sense

If the contents of a tabpanel contain additional sub headings, it wouldn't make sense to remove the initial heading from the tabpanel. Doing so would create a gap in the heading structure.

Expected Result:

  • Failure count for this test case: 0
  • axe-core findings for this test case (initial load): 0
  • axe-core findings that require additional scans: 0
Bug count breakdown
Rules Description Bug Count SCs
passing

All focusable elements of the tab widget (the tabs, tabpanel and hyperlink within the tab panel) have visible focus indicators (outline, custom outline, box-shadow, or a combination).

NOTE: if one were hitting shift + tab to return to the tablist from content within a tabpanel, or after a tabpanel that contains no focusable elements, focus purposefully skips the tabpanel container so as to reduce the effort for a user to return to the tablist to select a new tab.

0 N/A

Visually hidden hyperlink

Expected Result:

  • Failure count for this test case: 0
  • axe-core findings for this test case (initial load): 0
  • axe-core findings that require additional scans: 0
Bug count breakdown
Rules Description Bug Count SCs
passing

The hyperlink is visually hidden by default, but appears when receiving keyboard focus.

0 N/A

Video controls

Expected Result:

  • Failure count for this test case: 0
  • axe-core findings for this test case (initial load): 0
  • axe-core findings that require additional scans: 0
Bug count breakdown
Rules Description Bug Count SCs
passing

While the UA outline has been overridden and set to none for the video element, when focused it still has a background color change. The controls of the video also retain their outline focus indicators, regardless of the outline: none set to the video element itself.

0 N/A

Object element

Expected Result:

  • Failure count for this test case: 0
  • axe-core findings for this test case (initial load): 0
  • axe-core findings that require additional scans: 0
Bug count breakdown
Rules Description Bug Count SCs
passing

Even though a class is set to the object to attempt to override the default UA outline style, the video rendered within the object does not respect the author style, and the UA focus indicator style is still displayed.

0 N/A

contenteditable div without an outline

text to edit

Expected Result:

  • Failure count for this test case: 0
  • axe-core findings for this test case (initial load): 0
  • axe-core findings that require additional scans: 0
Bug count breakdown
Rules Description Bug Count SCs
passing

While the UA outline of the content editable element has been set to none, the text cursor is still available and counts as a (poor) focus indicator, allowing for a technical pass of Focus Visible.

This is generally not considered a good user experience.

0 N/A

Text field

Expected Result:

  • Failure count for this test case: 0
  • axe-core findings for this test case (initial load): 0
  • axe-core findings that require additional scans: 0
Bug count breakdown
Rules Description Bug Count SCs
passing

While the UA outline of the text input element has been set to none, the text cursor is still available and counts as a (poor) focus indicator, allowing for a technical pass of Focus Visible.

This is generally not considered a good user experience.

0 N/A

Textarea

Expected Result:

  • Failure count for this test case: 0
  • axe-core findings for this test case (initial load): 0
  • axe-core findings that require additional scans: 0
Bug count breakdown
Rules Description Bug Count SCs
passing

While the UA outline of the textarea element has been set to none, the text cursor is still available and counts as a (poor) focus indicator, allowing for a technical pass of Focus Visible.

This is generally not considered a good user experience.

0 N/A

Standard button element

Expected Result:

  • Failure count for this test case: 0
  • axe-core findings for this test case (initial load): 0
  • axe-core findings that require additional scans: 0
Bug count breakdown
Rules Description Bug Count SCs
passing

The default UA outline for the button is present when focused.

0 N/A

Button variant 01

Expected Result:

  • Failure count for this test case: 0
  • axe-core findings for this test case (initial load): 0
  • axe-core findings that require additional scans: 0
Bug count breakdown
Rules Description Bug Count SCs
passing

While the deafult UA focus outline has been removed, a replacement focus style (changing the border of the button) has been specified. The border of #000 against the #008000 (dark green) background has a contrast ratio of 4.08:1, also passing non-text contrast requirements for the focus indicator.

0 N/A

Button variant 02

Expected Result:

  • Failure count for this test case: 0
  • axe-core findings for this test case (initial load): 0
  • axe-core findings that require additional scans: 0
Bug count breakdown
Rules Description Bug Count SCs
passing While a poor focus indicator, a dot appears just outside the right side of this button on focus. A small focus indicator such as this unfortunately passes Focus Visible. 0 N/A

Button variant 03

Expected Result:

  • Failure count for this test case: 0
  • axe-core findings for this test case (initial load): 0
  • axe-core findings that require additional scans: 0
Bug count breakdown
Rules Description Bug Count SCs
passing The default focus indicator is set to 0, and a border of the same background as the button has been declared. But, an inset 2px white box shadow has also been added,which creates a white border between the button's background and the button's green border - making it appear a green outline appears around the button when focused. 0 N/A

Button variant 04

Expected Result:

  • Failure count for this test case: 0
  • axe-core findings for this test case (initial load): 0
  • axe-core findings that require additional scans: 0
Bug count breakdown
Rules Description Bug Count SCs
passing A 3px left border focus indicator is provided along the left side of the button on focus 0 N/A

Button variant 05

Expected Result:

  • Failure count for this test case: 0
  • axe-core findings for this test case (initial load): 0
  • axe-core findings that require additional scans: 0
Bug count breakdown
Rules Description Bug Count SCs
passing A text underline focus indicator is provided for the button on focus. 0 N/A

Button variant 06

Expected Result:

  • Failure count for this test case: 0
  • axe-core findings for this test case (initial load): 0
  • axe-core findings that require additional scans: 0
Bug count breakdown
Rules Description Bug Count SCs
passing On focus of this button, the visible text label becomes bold. Being a visual style update that appears on focus, this counts as a focus indicator, though one that could be easy to miss. 0 N/A

Button variant 07

Expected Result:

  • Failure count for this test case: 0
  • axe-core findings for this test case (initial load): 0
  • axe-core findings that require additional scans: 0
Bug count breakdown
Rules Description Bug Count SCs
passing On focus of this button, "::" characters are visually presented before/after the visible text label. Being a visual indicator that appears on focus, this counts as a focus indicator, though one that could be easy to miss. 0 N/A

Button variant 08

Expected Result:

  • Failure count for this test case: 0
  • axe-core findings for this test case (initial load): 0
  • axe-core findings that require additional scans: 0
Bug count breakdown
Rules Description Bug Count SCs
passing The focus indicator on the button element has been removed, but a focus-within style has been applied to the parent element when the button receives keyboard focus. 0 N/A

Grid with non-interactive gridcells containing focusable elements

Task Assignee Status Actions
Fix bug 1 ABC Open
Task 2 DEF In Progress
Task 3 XYZ Done

Expected Result:

  • Failure count for this test case: 0
  • axe-core findings for this test case (initial load): 0
  • axe-core findings that require additional scans: 0
Bug count breakdown
Rules Description Bug Count SCs
passing

This example is a table element that has been given a role of grid, and the cells have each been given a role of gridcell.

The grid cells are non-interactive and do not receive keyboard focus. The links and buttons inside each cell are individually focusable and have focus indicators. This exapmle fully passes 2.4.7 Focus Visible, as all focusable elements produce visible focus indicators.


There is the possibility some might claim this to fail Name, Role, Value or Info and Relationships because this table was given the role of grid, but none of the expected keyboard behaviors for an elemetn with role=grid were implemented.

Note some screen readers, such as NVDA (tested April 2026 with latest release), will ignore the grid role. Windows Narrator, however, will announce the grid role, but someone will noticeably not be able to use expected arrow key navigation, since it has not been implemented.

Only the element with role=grid is being called out as a failure here. There is effectively no difference between role=gridcell and role=cell. A td element will expose either role depending on the parent table element's computed role. If the role=grid were removed, the gridcell would almost universally be treated no differently than role=cell.

0 N/A