我正在尝试使用MS UI Automation来测试WPF应用程序,并使用Windows SDK附带的Inspect Object工具(inspect.exe)来查找某些元素的AutomationId属性。
Inspect对我来说非常奇怪:
如果我关闭所有应用程序并启动WPF应用程序和Inspect,则inspect能够查看各种UI元素的AutomationId属性。没有AutomationId的元素只显示两个引号,表示空字符串(“”)。
在WPF应用程序中执行一些操作后,inspect.exe挂起,我必须将其删除并重新启动它。尽管机器的CPU和RAM利用率在50%左右或更低,但我已经尝试了几分钟 - 有时可能接近20或30分钟 - 但无济于事。
我已尝试正常运行检查,并按照https://stackoverflow.com/a/7833728/44737中的建议以管理员身份运行检查,并且它的行为相同。
如果有的话,我做错了什么?我是不是太急躁了,我需要等待很长时间,而不是假设检查挂了吗?为什么检查有关AutomationId的行为会有所不同?
答案 0 :(得分:1)
Inspect.exe有多个版本。据我所知,最新的是2012年的版本,在帮助/关于对话框中说的是版本7.2.0.0。
旧版本左侧没有树状视图,所有检测到的自动化元素都显示在树中,因此很容易检查您是否正在使用正确的树状视图。
最新的一个工作正常,但是,恕我直言,迄今为止使用UI自动化的最佳工具是Visual UI Automation Verify。这是一个.NET程序,他的源代码可以在这里找到: UI Automation Verify (UIA Verify) Test Automation Framework。
请注意,尽管它是一个.NET程序,但它不使用标准的.NET自动化dll(更多内容在此处:What's the difference of UISpy.exe and Inspect.exe? (From Microsoft Windows SDK))。
关于AutomationId属性,为了澄清我对该问题的初步评论,我的意思是它的用处取决于您尝试自动化的程序。
如果你以开发者的身份拥有它,那显然很有趣。例如,如果您正在使用WPF,则可以使用x:Uid
属性,它显然意味着UI自动化。在Winforms空间中,它也非常有用,因为默认情况下UI Automation将使用控件的AccessibleName,并且对于AutomationId值,还原为Name作为后备。
但是有许多应用程序不依赖于.NET(浏览器,本机应用程序等)。通常,对于这些应用程序,使用其他属性更容易。
答案 1 :(得分:0)
我在Microsoft Surface Studio PC(运行Windows 10)上使用inspect.exe已有一段时间了,我的经验是,在Windows Update挂起时,inspect.exe会更频繁地挂起(有时总是挂起)。如果无法进行更新,则inspect.exe仍然有些慢,但要稳定得多。