Google Chrome no actualiza los elementos de accesibilidad ( AutomationElement ) cuando un usuario se desplaza hacia abajo en el navegador.
Para reproducirlo:
- Habilite la accesibilidad del renderizador con:
"chrome --force-render-accessibility"
o configurando la Accesibilidad global en"chrome://accessibility"
. - Vaya a http://en.wikipedia.org/wiki/Google
- 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".
- Vuelve a Chrome, desplázate hacia abajo hasta que aparezca "Enlaces a artículos relacionados" en la parte inferior.
- El elemento "Enlaces a artículos relacionados" está marcado fuera de la pantalla
Encontré algunas soluciones manuales que pueden obligar a Chrome a actualizarlo:
- Establezca Zoom en 90% y luego vuelva a establecerlo en 100% (de manera muy fea)
- 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.
c#
google-chrome
pinvoke
accessibility
ui-automation
Perfecto28
fuente
fuente
Respuestas:
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.
fuente
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.
fuente