带有 UI 自动化的 Google Chrome 可访问树缓存问题
Posted
技术标签:
【中文标题】带有 UI 自动化的 Google Chrome 可访问树缓存问题【英文标题】:Google Chrome accessible tree cache issue with UI Automation 【发布时间】:2015-08-06 17:38:29 【问题描述】:当用户在浏览器中向下滚动时,Google Chrome 不会刷新辅助功能元素 (AutomationElement)。
复制它:
-
通过
"chrome --force-render-accessibility"
或通过"chrome://accessibility"
设置全局可访问性来启用渲染器可访问性。
转到http://en.wikipedia.org/wiki/Google
在 UI 自动化模式(来自 Windows 工具包)中打开 inspect.exe,查找“相关文章的链接”元素。
回到 Chrome,向下滚动直到底部的“相关文章链接”可见
“相关文章的链接”元素被标记在屏幕外
我找到了一些可以强制 Chrome 刷新它的手动解决方案:
-
将缩放设置为 90%,然后将其设置回 100%(非常非常丑陋的方式)
关闭辅助功能,然后打开
chrome://accessibility/
我正在寻找的是能够以编程方式执行这些操作之一,或者任何可以使 Chrome 刷新其缓存树的操作。
我尝试过的:
用PInvoke/MoveWindow
调整窗口大小
用PInvoke/Redrawwindow
重绘窗口
构建 chrome 扩展程序并根据需要强制缩放至 100%:chrome.tabs.setZoom(null, 0);
(工作但闪烁并减慢窗口速度)
这些都不能正常工作。
编辑:使用 Google Chrome 40.XX、41.XX、42.XX、43.XX、44.XX、45.XX、46.XX、47.XX.Dev 测试, Windows 7下的48.XX.Dev。
【问题讨论】:
您应该将此报告给 Windows 上 chromium 的辅助功能错误:code.google.com/p/chromium/issues/… 您能否分享一些关于您在解决问题后尝试做什么的信息?也许有一个解决方法...... @Ksv3n 请发布您发布的错误的链接 @Ksv3n 你试过在其他浏览器上做同样的测试吗?火狐可能是? @Emzor 感谢您尝试进行编辑,但请不要进行琐碎的编辑以使链接看起来“更好”。有时链接最好完整显示,以便用户可以在需要时复制和粘贴。 【参考方案1】:对简单页面的滚动进行了优化,无需渲染器进行计算。滚动只需要合成器和 GPU,因此仅从渲染器更新的渲染树仍然是相同的。
要求渲染器在滚动期间遍历 DOM 并更新可访问性树与多年来平滑滚动的努力背道而驰,特别是对于触摸设备,所以我认为您不会在错误修复上获得牵引力.
我认为你对扩展的想法是最好的(虽然丑陋的)妥协。但是,改变缩放,对页面(或 DOM)做一个小的突变可能是一个更好的解决方案。例如,尝试添加具有低 z 顺序的不可见(或几乎不可见)元素。您还需要对突变进行速率控制,使其每秒仅发生 1 次,甚至更少。
【讨论】:
在配置或参数中明确询问时破坏可访问性,以窒息滚动的名义似乎很糟糕。 @manuell 这就是存在扩展的原因。当您的优先级与浏览器的优先级相反时,您可以接管。您的客户安装扩展程序表明他们同意您而不是 Chrome 团队。【参考方案2】:Chrome 的多进程架构不同于任何其他浏览器。为了安全起见,主浏览器 UI 在一个进程中,而网页在单独的渲染器进程中运行(通常每个选项卡一个)。渲染器进程是唯一具有网页 DOM 表示的进程,因此具有所有可访问性信息,但渲染器进程特别不允许与操作系统交互(发送或接收事件或消息) - 特别是渲染器进程无法发送或接收可访问性事件。
【讨论】:
以上是关于带有 UI 自动化的 Google Chrome 可访问树缓存问题的主要内容,如果未能解决你的问题,请参考以下文章
用于 Google Chrome(iOS 应用)的 UICollectionViewLayout 类似标签切换器的 UI
检查包含 kendo-ui 样式的页面中的元素时,Google Chrome Devtools 崩溃
Swift ui macOS 在特定 url 上打开一个新的 google chrome 窗口隐身