wpf - 如何使用 UI Automation(和/或 White)从外部应用程序获取控件的 DataContext

标签 wpf ui-automation white-framework

我正在使用 White驱动 WPF 应用程序的 UI,到目前为止效果很好。

然而,我现在需要深入了解被测应用的内部状态以检查某些情况。

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

我可以通过使用它的自动化 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/

相关文章:

wpf - 在 WrapPanel 中共享可用空间

python - 如何选择弹出消息 "Allow",它是 HTML 页面的 Span 元素。预计使用 find_element_by_css_selector 解决方案

ios - 从命令行运行后仪器无法继续

testing - 白色 UI 自动化框架 : back colour

c# - 在模式对话框关闭时更新父页面?

wpf - 快速执行且线程安全的可观察集合

c# - 如何使 wpf 组合框拉出特殊属性

javascript - 如何从 Cypress 测试运行器和控制台日志中禁用 blockedHosts url?

automated-tests - UI 自动化白色框架 "NonComVisibleBaseClass was detected"异常

.net - 通过应用程序名称获取所有应用程序 - TestStack.White .NET