为什么 Inspect.exe 频繁挂起且 AutomationId 显示不一致?

问题描述 投票:0回答:3

我正在尝试使用 MS UI Automation 来测试 WPF 应用程序,并使用 Windows SDK 中包含的检查对象工具 (inspect.exe) 来查找某些元素上的 AutomationId 属性。

Inspect 对我来说表现得很奇怪:

  • 如果我关闭所有应用程序并启动 WPF 应用程序和 Inspect,Inspect 能够看到各种 UI 元素的 AutomationId 属性。没有 AutomationId 的元素仅显示两个引号,表示空字符串 ("")。

  • 在 WPF 应用程序中执行一些操作后,inspect.exe 挂起,我必须终止它并重新启动它。尽管机器的 CPU 和 RAM 利用率约为 50% 或更低,但我尝试等待几分钟(有几次可能接近 20 或 30 分钟),但无济于事。

  • 重新启动后,inspect.exe 无法再找到任何 UI 元素的 AutomationId,即使是那些之前有的元素。更重要的是,当鼠标悬停在 WPF 应用程序上时,该属性完全丢失 - 它根本不再列出,甚至没有空字符串值。
  • 如果我将鼠标移动到另一个屏幕(具体来说,移动到另一台计算机,使用无边框鼠标),AutomationId 属性将重新出现,且值为“FormDot”
  • 如果我在 WPF 应用程序仍在运行时仅重新启动检查额外次数,则检查的行为仍与第一次重新启动后相同。
  • 如果我在检查仍在运行时仅重新启动 WPF 应用程序,检查的行为仍与首次重新启动后相同。
  • 如果我关闭检查和 WPF 应用程序,然后启动检查,然后启动 WPF 应用程序,一切都会正常工作一段时间,并且检查会在 WPF 应用程序中的几个元素上找到 AutomationId...直到检查点又挂了。

我已经尝试按照 https://stackoverflow.com/a/7833728/44737 中的建议正常运行检查并以管理员身份运行检查,并且无论哪种方式,它的行为都是相同的。

我做错了什么(如果有的话)?我是否太不耐烦了,我是否需要等待很长时间而不是假设检查已挂起?为什么检查关于 AutomationId 的行为会有所不同?

wpf ui-automation inspect microsoft-ui-automation
3个回答
4
投票

Inspect.exe 有多个版本。据我所知,最新的是 2012 年的版本,在帮助/关于对话框中显示版本 7.2.0.0。

旧版本的左侧没有树视图,所有检测到的自动化元素都显示在树中,因此很容易检查您是否使用了正确的视图。

最新的工具工作得相当正确,但是,恕我直言,迄今为止使用 UI 自动化的最佳工具是 Visual UI Automation verify。这是一个 .NET 程序,其源代码可在此处获取: UI 自动化验证(UIA 验证)测试自动化框架

请注意,虽然它是一个 .NET 程序,但它不使用标准 .NET 自动化 dll(更多信息请参见:UISpy.exe 和 Inspect.exe 有什么区别?(来自 Microsoft Windows SDK))。

关于 AutomationId 属性,为了澄清我对这个问题的最初评论,我的意思是它的有用性取决于您尝试自动化的程序。

如果您作为开发人员拥有它,它显然很有趣。例如,如果您使用 WPF,则可以使用

x:Uid
属性,它显然是用于 UI 自动化。在 Winforms 空间中,它也非常有用,因为 UI 自动化默认情况下将使用控件的 AccessibleName 并恢复到 Name 作为 AutomationId 值的后备。

但是有许多应用程序不依赖于.NET(浏览器、本机应用程序等)。通常,对于这些应用程序,使用其他属性会更容易。


0
投票

我已经在 Microsoft Surface Studio PC(运行 Windows 10)上使用 Inspect.exe 一段时间了,我的经验是,当 Windows 更新挂起时,inspect.exe 会更频繁地挂起(有时总是)。当更新完成后,inspect.exe 仍然有点慢,但稳定得多。


0
投票

等待inspect.exe响应的问题也发生在我身上。我很确定这与计算机的配置有关,但我不知道是什么。当我在沙箱上安装相同的 inform.exe 时,它在那里表现得非常完美。有没有人有办法解决这个问题?

© www.soinside.com 2019 - 2024. All rights reserved.