在WPF应用程序的自动化中(使用UI automation;VSTS 2010),我们手动将所有automation ID添加到资源文件中,然后逐一访问它。考虑到应用程序可以随时扩展,手动添加这些ID可能会变得乏味。
那么,有什么可用的工具可以为我们创建这个吗?即,以分层格式获取所有id,并将其存储在文件(xml或csv)中,然后我们可以根据需要对其进行解析。
我希望有一个像UISpy这样的工具,它不仅可以监视所有元素,还可以导出相同的元素。
这样的工具存在吗?或者有其他方法吗?
任何有价值的反馈都将不胜感激。
谢谢!
我喜欢这个:
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);
直接在XAML中分配自动化ID,然后解析XAML文件,因为它们毕竟是XML。。。
让我们看看。。。首先,我认为您的数据不是分层的——只是因为一个控件可以动态地分配为另一个控件的子控件。
如果我们把问题改为一个子集:"我们如何在时间t获得控件的层次视图?"那么我们可以用MS UIA回答这个问题,比如说,使用一个简单的RawViewWalker(只需在walker上进行简单的广度优先搜索,从主窗口开始即可-当然,在应用程序运行时,UIA可以访问和查询它)。
但是这个子集不能满足您最初的问题,因为您可能会看到整个ui集合的一部分(因为有些会在时间t被隐藏/尚未激活)。
因此,使用基于UIA的工具(如uispy)变得非常困难,因为您必须将应用程序视图设置为不同的状态,才能在不同的时间t1、t2…访问应用程序中的所有控件
我建议同时解析所有xml,并构建一个完整的应用程序"静态"控制图树,我相信这将最接近您的要求。
鉴于这是一个古老的问题,我怀疑它是否重要,但我只是想在这里做出区分。