it-swarm.dev

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

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 el modo de automatización de la interfaz de usuario (desde los kits de Windows), busque el elemento "Enlaces a artículos relacionados".
  4. Vuelva a Chrome, desplácese 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 pantalla

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

  1. Establece el zoom en 90% y luego vuelve a establecerlo en 100% (de manera muy fea)
  2. Desactive la accesibilidad y luego encienda en chrome://accessibility/

Lo que estoy buscando es la capacidad de realizar una de estas operaciones programáticamente, o cualquier otra 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
  • Redibujar ventana con PInvoke/Redrawwindow
  • Cree una extensión de cromo 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 bajo Windows 7.

156
Perfect28

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 que 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, al contrario de los varios años de esfuerzo de tener un desplazamiento suave, especialmente para los dispositivos táctiles, no creo que vaya a tener éxito en una corrección de errores.

Su idea de una extensión creo que es el mejor compromiso (aunque feo). Pero más bien, 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 necesitarás controlar la mutación para que solo ocurra 1 vez por segundo o incluso con menos frecuencia.

1
AlienRancher