为什么 Inspect.exe 经常挂起并且不一致地显示 AutomationId?

Why does Inspect.exe hang frequently and inconsistently display AutomationId?

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

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

我已经尝试 运行 按照 中的建议以正常方式和以管理员身份进行检查,两种方式的行为都相同。

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

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

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

最新的一个工作得很好,但是恕我直言,迄今为止使用 UI 自动化的最佳工具是 Visual UI Automation Verify。这是一个 .NET 程序,他的源代码可以在这里找到: UI 自动化验证(UIA 验证)测试自动化框架.

请注意,虽然它是一个 .NET 程序,但它不使用标准的 .NET 自动化 dll(更多信息请参见此处:)。

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

如果您作为开发人员拥有它,那显然很有趣。例如,如果您正在使用 WPF,则可以使用 x:Uid 属性,这显然意味着 UI 自动化。在 Winforms space 中,它也非常有用,因为 UI Automation 将使用控件的 AccessibleName by default and revert to the Name 作为 AutomationId 值的后备。

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

我在 Microsoft Surface Studio PC 上使用 inspect.exe 有一段时间了(运行 Windows 10),我的经验是 inspect.exe 会挂很多当 Windows 更新挂起时更频繁(有时总是)。当更新停止时,inspect.exe 仍然有些慢,但更稳定。