Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Screen reader is reading list from a vuetify v-select in random order #17123

Open
ncsugrad94 opened this issue Sep 5, 2024 · 7 comments
Open
Labels
blocked/needs-info The issue can not be progressed until more information is provided. blocked/needs-sample needs-triage

Comments

@ncsugrad94
Copy link

Steps to reproduce:

Go to any implementation of vue v-select like this one: https://vuetifyjs.com/en/components/selects/#density
Use the keyboard to navigate to the select menu and open it.

Actual behavior:

NVDA reads the items in the list in a random order.

output from speech viewer:
Select component — Vuetify - Google Chrome - Steven
Buzz
Fizz
Bar
Foo

Actual order of elements:
Foo
Bar
Fizz
Buzz

Expected behavior:

NVDA reads the items in the list in the order they are presented in the UI

NVDA logs, crash dumps and other attachments:

System configuration

NVDA installed/portable/running from source:

NVDA Installed

NVDA version:

NVDA vs 2024.3 (2024.3.0.33433)

Windows version:

Windows 11

Name and version of other software in use when reproducing the issue:

Chrome Version 128.0.6613.120 (Official Build) (64-bit)

Other information about your system:

Other questions

Does the issue still occur after restarting your computer?

yes

Have you tried any other versions of NVDA? If so, please report their behaviors.

No

If NVDA add-ons are disabled, is your problem still occurring?

No add ons installed

Does the issue still occur after you run the COM Registration Fixing Tool in NVDA's tools menu?\

Yes

@Adriani90
Copy link
Collaborator

Adriani90 commented Sep 5, 2024

This is only reproducible in Chromium. In Firefox NVDA is always reading the same order.
I noticed however that if you press the down arrow key while focusing the multi combo box in focus mode, NVDA will report the presumably focused element first and then the remaining ones after the focused item, and then the ones before the focused item.
This happens only while the box is closed though. So it is not really random.

@ncsugrad94
Copy link
Author

ncsugrad94 commented Sep 6, 2024 via email

@RyanSMS
Copy link

RyanSMS commented Sep 6, 2024

This is only reproducible in Chromium. In Firefox NVDA is always reading the same order. I noticed however that if you press the down arrow key while focusing the multi combo box in focus mode, NVDA will report the presumably focused element first and then the remaining ones after the focused item, and then the ones before the focused item. This happens only while the box is closed though. So it is not really random.

"Random" because in each time the list is expanded, NVDA reads the list in different order. For example based on the one above:
At the first time, you may hear:
Buzz
Fizz
Bar
Foo

Maybe you will get at the second time of list expansion:
Fizz
Buzz
Foo
Bar

@seanbudd
Copy link
Member

Welcome @ncsugrad94 ,

We are unable to process this issue as it stands.

  • To be able to reproduce this issue, we need a minimal code sample. Provide a minimal HTML sample using plain HTML/JS to reproduce this using codepen. It is not possible for us to debug the vuetify library.
  • This is very likely a problem with the implementation of the framework design, as a starting point please submit feedback to the authors to let them know about the problem.

Kind Regards,
NV Access Software Developers

@seanbudd seanbudd added blocked/needs-info The issue can not be progressed until more information is provided. blocked/needs-sample needs-triage labels Sep 10, 2024
@thgcode
Copy link
Contributor

thgcode commented Sep 21, 2024

I tried to create a minimal example to try to understand the issue better and noticed that each time you close the browser and reopen the document again, NVDA reads the aria-live text with a different order:

<html>
	<head>
		<title>Aria-live reading order test</title>
	</head>
	<body>
		<script type="text/javascript">
		var pressed = false;

		function test() {
			let t1 = document.getElementById("t1");
			let t2 = document.getElementById("t2");
			let t3 = document.getElementById("t3");
			pressed = !pressed;

			if (pressed) {
				t1.textContent = "Aria 1";
				t2.textContent = "Aria 2";
				t3.textContent = "Aria 3";
			} else {
				t1.textContent = "";
				t2.textContent = "";
				t3.textContent = "";
			}
		}
		</script>
		<p aria-live="polite" id="t1"></p>
		<p aria-live="polite" id="t2"></p>
		<p aria-live="polite" id="t3"></p>
		<button onclick="test()">Press to change aria-live elements</button>
	</body>
