繁体   English   中英

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

[英]How can I get a control's DataContext from an external application using UI Automation (and/or White)

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

然而,我正处于这一点,我需要深入研究被测应用程序的内部状态以检查某些条件。

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

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

我可以这样做:

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

它返回字符串"MyCompany.Namespace.MyBusinessObject" ,所以我几乎就在那里,但我实际上无法获得实际的业务对象本身。

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

有什么方法可以从外部进程构建AutomationPeer,或者深入研究WPF控件的实际DataContext

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

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

ItemStatus(附属物)

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

你无法检索底层类,你只能获得UI的东西。 但是,业务类的Automation Peer可以公开项状态 你可以在那里放一个简单的字符串, 甚至是XML

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM