我正在使用White来推动WPF应用的用户界面,到目前为止它运作良好。
我现在正处于这个阶段,我需要深入研究被测应用程序的内部状态以检查某些条件。
具体来说,我有一个DataGrid(来自WPFToolkit),它被数据绑定到List<MyBusinessObject>
。因此,每行都有DataContext
个MyBusinessObject
我可以通过使用白色的自动化ID来获取网格。
我可以这样做:
var row = Grid.Rows[0]
row.AutomationElement.Current.Name
返回字符串"MyCompany.Namespace.MyBusinessObject"
,所以我几乎,但我实际上无法获得实际的业务对象。
我研究过WPF UIAutomation AutomationPeers(来自AutomationPeer
,您可以获得Owner
属性,这是实际的业务对象),但似乎您需要进行处理使用这些,因为它们都有需要你提供WPF控件的构造函数。
有什么方法可以从外部进程构建AutomationPeer,或者深入研究WPF控件的实际DataContext
?
答案 0 :(得分:4)
我认为你不能。使用UI Automation交换信息的唯一方法是通过预定义的Providers,它们专注于UI及其显示的内容,而不是其背后的数据:您永远不会在应用程序和测试应用程序之间交换实际对象。
我认为使用UIA最接近的方法是在字符串中对BusinessObject或至少相关数据进行编码,并使用ValuePattern检索该字符串。
答案 1 :(得分:4)
<强> ItemStatus (Attached Property) 强>
此属性使客户能够确定元素是否正在传达有关项目的状态。例如,与消息传递应用程序中的联系人关联的项目可能是“忙”或“已连接”。
您无法检索基础类,您只能获取UI内容。但是,您的业务类的Automation Peer可以公开Item Status。您可以在其中放置一个简单的字符串或even XML。