ChatGPT解决这个技术问题 Extra ChatGPT

带有 UI 自动化的 Google Chrome 可访问树缓存问题

当用户在浏览器中向下滚动时,Google Chrome 不会刷新辅助功能元素 (AutomationElement)。

要重现它:

启用渲染器可访问性:“chrome --force-render-accessibility”或在“chrome://accessibility”中设置全局可访问性。转到 http://en.wikipedia.org/wiki/Google 在 UI 自动化模式下打开 inspect.exe(来自 Windows 工具包),查找“相关文章的链接”元素。回到 Chrome,向下滚动直到底部的“相关文章的链接”可见 “相关文章的链接”元素被标记为关闭屏幕

我找到了一些可以强制 Chrome 刷新它的手动解决方案:

将缩放设置为 90%,然后将其设置回 100%(非常非常丑陋的方式)关闭可访问性,然后在 chrome://accessibility/ 中打开

我正在寻找的是能够以编程方式执行这些操作之一,或者任何可以使 Chrome 刷新其缓存树的操作。

我试过的:

使用 PInvoke/MoveWindow 调整窗口大小

使用 PInvoke/Redrawwindow 重绘窗口

构建一个 chrome 扩展并按需强制缩放到 100%: chrome.tabs.setZoom(null, 0); (工作但眨眼并减慢窗口速度)

这些都不能正常工作。

编辑:在 Windows 7 下使用 Google Chrome 40.XX、41.XX、42.XX、43.XX、44.XX、45.XX、46.XX、47.XX.Dev、48.XX.Dev 测试。

您应该将此报告给 Windows 上 chromium 的辅助功能错误:code.google.com/p/chromium/issues/…
解决问题后,您能否分享一些有关您正在尝试做的事情的信息?也许有一个解决方法...
@Ksv3n 请发布您发布的错误的链接
@Ksv3n 您是否尝试过在其他浏览器上进行相同的测试?火狐可能是?
@Emzor 感谢您尝试进行编辑,但请不要进行琐碎的编辑以使链接看起来“更好”。有时链接最好完整显示,以便用户可以在需要时复制和粘贴它。

A
AlienRancher

在简单页面中滚动已优化为不需要渲染器的计算。滚动只需要合成器和 GPU,因此仅从渲染器更新的渲染树仍然是相同的。

要求渲染器在滚动期间遍历 DOM 并更新可访问性树与多年来平滑滚动的努力背道而驰,特别是对于触摸设备,所以我认为您不会在错误修复上获得牵引力。

我认为你对扩展的想法是最好的(虽然丑陋的)妥协。但是,改变缩放,对页面(或 DOM)做一个小的突变可能是一个更好的解决方案。例如,尝试添加具有低 z 顺序的不可见(或几乎不可见)元素。您还需要对突变进行速率控制,使其每秒仅发生 1 次甚至更少。


当在配置或参数中明确询问时,以扼杀滚动的名义破坏可访问性似乎很糟糕。
@manuell 这就是存在扩展的原因。当您的优先级与浏览器的优先级相反时,您可以接管。您的客户安装扩展程序表明他们同意您而不是 Chrome 团队。
R
Rebecca Wright

Chrome 的多进程架构不同于任何其他浏览器。为了安全起见,主浏览器 UI 在一个进程中,而网页在单独的渲染器进程中运行(通常每个选项卡一个)。渲染器进程是唯一具有网页 DOM 表示的进程,因此具有所有可访问性信息,但渲染器进程特别不允许与操作系统交互(发送或接收事件或消息) - 特别是渲染器进程不能发送或接收可访问性事件。