【问题标题】:Setting automationIDs across an existing application在现有应用程序中设置自动化 ID
【发布时间】:2019-08-24 07:32:00
【问题描述】:

如果我有一个现有的 WPF 应用程序,并且我想将automationID 分配给未设置它们的整个应用程序,那么有什么好的方法(对于未动态添加的控件)?某种遍历所有 xaml 文件并添加自动化 ID 的脚本?

我的目标是使用 winappdriver 编写 ui 测试。

我已经用谷歌搜索了这个,但没有找到任何似乎可以满足我想要的东西。也许我误解了结果。 This post 似乎问了同样的问题,但我看不出所提供的答案是一个合适的解决方案。

【问题讨论】:

    标签: wpf xaml ui-automation winappdriver


    【解决方案1】:

    在 WPF 中,当控件名称属性具有值时,它对应于使用 UI 检查器工具(如 Inspect.exe)找到的 AutomationID。看看关于automationIDhere的备注部分。因此,应用程序应该已经拥有大部分的自动化 ID。

    唯一一次我没有控件的automationID 是在使用代码创建控件时。调整 XAML 的脚本在这里对您没有帮助,因为这些控件不会有 XAML。即使您使用了脚本,您也不能确定所有的自动化 ID 都可用。

    使用第 3 方控件时,AutomationId 的可用性取决于第 3 方是否支持它。如果它们不支持 AutomationId,您可以将该控件包装在自定义控件中并以这种方式公开一个 AutomationID。 以下是一些可能有用的资源:

    wrapped control

    UI automation of a WPF Custom Control

    在使用现有应用程序时,我通常只是在执行过程中填写控件的名称属性,因此对应用程序的更改量保持在最低限度。

    【讨论】:

    • 我问这个问题的原因是因为我使用了 Inspect.exe,但在我正在使用的应用程序中没有找到很多元素的自动化 ID。它正在使用基于 WPF 构建的第三方 UI 库,因此这可能会阻止您发布的链接的行为(控件的名称对应于自动化 ID)。我会调查的。我还编辑了我的原始帖子以表明它不是用于动态创建的控件,正如我一直在想的那样,但没有说明。
    • 啊,是的,我完全忘记了这一点。我更新了我的答案。当我有时间时会更多地扩展我的答案。
    猜你喜欢
    • 2013-05-08
    • 1970-01-01
    • 2018-11-20
    • 2021-01-16
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多