最近我从这篇文章中了解到——
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 类。现在,我只有应用程序,没有源代码。所以我无法按照我上面提到的文章中描述的方式解决问题。任何人都可以提供任何线索帮助我如何访问工具栏的内部按钮?任何建议将不胜感激。