Wpf 如何访问不带';你不能实现AutomationPeer类吗?

Wpf 如何访问不带';你不能实现AutomationPeer类吗?,wpf,custom-controls,ui-automation,coded-ui-tests,Wpf,Custom Controls,Ui Automation,Coded Ui Tests,最近我从这篇文章中了解到- -WPF中的控件负责公开其UIA项本身,任何新添加的自定义控件功能在通过相应AutomationPeer类的实现公开之前都不可用于UIA。在我的工作中,我被指派负责使用大量工具栏的WPF应用程序的UI测试自动化。问题是,通过Microsoft UI Automation Library,我可以将工具栏(显然是作为自定义控件开发的)作为AutomationElements访问,但无法访问其中的按钮–子项/子代集合计数始终返回0。使用编码UI测试时,测试总是失败,并显示

最近我从这篇文章中了解到-

-WPF中的控件负责公开其UIA项本身,任何新添加的自定义控件功能在通过相应AutomationPeer类的实现公开之前都不可用于UIA。在我的工作中,我被指派负责使用大量工具栏的WPF应用程序的UI测试自动化。问题是,通过Microsoft UI Automation Library,我可以将工具栏(显然是作为自定义控件开发的)作为AutomationElements访问,但无法访问其中的按钮–子项/子代集合计数始终返回0。使用编码UI测试时,测试总是失败,并显示以下错误消息:

试验方法 CAM2QDummyTest.CodedUITest2.CodedUITestMethod1 引发异常:

Microsoft.VisualStudio.TestTools.UITest.Extension.FailedOperationOnBlockedControlException: 另一个控件正在阻止 控制请把电话接通 控件可见,然后重试该操作。 其他详情:

技术名称:“MSAA”

名称:“标准”

控件类型:“工具栏”

---> System.Runtime.InteropServices.COMException: 来自HRESULT的异常:0xF004F003


显然,他们没有实现相应的AutomationPeer类。现在,我只有应用程序,没有源代码。因此,我无法用我在上面提到的文章中描述的方法解决这个问题。有人能提供一些线索吗?我怎样才能访问工具栏的内部按钮?如有任何建议,将不胜感激

您可以通过
AutomationElement.GetSupportedProperties()
AutomationElement.GetSupportedPatterns()
查看支持哪些模式和属性,以查看是否有其他模式可供使用。可能是通过
SelectionPattern
或类似方式存在列表元素等,您可以通过这些元素访问按钮

否则,请与供应商联系,并要求他们添加相关的同行


您始终可以获得坐标(可能通过BoundingRectangleProperty),然后使用Win32函数在适当的位置模拟鼠标单击。肮脏的可能会有帮助。

非常感谢Lunivore。当然,我会先试试“获取”方法。但是,如果我必须遵循坐标方法,除了模拟鼠标点击按钮之外,还有没有其他方法可以与文本框或组合框进行通信?我的一些工具栏中也包含了它们:-(据我所知不是这样。你可以试试UISpy,看看它是否能产生任何结果,但我怀疑如果你的树是空的,它不会。我希望自定义控件用户能够正确地实现自动化对等点-这非常重要!那么,我只看到了死胡同。UISpy,Spy++,编码的UI测试生成器,Inspect-他们都没有更深入的研究比工具栏更重要。无论如何,谢谢你的时间,Luni。我确实知道另一个团队包装了他们的第三方组件,并在缺少的时候给了他们AutomationPeers。也许这种方法可以帮助你。恐怕我没有关于如何完成的详细信息。