2

我正在使用White来驱动 WPF 应用程序的 UI,到目前为止它运行良好。

但是,我现在需要深入到被测应用程序的内部状态以检查某些条件。

具体来说,我有一个 DataGrid(来自WPFToolkit),它是数据绑定到List<MyBusinessObject>. 因此每一行都有DataContext一个MyBusinessObject

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

然后我可以这样做:

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

它返回 string "MyCompany.Namespace.MyBusinessObject",所以我快到,但我实际上无法获得实际的业务对象本身。

我已经查看了 WPF UIAutomation AutomationPeers (从 中AutomationPeer,您可以获得Owner属性,它是实际的业务对象),但似乎您需要在进程中才能使用这些,因为它们都有构造函数,需要您提供 WPF 控件。

有什么方法可以从外部进程构造一个 AutomationPeer,或者深入了解DataContextWPF 控件的实际情况?

4

2 回答 2

4

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

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

于 2009-08-21T08:15:18.950 回答
4

ItemStatus(附加属性)

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

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

于 2009-12-04T18:33:58.723 回答