Problème de cache de l'arborescence accessible de Google Chrome avec l'automatisation de l'interface utilisateur

154

Google Chrome n'actualise 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 moteur de rendu avec: "chrome --force-render-accessibility"ou en définissant sur Accessibilité globale à "chrome://accessibility".
  2. Accédez à http://en.wikipedia.org/wiki/Google
  3. Ouvrez inspect.exe en mode d'automatisation de l'interface utilisateur (à partir des kits Windows), recherchez l'élément «Liens vers des articles connexes».
  4. Revenez à Chrome, faites défiler vers le bas jusqu'à ce que "Liens vers des articles connexes" en bas soit visible
  5. L'élément "Liens vers des articles associés" est marqué hors de l'écran

J'ai trouvé des solutions manuelles qui peuvent forcer Chrome à l'actualiser:

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

Ce que je recherche, c'est la possibilité d'effectuer l'une de ces opérations par programme, ou toute opération permettant à Chrome d'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 extension chrome et forcez le zoom à 100% à la demande: chrome.tabs.setZoom(null, 0);(fonctionne mais clignote et ralentit la fenêtre)

Aucun de ceux-ci ne fonctionne correctement.

EDIT : 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.

Parfait28
la source
13
Vous devriez signaler cela au bogue d'accessibilité de chrome sur Windows: code.google.com/p/chromium/issues
Simon Mourier
5
Pouvez-vous partager des informations sur ce que vous essayez de faire une fois que vous avez résolu le problème? peut-être qu'il y a une solution de contournement ...
DoronG
@ Ksv3n s'il vous plaît poster le lien vers le bogue que vous avez posté
Mauricio Gracia Gutierrez
@ Ksv3n Avez-vous essayé de faire le même test sur un autre navigateur? Firefox peut être?
PseudoAj
@Emzor merci d'avoir essayé d'apporter des modifications, mais veuillez vous abstenir de faire des modifications insignifiantes pour rendre les liens "meilleurs". Parfois, les liens sont mieux affichés dans leur intégralité afin que l'utilisateur puisse les copier et les coller si nécessaire.
gitsitgo

Réponses:

1

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

Demander au moteur de rendu de parcourir le DOM et de mettre à jour l'arborescence d'accessibilité pendant un défilement va à l'encontre des efforts de plusieurs années pour avoir un défilement fluide, en particulier pour les appareils tactiles, donc je ne pense pas que vous allez obtenir une traction sur une correction de bogue.

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

AlienRancher
la source
1
Rompre l'accessibilité quand il est explicitement demandé dans la configuration ou les paramètres, au nom du défilement étouffé semble mauvais.
manuell
1
@manuell c'est pourquoi des extensions existent. Lorsque vos priorités sont contraires aux priorités du navigateur, vous pouvez prendre le relais. Votre client installant l'extension signale qu'il est d'accord avec vous et non avec l'équipe Chrome.
AlienRancher
-1

L'architecture multi-processus de Chrome est différente de celle de tout autre navigateur. Pour des raisons de sécurité, l'interface utilisateur principale du navigateur se trouve dans un processus et les pages Web sont exécutées dans des processus de rendu distincts (généralement un par onglet). Les processus de rendu sont les seuls à avoir une représentation du DOM de la page Web et donc de toutes les informations d'accessibilité, mais les processus de rendu ne sont spécifiquement pas autorisés à interagir avec le système d'exploitation (envoi ou réception d'événements ou de messages) - en particulier, le moteur de rendu les processus ne peuvent pas envoyer ni recevoir d'événements d'accessibilité.

Rebecca Wright
la source