Comments (4)
@mcking65 Raising this as a discussion to revisit during a CG meeting.
from aria-at.
Summary from recent ARIA-AT Community Group meetings:
TL;DR
Neither the checkbox role, nor checked/not checked states, are sufficient to pass the current ARIA-AT tests. These two assertions will be marked as failing across the board, for all commands.
Background
Within Core Accessibility API Mappings 1.2:
role="switch"
is mapped toIA2_ROLE_TOGGLE_BUTTON
in IAccessible2, and Button/toggleswitch in UIA with the Toggle control pattern.aria-checked
, used to set the state of a switch, maps to:- IA2:
STATE_SYSTEM_CHECKED
for the "on" state, no exposed state when "off", and the attributecheckable:true
in both states. - UIA:
Toggle.ToggleState
property set toOn
(1) orOff
(0).
- IA2:
This results in a checkable toggle button for browsers exposing information via IA2, which is inconsistent from the pressed/not pressed semantics created via role="button"
and aria-pressed
. Due to the likely user confusion triggered by this inconsistency, NVDA has chosen to handle this "identity crisis" by:
- using the IA2 XML-roles model to distinguish between standard toggle buttons and switches; and then
- remapping the role of the internal NVDA object to checkbox, so that the role and states match.
The user-facing outcomes being that:
- When a switch is encountered in a browser using IA2, NVDA reports it as a checkbox, with checked/not checked state.
- When a switch is encountered in a browser or native context using UIA, NVDA reports it as a toggle button, with pressed/not pressed state. For example, this can be observed by enabling UIA for Microsoft Edge, using a modern Windows settings screen with switches on it, etc.
ARIA-AT Testing Results
- None of our testers felt that the role output of "checkbox" was sufficient to match the assertion: "role 'switch' is conveyed".
- One of our testers felt that the state output of "not checked" was sufficient to pass the assertion: "State 'off' is conveyed. Another test did not.
This leaves us with internal inconsistency between the role and state assertions, but also between testers for the state-related assertion specifically.
Next Steps
The Community Group has reached consensus on all results, for both role and state assertions, being aligned to the failure state. To expand on the reasoning behind this:
- Toggle button and switch have some semantic equivalence, in that users can reasonably expect them to carry out some action when their state is changed. This semantic equivalence is not shared between checkbox and toggle button, or checkbox and switch, as a checkbox is generally used as a declarative control with the state being submitted later. Users should not be engineered to expect checkboxes to carry out an action when toggled, via NVDA incorrectly reporting switches as checkboxes.
- NVDA users cannot legitimately determine when they are encountering a switch vs a checkbox, because the output is the same.
- As such, NVDA could make the decision to detect the switch role via the XML-roles model, and either:
- remap the checked/not checked states to pressed/not pressed, using the toggle button role; or
- expose the switch role directly to the user, and remap checked/not checked to on/off in some way.
- This would also help to redress the current imbalance/inconsistency between NVDA's IA2 and UIA handling of switches.
from aria-at.
@IsaDC Please change role and state assertions to failing where they are currently recorded as passing, and make sure all results indicate "incorrect output" where they currently have "no output" set.
from aria-at.
The Community Group has reached consensus on all results, for both role and state assertions, being aligned to the failure state. These changes have been made within the app.
from aria-at.
Related Issues (20)
- Support test plans that specify a command assertion exception that does not include an assertion priority prefix HOT 1
- Support specifying a minimum required AT version in the name of a commands.csv file
- Define assertion verdicts in glossary HOT 1
- Resolve conflicts in Safari testing for Navigate out of a radio group (Radio Group Example Using aria-activedescendant, Test 5 and 6, V24.03.12)
- Resolve conflicts in Safari testing for Navigate backwards into a radio group (Radio Group Example Using aria-activedescendant, Tests 2 and 4 V24.03.12)
- Feedback: "Navigate backwards to a menu button" (Action Menu Button Example Using aria-activedescendant, Test 6, V22.03.17) HOT 4
- Feedback: "Open a menu" (Action Menu Button Example Using aria-activedescendant, Test 12, V22.03.17) HOT 2
- Feedback: "Open a menu" (Action Menu Button Example Using aria-activedescendant, Test 12, V22.03.17) HOT 2
- Feedback: "Navigate to the first item in a menu" (Action Menu Button Example Using aria-activedescendant, Test 18, V22.03.17) HOT 1
- Feedback: "Activate a menu item" (Action Menu Button Example Using aria-activedescendant, Test 24, V22.03.17) HOT 1
- Outdated NVDA Bot responses: "Open a modal dialog" (Modal Dialog Example, Test 1, V24.05.02) HOT 3
- Feedback: "Open a modal dialog" (Modal Dialog Example, Test 1, V24.05.02) Remove Assertions for JAWS and NVDA HOT 1
- Feedback: "Navigate forward from the last focusable element to the first focusable element in a modal dialog" (Modal Dialog Example, Test 11, V24.05.08)
- Feedback: "Open a modal dialog" (Modal Dialog Example, Test 3, V24.05.09) HOT 3
- Incorrect NVDA Bot responses: "Navigate to the bottom of a modal dialog" (Modal Dialog Example, Test 14.1, V24.05.09) HOT 5
- Conflicting VoiceOver test results: "Close a modal dialog" (Modal Dialog Example, Test 6, V24.05.09) HOT 3
- Conflicting VoiceOver test results: "Navigate to the top of a modal dialog" (Modal Dialog Example, Test 5, V24.05.09) HOT 3
- `npm run update-reference` is out of date
- Conflicting JAWS results: "Close a modal dialog" Test 2 in V24.05.09 HOT 2
- Feedback: "Bump into the top edge of a modal dialog" (Modal Dialog Example, Test 8, V24.05.09) HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from aria-at.