如何使用UI自动化(和/或白色)从外部应用程序获取控件的DataContext

时间:2009-08-20 23:02:35

标签: wpf ui-automation white

我正在使用White来推动WPF应用的用户界面,到目前为止它运作良好。

我现在正处于这个阶段,我需要深入研究被测应用程序的内部状态以检查某些条件。

具体来说,我有一个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

2 个答案:

答案 0 :(得分:4)

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

我认为使用UIA最接近的方法是在字符串中对BusinessObject或至少相关数据进行编码,并使用ValuePattern检索该字符串。

答案 1 :(得分:4)

<强> ItemStatus (Attached Property)

  

此属性使客户能够确定元素是否正在传达有关项目的状态。例如,与消息传递应用程序中的联系人关联的项目可能是“忙”或“已连接”。

您无法检索基础类,您只能获取UI内容。但是,您的业务类的Automation Peer可以公开Item Status。您可以在其中放置一个简单的字符串或even XML