gpt4 book ai didi

wpf - 过时的 UI 自动化树

转载 作者:行者123 更新时间:2023-12-02 21:19:02 24 4
gpt4 key购买 nike

我正在尝试使用新的 native Microsoft UI 自动化接口(interface) 3.0(在 VC++ 2010、Win7 中)编写自动化测试器应用程序。被测应用程序 (AUT) 是一个 WPF 应用程序。

几乎一切都工作正常...我可以安装事件处理程序、浏览树、使用各种条件搜索元素并使用其模式控制找到的元素。

但是昨天我发现了一个让我绝望的行为:通过单击其主菜单按钮之一切换其 GUI 主面板后,我的 AUT 的 UIA 树根本没有更新。

单击主菜单按钮后,我可以在 AUT 的 GUI 中看到新的小部件,但 UIA 树仍然包含单击主菜单之前存在的控件菜单按钮。 (过时的)UIA 树仍然可以使用搜索功能或使用 walker 完全读取,但当然不能写入,因为小部件不再存在。

这看起来确实有一个过时的缓存...但是我根本不使用任何缓存 UIA 函数。没有任何。绝不。无处可去。

我无法以编程方式更新 UIA 树...既不能通过调用任何 UIA 函数,也不能通过重新启动测试器应用程序,也不能通过来回切换 AUT 的 GUI。这种情况并非每次都会发生。有时,单击主按钮后,树似乎是最新的,并且一切正常。然而大多数运行都会失败。只有一种(神秘的)方法可以可靠地更新 UIA 树:使用inspect.exe。当使用 Inspect.exe 工具简要查看 AUT 的 UIA 子树时,问题突然消失了,我的测试应用程序可以立即访问实际的、更新的树!当然,重新启动AUT后问题又出现了。

inspect.exe 做什么来更新 UIA 树(另一个应用程序!!!)?如何在不使用任何缓存的情况下访问消失的元素?我错过了什么?

我真的需要帮助。

<小时/>

好的,还有一些发现:

  1. UISpy.exe 能够像 Inspect.exe 一样神秘地刷新 UIA 树(这特别奇怪,因为 Inspect.exe 使用与我相同的 native 接口(interface),但 UISpy.exe 使用 .NET 接口(interface)AFAIK)。这意味着这是一种系统范围内且持久的 UIA 问题,而不是纯粹的 native UIA 问题。

  2. 如果我在切换 View 之前不访问树,则不会发生该问题。 IE。如果我的测试器应用程序在通过单击主菜单按钮切换 View 之前未访问 AUT View ,则它会毫无问题地看到新的小部件。这强烈表明 native UIA API 存在一些缓存问题 - 即使我不知道这是如何发生的,因为我根本不缓存。有人知道是否发生了一些内部缓存吗?

我认为这可能是一个 API 错误。然而,考虑到我目前使用 Microsoft Connect 的经历,我对这个令人惊叹的东西有点迷失了:-(

有人有什么想法吗?

<小时/>

我还测试了 Snoop 工具。使用 Snoop 并不能像 Inspect 和 UISpy 那样暂时解决问题。关于Inspect.exe,还有另一个细节...足以折叠并展开AUT的子树来暂时治愈问题。

最佳答案

好的,更新一下。 UIA 看起来简直就是漏洞百出。我发现读取元素的内容数组和该数组的长度会更新隐藏的缓存。我还遇到过一种情况,其中选项卡的子树未更新,但可以通过切换到另一个选项卡并返回来更新(在这种情况下按模式读取内容没有帮助)。这两种情况都是可重现的,但我找不到任何方法来预测或预防它们。此外,许多第三方 WPF 组件似乎都有问题。我们最终放弃使用该 API。

关于wpf - 过时的 UI 自动化树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10782100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com