web-dev-qa-db-fra.com

Google Chrome problème de cache d'arborescence accessible avec UI Automation

Google Chrome ne rafraîchit pas les éléments d'accessibilité ( AutomationElement ) lorsqu'un utilisateur fait défiler vers le bas dans le navigateur.

Pour le reproduire:

  1. Activez l'accessibilité du rendu avec: "chrome --force-render-accessibility" Ou en définissant l'accessibilité globale sur "chrome://accessibility".
  2. Allez sur http://en.wikipedia.org/wiki/Google
  3. Ouvrez inspect.exe en mode UI Automation (à partir des kits Windows), recherchez l'élément "Liens vers les articles associés".
  4. Revenez à Chrome, faites défiler jusqu'à ce que "Liens vers des articles connexes" en bas soit visible
  5. L'élément "Liens vers des articles connexes" est marqué hors écran

J'ai trouvé des solutions manuelles qui peuvent forcer Chrome pour le rafraîchir:

  1. Réglez le zoom à 90% puis réglez-le à 100% (manière très très laide)
  2. Désactivez l'accessibilité, puis activez-le dans chrome://accessibility/

Ce que je recherche, c'est la possibilité d'effectuer l'une de ces opérations par programme, ou toute opération qui peut faire Chrome actualiser son arborescence de cache.


Ce que j'ai essayé:

  • Redimensionner la fenêtre avec PInvoke/MoveWindow
  • Redessiner la fenêtre avec PInvoke/Redrawwindow
  • Construisez une chrome et forcez le zoom à 100% sur demande: chrome.tabs.setZoom(null, 0); (fonctionne mais clignote et ralentit la fenêtre)

Aucun de ces éléments ne fonctionne correctement.

[~ # ~] modifier [~ # ~] : testé avec Google Chrome 40.XX, 41.XX , 42.XX, 43.XX, 44.XX, 45.XX, 46.XX, 47.XX.Dev, 48.XX.Dev sous Windows 7.

155
Perfect28

Le défilement dans des pages simples est optimisé pour ne pas nécessiter de calcul à partir du rendu. Seuls le compositeur et le GPU sont nécessaires pour faire défiler, donc l'arbre de rendu qui n'est mis à jour qu'à partir du rendu est toujours le même.

Obliger le moteur de rendu à traverser le DOM et à mettre à jour l'arborescence d'accessibilité pendant un défilement va à l'encontre de l'effort de défilement régulier de plusieurs années, spécialement pour les appareils tactiles, donc je ne pense pas que vous allez obtenir une traction sur une correction de bogue.

Votre idée d'une extension, je pense, est le meilleur compromis (bien que laid). Mais plutôt que changer de zoom, faire une petite mutation de la page (ou DOM) pourrait être une meilleure solution. Essayez par exemple d'ajouter un élément invisible (ou presque) avec un ordre z faible. Vous devrez également contrôler la mutation afin qu'elle ne se produise que 1 fois par seconde ou encore moins souvent.

1
AlienRancher