我正在使用 White驱动 WPF 应用程序的 UI,到目前为止效果很好。
然而,我现在需要深入了解被测应用的内部状态以检查某些情况。
具体来说,我有一个 DataGrid(来自 WPFToolkit ),它数据绑定(bind)到 List<MyBusinessObject>
.因此每一行都有一个 DataContext
的 MyBusinessObject
我可以通过使用它的自动化 ID 找到它来获得使用白色的网格。
然后我可以这样做:
var row = Grid.Rows[0]
row.AutomationElement.Current.Name
返回字符串 "MyCompany.Namespace.MyBusinessObject"
,所以我差不多了,但实际上我无法获取实际的业务对象本身。
我查看了 WPF UIAutomation AutomationPeers(从 AutomationPeer
中,您可以获得 Owner
属性,这是实际的业务对象),但似乎您需要在进程中才能使用这些,因为它们都有构造函数,需要您提供 WPF 控件。
有什么方法可以从外部进程构建 AutomationPeer,或者深入了解实际的 DataContext
WPF控件的?
最佳答案
我认为你做不到。您可以使用 UI Automation 交换信息的唯一方法是通过预定义的提供者,它们专注于 UI 及其显示的内容,而不是它背后的数据:您永远不会在您的应用程序和测试应用程序之间交换实际对象。
我认为使用 UIA 最接近的方法是将您的 BusinessObject 或至少相关数据编码为字符串,然后使用 ValuePattern 检索该字符串。
关于wpf - 如何使用 UI Automation(和/或 White)从外部应用程序获取控件的 DataContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1309315/