在WPF应用程序的自动化(使用UI自动化;VSTS 2010)中,我们手动将所有自动化it添加到资源文件中,然后逐个访问它。考虑到应用程序可以随时扩展,手动添加这些ID可能会变得单调乏味。
那么,有没有什么工具可以为我们创建它呢?例如,以分层格式获取所有it,并将其存储在一个文件(xml或csv)中,然后我们可以在需要时对其进行解析。
我希望有一个像UISpy这样的工具,它不仅可以窥探所有的元素,而且还可以导出相同的元素。
这样的工具存在吗?或者还有其他方法吗?
任何有价值的反馈都会受到高度赞赏。
谢谢!
发布于 2015-12-24 00:06:14
我喜欢这样:
public static class AutomationIds
{
public static readonly string MyDataGridId= Create();
private static string Create([CallerMemberName] string name = null)
{
return name;
}
}<DataGrid AutomationProperties.AutomationId="{x:Static local:AutomationIds.MyDataGridId}"
... />然后在测试中
var dataGrid = window.Get<ListView>(AutomationIds.MyDataGridId);发布于 2012-11-20 02:33:22
直接在XAML中分配自动化ID,然后解析XAML文件,因为它们毕竟是XML……
发布于 2016-05-13 11:30:38
让我看看..。首先,我认为你的数据是不分层次的-只是因为一个控件可以动态地分配给另一个控件的子控件。
如果我们将问题转换为一个子集:“我们如何在时间t获得控件的分层视图?”然后我们可以用main来回答这个问题,比如说,使用一个简单的RawViewWalker (在walker上进行一个简单的广度优先搜索,从你的主窗口开始就可以了--当然是在应用程序运行的时候,这样UIA就可以到达并查询它)。
但是这个子集不会满足您最初的问题,因为您可能会看到整个ui集合的一部分(因为在时间t会隐藏/未激活一些)。
因此,使用基于UIA的工具(如uispy)变得非常困难,因为您必须将应用程序视图设置为不同的状态,以便在不同的时间访问应用程序中的所有控件t1、t2……
我建议同时解析所有的xmls,并构建应用程序的“静态”控件映射的完整树,我相信这将最接近您的要求。
鉴于这是一个古老的问题,我怀疑它是否再重要了,但我只是想在这里做出区分。
https://stackoverflow.com/questions/13458068
复制相似问题