</html>

I tested with Narrator and the events are read with the proper order each time. But I am not sure on how to debug further, is there some way I can find on which order aria-live events are arriving on NVDA's end, or if there is a difference on IAccessible 2 and UIA?

@seanbudd
Copy link
Member

@thgcode - enabling "events" and "MSAA" logging in advanced preferences may help

@thgcode
Copy link
Contributor

thgcode commented Sep 23, 2024

I tested with the event tracker addon and found something interesting:

IO - inputCore.InputManager.executeGesture (06:11:54.278) - winInputHook (3120):
Input: kb(laptop):space
DEBUG - external:globalPlugins.evtTracker.GlobalPlugin.evtDebugLogging (06:11:54.314) - MainThread (1180):
EvtTracker: object: <NVDAObjects.IAccessible.chromium.Document object at 0x08376750>
name: Aria-live reading order test
role: Role.DOCUMENT
event: loseFocus
app module: AppModule(appModuleHandler, appName='msedge', processID=7380)
window class name: Chrome_RenderWidgetHostHWND
IAccessible accName: 'Aria-live reading order test'
IAccessibleChildID: 0
DEBUG - external:globalPlugins.evtTracker.GlobalPlugin.evtDebugLogging (06:11:54.318) - MainThread (1180):
EvtTracker: object: <NVDAObjects.Dynamic_ButtonIa2WebIAccessible object at 0x083766D0>
name: Press to change aria-live elements
role: Role.BUTTON
event: gainFocus
app module: AppModule(appModuleHandler, appName='msedge', processID=7380)
window class name: Chrome_RenderWidgetHostHWND
IAccessible accName: 'Press to change aria-live elements'
IAccessibleChildID: 0
IO - speech.speech.speak (06:11:54.331) - MainThread (1180):
Speaking ['Aria 3 ']
IO - speech.speech.speak (06:11:54.332) - MainThread (1180):
Speaking ['Aria 2 ']
IO - speech.speech.speak (06:11:54.348) - MainThread (1180):
Speaking ['Aria 1 ']
DEBUG - external:globalPlugins.evtTracker.GlobalPlugin.evtDebugLogging (06:11:54.349) - MainThread (1180):
EvtTracker: object: <NVDAObjects.IAccessible.ia2Web.Ia2Web object at 0x08376610>
name: None
role: Role.PARAGRAPH
event: liveRegionChange
app module: AppModule(appModuleHandler, appName='msedge', processID=7380)
window class name: Chrome_RenderWidgetHostHWND
IAccessible accName: None
IAccessibleChildID: 0
DEBUG - external:globalPlugins.evtTracker.GlobalPlugin.evtDebugLogging (06:11:54.357) - MainThread (1180):
EvtTracker: object: <NVDAObjects.IAccessible.ia2Web.Ia2Web object at 0x083769D0>
name: None
role: Role.PARAGRAPH
event: liveRegionChange
app module: AppModule(appModuleHandler, appName='msedge', processID=7380)
window class name: Chrome_RenderWidgetHostHWND
IAccessible accName: None
IAccessibleChildID: 0
DEBUG - external:globalPlugins.evtTracker.GlobalPlugin.evtDebugLogging (06:11:54.361) - MainThread (1180):
EvtTracker: object: <NVDAObjects.IAccessible.ia2Web.Ia2Web object at 0x0842E2F0>
name: None
role: Role.PARAGRAPH
event: liveRegionChange
app module: AppModule(appModuleHandler, appName='msedge', processID=7380)
window class name: Chrome_RenderWidgetHostHWND
IAccessible accName: None
IAccessibleChildID: 0

Somehow, the aria-live event is being processed before it arrives to NVDA. I performed another test, I hardcoded a global list to save the processed aria-live events received by the event tracker addon and found that, even though NVDA spoke the aria-live events on a random order, surprisingly, event tracker received the events with the correct order all the time. Maybe, on NVDAHelper, some events arrive faster, changing the order, but I am not sure if this is the case.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
blocked/needs-info The issue can not be progressed until more information is provided. blocked/needs-sample needs-triage
Projects
None yet
Development

No branches or pull requests

5 participants