c# - Problema de caché de árbol accesible de Google Chrome con UI Automation
google-chrome pinvoke (2)
El desplazamiento en páginas simples está optimizado para no requerir el cálculo del renderizador. Solo el compositor y la GPU son necesarios 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, así 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.
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 Global Accessibility en"chrome://accessibility"
. - Vaya a http://en.wikipedia.org/wiki/Google
- Abra inspect.exe en el 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 en
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 he intentado:
-
Cambiar el tamaño de la ventana con
PInvoke/MoveWindow
-
PInvoke/Redrawwindow
ventana conPInvoke/Redrawwindow
-
Cree una extensión de Chrome y fuerce el zoom al 100% a pedido:
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.
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 no pueden interactuar específicamente con el sistema operativo (enviar o recibir eventos o mensajes), en particular, el renderizador los procesos no pueden enviar ni recibir eventos de accesibilidad.