2

在 WPF 应用程序的自动化中(使用 UI 自动化;VSTS 2010),我们手动将所有自动化 ID 添加到资源文件中,然后一一访问它。考虑到应用程序可以随时扩展,手动添加这些 ID 可能会变得乏味。

那么,是否有任何可用的工具可以为我们创建这个?即以分层格式获取所有 id 并将其存储在一个文件(xml 或 csv)中,然后我们可以在需要时对其进行解析。

我希望有一个像 UISpy 这样的工具,它不仅可以监视所有元素,还可以导出相同的元素。

有这样的工具吗?或者有什么替代方法吗?

非常感谢任何有价值的反馈。

谢谢!

4

3 回答 3

1

我喜欢这样:

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);
于 2015-12-23T16:06:14.293 回答
0

直接在 XAML 中分配自动化 ID,然后解析 XAML 文件,因为它们毕竟是 XML...

于 2012-11-19T18:33:21.537 回答
0

让我们看看......首先,我认为您的数据不是分层的 - 只是因为可以动态地将控件分配为另一个控件的子级。

如果我们将问题更改为一个子集:“我们如何才能在时间 t 获得控件的分层视图?” 那么我们可以用 MS UIA 来回答这个问题,比如说,使用一个简单的 RawViewWalker(只需在 walker 上进行简单的广度优先搜索,从主窗口开始就可以了 - 当然,在应用程序运行时,UIA 可以访问和查询它)。

但是这个子集不能满足您最初的问题,因为您可能会看到整个 ui 集合的一部分(因为有些会在时间 t 被隐藏/尚未激活)。

因此,使用基于 UIA 的工具(例如 uispy)变得非常困难,因为您必须将应用程序视图设置为不同的状态才能在不同时间 t1、t2 访问应用程序中的所有控件...

我建议同时解析您的所有 xml,并构建应用程序“静态”控制图的完整树,我相信这将最接近您的要求。

鉴于这是一个老问题,我怀疑它不再重要,但只是想在这里做出区分。

于 2016-05-13T03:30:38.257 回答