Problem z pamięcią podręczną drzewa dostępną w przeglądarce Google Chrome w przypadku automatyzacji interfejsu użytkownika

154

Google Chrome nie odświeża elementów ułatwień dostępu ( AutomationElement ), gdy użytkownik przewija stronę w dół w przeglądarce.

Aby to odtworzyć:

  1. Włącz dostępność renderera za pomocą: "chrome --force-render-accessibility"lub ustawiając Globalną dostępność na "chrome://accessibility".
  2. Przejdź do http://en.wikipedia.org/wiki/Google
  3. Otwórz inspect.exe w trybie automatyzacji interfejsu użytkownika (z zestawów Windows), poszukaj elementu „Linki do powiązanych artykułów”.
  4. Wróć do Chrome. Przewiń w dół, aż zobaczysz „Linki do powiązanych artykułów” u dołu
  5. Element „Linki do artykułów pokrewnych” jest odznaczony poza ekranem

Znalazłem ręczne rozwiązania, które mogą zmusić Chrome do odświeżenia:

  1. Ustaw Zoom na 90%, a następnie ustaw go z powrotem na 100% (bardzo, bardzo brzydki sposób)
  2. Wyłącz ułatwienia dostępu, a następnie włącz je chrome://accessibility/

To, czego szukam, to możliwość wykonania jednej z tych operacji programowo lub dowolnej operacji, która może zmusić Chrome do odświeżenia drzewa pamięci podręcznej.


Co próbowałem:

  • Zmień rozmiar okna za pomocą PInvoke/MoveWindow
  • Przerysuj okno za pomocą PInvoke/Redrawwindow
  • Zbuduj rozszerzenie chrome i wymuś powiększenie do 100% na żądanie: chrome.tabs.setZoom(null, 0);(działa, ale mruga i spowalnia okno)

Żadne z nich nie działa poprawnie.

EDYCJA : testowane w Google Chrome 40.XX, 41.XX, 42.XX, 43.XX, 44.XX, 45.XX, 46.XX, 47.XX.Dev, 48.XX.Dev w systemie Windows 7.

Idealnie 28
źródło
13
Powinieneś zgłosić to do błędu ułatwień dostępu w Chromium w systemie Windows: code.google.com/p/chromium/issues/…
Simon Mourier
5
Czy możesz podzielić się informacjami o tym, co próbujesz zrobić po rozwiązaniu problemu? może jest jakieś obejście ...
DoronG
@ Ksv3n, proszę opublikować link do błędu, który opublikowałeś
Mauricio Gracia Gutierrez
@ Ksv3n Czy próbowałeś wykonać ten sam test w innej przeglądarce? Firefox może być?
PseudoAj
@Emzor dzięki za próbę wprowadzenia zmian, ale proszę powstrzymać się od robienia trywialnych zmian, aby linki wyglądały „lepiej”. Czasami linki są lepiej wyświetlane w całości, więc użytkownik może je skopiować i wkleić w razie potrzeby.
gitsitgo

Odpowiedzi:

1

Przewijanie prostych stron jest zoptymalizowane tak, aby nie wymagało obliczeń od modułu renderującego. Do przewijania potrzebne są tylko kompozytor i GPU, dlatego drzewo renderowania, które jest aktualizowane tylko z modułu renderującego, jest nadal takie samo.

Wymaganie od renderera przechodzenia przez DOM i aktualizowania drzewa dostępności podczas przewijania jest sprzeczne z kilkuletnim wysiłkiem związanym z płynnym przewijaniem, szczególnie w przypadku urządzeń dotykowych, więc nie sądzę, abyś uzyskał przyczepność do poprawki błędu.

Twój pomysł na rozszerzenie moim zdaniem jest najlepszym (choć brzydkim) kompromisem. Ale raczej zmiana powiększenia, zrobienie małej mutacji strony (lub DOM) może być lepszym rozwiązaniem. Spróbuj na przykład dodać niewidoczny (lub prawie taki) element o małej kolejności z. Będziesz także musiał ocenić mutację, tak aby zdarzała się tylko 1 razy na sekundę lub nawet rzadziej.

AlienRancher
źródło
1
Łamanie dostępności, gdy jest wyraźnie wymagane w konfiguracji lub parametrach, w imię płynniejszego przewijania wydaje się złe.
manuell
1
@manuell, dlatego istnieją rozszerzenia. Jeśli twoje priorytety są sprzeczne z priorytetami przeglądarki, możesz przejąć. Twój klient instalujący rozszerzenie zgadza się z Tobą, a nie z zespołem Chrome.
AlienRancher
-1

Architektura wieloprocesowa Chrome różni się od architektury każdej innej przeglądarki. Ze względów bezpieczeństwa główny interfejs przeglądarki działa w ramach jednego procesu, a strony internetowe są uruchamiane w oddzielnych procesach renderowania (zwykle po jednym na kartę). Procesy Renderer są jedynymi, które reprezentują DOM strony internetowej, a tym samym wszystkie informacje o dostępności, ale procesy renderowania nie mają w szczególności zezwolenia na interakcję z systemem operacyjnym (wysyłanie lub odbieranie zdarzeń lub wiadomości) - w szczególności mechanizm renderujący procesy nie mogą wysyłać ani odbierać zdarzeń dotyczących dostępności.

Rebecca Wright
źródło