web-dev-qa-db-ja.com

Google Chrome UIオートメーションでアクセス可能なツリーキャッシュの問題

Google Chrome=は、ユーザーがブラウザを下にスクロールしてもアクセシビリティ要素を更新しません( AutomationElement )。

再現するには:

  1. レンダラーのアクセシビリティを有効にするには、_"chrome --force-render-accessibility"_を使用するか、_"chrome://accessibility"_でグローバルアクセシビリティを設定します。
  2. http://en.wikipedia.org/wiki/Google に移動します
  3. inspect.exe をUIオートメーションモード(Windowsキットから)で開き、「関連記事へのリンク」要素を探します。
  4. Chromeに戻り、下部にある[関連記事へのリンク]が表示されるまで下にスクロールします
  5. 「関連記事へのリンク」要素が画面外にマークされています

強制的にChromeで更新できる手動のソリューションを見つけました。

  1. ズームを90%に設定してから、100%に戻します(非常にveryい方法です)
  2. _chrome://accessibility/_でアクセシビリティをオフにしてからオンに切り替えます

私が探しているのは、これらの操作のいずれかをプログラムで実行する機能、またはChromeキャッシュツリーを更新できる操作)です。


私が試したもの:

  • _PInvoke/MoveWindow_でウィンドウのサイズを変更します
  • _PInvoke/Redrawwindow_でウィンドウを再描画
  • chrome拡張機能を構築し、必要に応じてズームを100%に強制します:chrome.tabs.setZoom(null, 0);(動作しますが、点滅してウィンドウを遅くします)

これらのどれも正常に動作していません。

[〜#〜] edit [〜#〜]:Googleでテスト済みChrome 40.XX、41.XX、42.XX、43 Windows 7での.XX、44.XX、45.XX、46.XX、47.XX.Dev、48.XX.Dev.

155
Perfect28

単純なページのスクロールは、レンダラーからの計算を必要としないように最適化されています。コンポジターとGPUのみがスクロールに必要であるため、レンダラーからのみ更新されるレンダーツリーは同じままです。

レンダラーがスクロール中にDOMをトラバースし、アクセシビリティツリーを更新する必要があるのは、タッチデバイス専用のスムーズなスクロールを実現するための数年の努力とは逆に実行されるため、バグの修正に引っかかることはないと思います。

拡張機能についてのあなたの考えは、最良の(oughい)妥協だと思います。しかし、ズームを変更するよりも、ページ(またはDOM)を少し変更する方がより良い解決策になる可能性があります。たとえば、zオーダーの低い不可視(またはほぼそう)な要素を追加してみてください。また、突然変異をレート​​制御する必要があります。これにより、1秒あたり1回だけ、またはさらに頻繁に発生しなくなります。

1
AlienRancher