1

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

http://blogs.msdn.com/b/patrickdanino/archive/2009/11/11/custom-controls-and-ui-automation.aspx

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

测试方法 CAM2QDummyTest.CodedUITest2.CodedUITestMethod1 抛出异常:

Microsoft.VisualStudio.TestTools.UITest.Extension.FailedToPerformActionOnBlockedControlException:另一个控件正在阻止该控件。请使被阻止的控件可见,然后重试该操作。额外细节:

技术名称:'MSAA'

名称:“标准”

控件类型:“工具栏”

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

显然他们没有实现相应的 AutomationPeer 类。现在,我只有应用程序,没有源代码。所以我无法按照我上面提到的文章中描述的方式解决问题。任何人都可以提供任何线索帮助我如何访问工具栏的内部按钮?任何建议将不胜感激。

4

1 回答 1

3

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

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

您始终可以获取坐标(可能通过 BoundingRectangleProperty),然后使用 Win32 函数在适当的位置模拟鼠标单击。讨厌。这个线程可能会有所帮助。

于 2011-02-09T12:49:34.350 回答