Problema de caché de árbol accesible de Google Chrome con UI Automation

154

Google Chrome no actualiza los elementos de accesibilidad ( AutomationElement ) cuando un usuario se desplaza hacia abajo en el navegador.

Para reproducirlo:

  1. Habilite la accesibilidad del renderizador con: "chrome --force-render-accessibility"o configurando la Accesibilidad global en "chrome://accessibility".
  2. Vaya a http://en.wikipedia.org/wiki/Google
  3. Abra inspect.exe en modo de automatización de la interfaz de usuario (desde kits de Windows), busque el elemento "Enlaces a artículos relacionados".
  4. Vuelve a Chrome, desplázate hacia abajo hasta que aparezca "Enlaces a artículos relacionados" en la parte inferior.
  5. El elemento "Enlaces a artículos relacionados" está marcado fuera de la pantalla

Encontré algunas soluciones manuales que pueden obligar a Chrome a actualizarlo:

  1. Establezca Zoom en 90% y luego vuelva a establecerlo en 100% (de manera muy fea)
  2. Apague la accesibilidad y luego enciéndala chrome://accessibility/

Lo que estoy buscando es la capacidad de realizar una de estas operaciones mediante programación, o cualquier operación que pueda hacer que Chrome actualice su árbol de caché.


Lo que probé:

  • Cambiar el tamaño de la ventana con PInvoke/MoveWindow
  • Redibujar ventana con PInvoke/Redrawwindow
  • Cree una extensión de cromo y fuerce el zoom al 100% bajo demanda: chrome.tabs.setZoom(null, 0);(funciona pero parpadea y ralentiza la ventana)

Ninguno de estos está funcionando correctamente.

EDITAR : Probado con Google Chrome 40.XX, 41.XX, 42.XX, 43.XX, 44.XX, 45.XX, 46.XX, 47.XX.Dev, 48.XX.Dev en Windows 7.

Perfecto28
fuente
13
Debe informar esto al error de accesibilidad de chromium
Simon Mourier
55
¿Puede compartir alguna información sobre lo que está tratando de hacer una vez que resuelva el problema? tal vez hay una solución alternativa ...
DoronG
@ Ksv3n, publique el enlace al error que publicó
Mauricio Gracia Gutiérrez
@ Ksv3n ¿Has intentado hacer la misma prueba en otro navegador? Firefox puede ser?
PseudoAj
@Emzor, gracias por tratar de hacer ediciones, pero absténgase de hacer ediciones triviales para que los enlaces se vean "mejor". A veces, los enlaces se muestran mejor en su totalidad para que el usuario pueda copiarlos y pegarlos si es necesario.
gitsitgo

Respuestas:

1

El desplazamiento en páginas simples está optimizado para no requerir el cálculo del renderizador. Solo se necesitan el compositor y la GPU para desplazarse, por lo tanto, el árbol de renderizado que solo se actualiza desde el renderizador sigue siendo el mismo.

Requerir que el renderizador atraviese el DOM y actualice el árbol de accesibilidad durante un desplazamiento se ejecuta al contrario del esfuerzo de varios años de tener un desplazamiento suave, especialmente para dispositivos táctiles, por lo que no creo que vaya a obtener tracción en una corrección de errores.

Creo que su idea de una extensión es el mejor compromiso (aunque feo). Pero en lugar de cambiar el zoom, hacer una pequeña mutación de la página (o DOM) podría ser una mejor solución. Intente, por ejemplo, agregar un elemento invisible (o casi) con un orden z bajo. También deberá evaluar el control de la mutación para que solo ocurra 1 vez por segundo o incluso con menos frecuencia.

AlienRancher
fuente
1
Romper la accesibilidad cuando se solicita explícitamente en la configuración o los parámetros, en nombre del desplazamiento más suave, parece malo.
manuell
1
@manuell es por eso que existen extensiones. Cuando sus prioridades son contrarias a las prioridades del navegador, puede hacerse cargo. Su cliente que instala la señal de extensión está de acuerdo con usted y no con el equipo de Chrome.
AlienRancher
-1

La arquitectura multiproceso de Chrome es diferente de la de cualquier otro navegador. Por seguridad, la interfaz de usuario principal del navegador está en un proceso, y las páginas web se ejecutan en procesos de renderización separados (generalmente uno por pestaña). Los procesos del renderizador son los únicos con una representación del DOM de la página web y, por lo tanto, de toda la información de accesibilidad, pero los procesos del renderizador específicamente no pueden interactuar con el sistema operativo (enviar o recibir eventos o mensajes), en particular, el renderizador los procesos no pueden enviar ni recibir eventos de accesibilidad.

Rebecca Wright
fuente