Problem mit dem für Google Chrome zugänglichen Baumcache mit UI-Automatisierung

154

Google Chrome aktualisiert keine Eingabehilfen ( AutomationElement ), wenn ein Nutzer im Browser nach unten scrollt.

Um es zu reproduzieren:

  1. Aktivieren Sie die Renderer-Barrierefreiheit mit: "chrome --force-render-accessibility"oder indem Sie die Option Globale Barrierefreiheit unter aktivieren "chrome://accessibility".
  2. Gehen Sie zu http://en.wikipedia.org/wiki/Google
  3. Öffnen Sie inspect.exe im UI-Automatisierungsmodus (aus Windows Kits) und suchen Sie nach dem Element "Links zu verwandten Artikeln".
  4. Kehren Sie zu Chrome zurück und scrollen Sie nach unten, bis unten "Links zu verwandten Artikeln" angezeigt werden
  5. Das Element "Links zu verwandten Artikeln" ist außerhalb des Bildschirms markiert

Ich habe einige manuelle Lösungen gefunden, die Chrome zwingen können, es zu aktualisieren:

  1. Stellen Sie den Zoom auf 90% und dann wieder auf 100% (sehr, sehr hässlich).
  2. Schalten Sie die Barrierefreiheit aus und wieder ein chrome://accessibility/

Was ich suche, ist die Möglichkeit, einen dieser Vorgänge programmgesteuert auszuführen oder einen Vorgang, bei dem Chrome seinen Cache-Baum aktualisieren kann.


Was ich versucht habe:

  • Fenstergröße ändern mit PInvoke/MoveWindow
  • Fenster neu zeichnen mit PInvoke/Redrawwindow
  • Erstellen Sie eine Chrome-Erweiterung und erzwingen Sie den Zoom bei Bedarf auf 100%: chrome.tabs.setZoom(null, 0);(funktioniert, blinkt aber und verlangsamt das Fenster)

Keines davon funktioniert ordnungsgemäß.

BEARBEITEN : Getestet mit Google Chrome 40.XX, 41.XX, 42.XX, 43.XX, 44.XX, 45.XX, 46.XX, 47.XX.Dev, 48.XX.Dev unter Windows 7.

Perfect28
quelle
13
Sie sollten dies dem Eingabehilfenfehler
Simon Mourier
5
Können Sie einige Informationen darüber teilen, was Sie tun möchten, sobald Sie das Problem gelöst haben? Vielleicht gibt es eine
Problemumgehung
@ Ksv3n bitte posten Sie den Link zu Fehler, den Sie gepostet haben
Mauricio Gracia Gutierrez
@ Ksv3n Haben Sie versucht, den gleichen Test in einem anderen Browser durchzuführen? Firefox kann sein?
PseudoAj
@ Emzor, danke, dass Sie versucht haben, Änderungen vorzunehmen. Bitte nehmen Sie keine trivialen Änderungen vor, damit die Links "besser" aussehen. Manchmal werden Links besser vollständig angezeigt, damit der Benutzer sie bei Bedarf kopieren und einfügen kann.
Gititgo

Antworten:

1

Das Scrollen in einfachen Seiten ist so optimiert, dass keine Berechnung vom Renderer erforderlich ist. Zum Scrollen werden nur der Compositor und die GPU benötigt, daher ist der Renderbaum, der nur vom Renderer aktualisiert wird, immer noch derselbe.

Das Erfordernis, dass der Renderer das DOM durchläuft und den Eingabehilfenbaum während eines Bildlaufs aktualisiert, steht im Widerspruch zu den mehrjährigen Bemühungen um ein reibungsloses Scrollen, insbesondere für Touch-Geräte, sodass ich nicht glaube, dass Sie bei einer Fehlerbehebung Traktion bekommen werden.

Ihre Idee einer Erweiterung ist meiner Meinung nach der beste (wenn auch hässliche) Kompromiss. Es ist jedoch besser, den Zoom zu ändern und eine kleine Mutation der Seite (oder des DOM) vorzunehmen. Versuchen Sie beispielsweise, ein unsichtbares (oder fast unsichtbares) Element mit einer niedrigen z-Ordnung hinzuzufügen. Sie müssen auch die Kontrolle der Mutation bewerten, damit sie nur 1 Mal pro Sekunde oder noch seltener auftritt.

AlienRancher
quelle
1
Das Unterbrechen der Barrierefreiheit, wenn dies in der Konfiguration oder in den Parametern ausdrücklich gefragt wird, im Namen des Smother-Scrollings, scheint schlecht zu sein.
manuell
1
@manuell deshalb gibt es Erweiterungen. Wenn Ihre Prioritäten den Browserprioritäten zuwiderlaufen, können Sie übernehmen. Ihr Kunde, der das Nebenstellensignal installiert, stimmt Ihnen und nicht dem Chrome-Team zu.
AlienRancher
-1

Die Multiprozessarchitektur von Chrome unterscheidet sich von der jedes anderen Browsers. Aus Sicherheitsgründen befindet sich die Benutzeroberfläche des Hauptbrowsers in einem Prozess, und Webseiten werden in separaten Rendererprozessen ausgeführt (normalerweise eine pro Registerkarte). Die Renderer-Prozesse sind die einzigen, die das DOM der Webseite und damit alle Informationen zur Barrierefreiheit darstellen. Die Renderer-Prozesse dürfen jedoch ausdrücklich nicht mit dem Betriebssystem (Senden oder Empfangen von Ereignissen oder Nachrichten) interagieren, insbesondere nicht mit dem Renderer Prozesse können keine Eingabehilfen senden oder empfangen.

Rebecca Wright
quelle