Google Chrome aktualisiert keine Eingabehilfen ( AutomationElement ), wenn ein Nutzer im Browser nach unten scrollt.
Um es zu reproduzieren:
- Aktivieren Sie die Renderer-Barrierefreiheit mit:
"chrome --force-render-accessibility"
oder indem Sie die Option Globale Barrierefreiheit unter aktivieren"chrome://accessibility"
. - Gehen Sie zu http://en.wikipedia.org/wiki/Google
- Öffnen Sie inspect.exe im UI-Automatisierungsmodus (aus Windows Kits) und suchen Sie nach dem Element "Links zu verwandten Artikeln".
- Kehren Sie zu Chrome zurück und scrollen Sie nach unten, bis unten "Links zu verwandten Artikeln" angezeigt werden
- 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:
- Stellen Sie den Zoom auf 90% und dann wieder auf 100% (sehr, sehr hässlich).
- 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.
c#
google-chrome
pinvoke
accessibility
ui-automation
Perfect28
quelle
quelle
Antworten:
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.
quelle
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.
quelle