2009-08-20 32 views
1

我正在使用White来驱动WPF应用程序的UI,并且目前运行良好。如何从使用UI自动化(和/或白色)的外部应用程序获取控件的DataContext

我在这一点上,但我需要捅入被测试的应用程序的内部状态来检查一些条件。

具体来说,我有一个DataGrid(从WPFToolkit),这是一个数据绑定到List<MyBusinessObject>。因此,每一行都有一个DataContextMyBusinessObject

我可以通过使用白色找到它的自动化ID来获取网格。

然后我就可以做到这一点:

var row = Grid.Rows[0] 
row.AutomationElement.Current.Name 

它返回字符串"MyCompany.Namespace.MyBusinessObject",所以我几乎,但我不能真正得到实际的业务对象本身。我已经看过WPF UIAutomation AutomationPeers(从AutomationPeer,你可以得到Owner财产,这是实际的业务对象),但似乎你需要在进程中使用这些,因为他们都有构造函数需要你提供WPF控件。

有没有什么办法可以从外部过程构建一个AutomationPeer,或者深入到WPF控件的实际DataContext

回答

3

我不认为你可以。您可以使用UI Automation交换信息的唯一方式是通过预定义的提供者,他们专注于UI及其显示的内容,而不是它背后的数据:您绝不会在应用程序和测试应用程序之间交换实际对象。

我认为使用UIA可以得到最接近的结果是将您的BusinessObject或至少相关的数据编码到字符串中,并使用ValuePattern检索该字符串。

3

ItemStatus (Attached Property)

该属性使得客户端,以确定一个元素是否被传送的关于项目的状态。例如,与消息传递应用程序中的联系人关联的项目可能是“忙碌”或“已连接”。

你不能检索底层的类,你只能得到UI的东西。但是,您的商务类的自动化对等可以公开Item Status。你可以在那里放一个简单的字符串或even XML

相关问题