首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在一个文件中获取WPF应用程序的所有AutomationID?

如何在一个文件中获取WPF应用程序的所有AutomationID?
EN

Stack Overflow用户
提问于 2012-11-20 00:29:18
回答 3查看 575关注 0票数 2

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

那么,有没有什么工具可以为我们创建它呢?例如,以分层格式获取所有it,并将其存储在一个文件(xml或csv)中,然后我们可以在需要时对其进行解析。

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

这样的工具存在吗?或者还有其他方法吗?

任何有价值的反馈都会受到高度赞赏。

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2015-12-24 00:06:14

我喜欢这样:

代码语言:javascript
复制
public static class AutomationIds
{
    public static readonly string MyDataGridId= Create();

    private static string Create([CallerMemberName] string name = null)
    {
        return name;
    }
}

代码语言:javascript
复制
<DataGrid AutomationProperties.AutomationId="{x:Static local:AutomationIds.MyDataGridId}"
          ... />

然后在测试中

代码语言:javascript
复制
var dataGrid = window.Get<ListView>(AutomationIds.MyDataGridId);
票数 1
EN

Stack Overflow用户

发布于 2012-11-20 02:33:22

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

票数 0
EN

Stack Overflow用户

发布于 2016-05-13 11:30:38

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

如果我们将问题转换为一个子集:“我们如何在时间t获得控件的分层视图?”然后我们可以用main来回答这个问题,比如说,使用一个简单的RawViewWalker (在walker上进行一个简单的广度优先搜索,从你的主窗口开始就可以了--当然是在应用程序运行的时候,这样UIA就可以到达并查询它)。

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

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13458068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档