最近我从这篇文章中了解到了 -
http://blogs.msdn.com/b/patrickdanino/archive/2009/11/11/custom-controls-and-ui-automation.aspx
- WPF中的控件负责自己公开其UIA项目,并且在通过相应的AutomationPeer类的实现公开它们之前,UIA无法使用任何新添加的自定义控件功能。在我的工作中,我被分配到使用大量ToolBars的WPF应用程序的UI测试自动化。问题是,通过Microsoft UI自动化库,我可以访问ToolBars(显然是开发为自定义控件)作为AutomationElements,但我无法访问其中的按钮 - 儿童/后代集合的计数始终返回0.使用编码的UI测试时,测试总是失败并显示以下错误消息:
测试方法 CAM2QDummyTest.CodedUITest2.CodedUITestMethod1 抛出异常:
Microsoft.VisualStudio.TestTools.UITest.Extension.FailedToPerformActionOnBlockedControlException: 另一个控制是阻止 控制。请阻止 控制可见并重试该操作。 其他细节:
TechnologyName:'MSAA'
名称:'标准'
ControlType:'ToolBar'
---> System.Runtime.InteropServices.COMException: 来自HRESULT的异常:0xF004F003
显然他们没有实现相应的AutomationPeer类。现在,我只有应用程序,而不是源代码。所以我无法按照上面提到的文章中描述的方式解决问题。任何人都可以提供任何线索帮助我如何访问工具栏的内部按钮?任何建议将不胜感激。
答案 0 :(得分:3)
您可以通过AutomationElement.GetSupportedProperties()
和AutomationElement.GetSupportedPatterns()
了解支持 的模式和属性,看看是否有不同的模式可以使用。可能是通过SelectionPattern
或类似的列表元素等,您可以访问这些按钮。
否则,请与供应商联系并要求他们添加相关的同行。
您始终可以获取坐标(可能是通过BoundingRectangleProperty),然后使用Win32函数在适当的位置模拟鼠标单击。讨厌。 This thread可能有帮助。