3

基本上我正在使用 Visual Studio CODE UI 对基于 Windows 的应用程序进行 UI 自动化测试,当布局更改或在 GUI 中添加一些新控件时出现问题,并且控件的控件 ID 发生更改。正如我们所见从屏幕截图中可以看出,CODE UI builder 重新记录了一个典型的层次结构:-

主窗口 -> 具有控件 ID 属性的窗口 -> 实际控件。

所以这是我与这个层次结构和控制 ID 有关的问题?

1) 这些控件 ID 是如何生成的?

a) 我知道生成这些控件 ID 号的逻辑取决于 GUI 中控件的深度,但我无法找到任何一致的生成方式,例如在图像中两个按钮connect 和 help似乎在同一级别的 GUI 中,但它们的控件 ID 仍然如此不同1 和 5013

b) 这些控件 ID 是由测试环境中使用的编码 UI 构建器生成的,还是产品开发方面的一些逻辑或生成它们的代码本身

2)有没有办法跳过这个带有控件ID的中间层窗口并成功地进行录制和播放。(在我的例子中,我们可以访问所有控件的逻辑名称,这些控件本身在本质上是唯一的,我们很好摆脱这些控制ID)

3)另外,我们是否可以采用混合方法,其中几乎所有控件都有两层,但对于某些特殊情况下三层,其中不可能仅使用逻辑名称或标签,并且我们明确要求控件 ID

4)最后但并非最不重要的一点是,据我所知,这种类型的可访问性实现有多少可以在测试环境中完成在测试环境中使用各种工具(如 CODE UI)进行测试。但是对于大型产品,我认为这不是一个好方法,因为它给开发方面带来了额外的负担,就像在需要交付给客户的产品中添加额外的不必要的代码(仅用于测试目的)。

为了清楚我的问题,请参阅下面的图片作为参考。

第一张图片显示远程桌面 GUI

第 2 显示计算机:由 CODED UI 记录的控件属性

第 3 显示了 CODED UI 记录的连接按钮属性

4th 显示了 CODED UI 记录的帮助按钮属性

远程桌面 计算机: 连接按钮 帮助按钮

4

1 回答 1

1

我现在才开始使用 CodedUI,但我之前使用不同的产品并使用相同的技术(MSUIA 等)做了很多 UI 自动化。所以这也应该适用于此。

每个控件都有几个属性,比如 name 和 automationid 来命名最重要的。如果您正在自动化您自己的 UI(您自己编码/构建它),您应该始终尝试为每个控件提供唯一的自动化 ID,这将使您在自动化时的生活变得更加轻松。名称通常是一个不好的选择,因为当您拥有不同语言版本的程序时,它会经常更改。

由于在这种情况下您没有来源并且无法影响它报告的值,因此您必须使用给定的内容。尽管如此,即使 CodedUI 记录器会选择它认为合适的任何属性,您也可以通过更改找到的每个元素的 UIMap.uitest 自己更改搜索条件:

VS 编辑搜索属性框

这可能需要一些时间来适应。特别是对于元素具有相似属性的更复杂的 UI,也适用于动态 UI 等。

顺便说一句,我之前直接使用的产品与 AutomationElements 一起使用,在这里您可以选择并做您想做的事——即使维护和启动成本很高。(好的,所以它通常非常耗时 - 并且总是比使用任何现成的解决方案(如 VS Coded UI)更耗时。)

一个更简单的解决方案是简单地通过坐标(相对于一些已知的控件,如主窗口或选项卡组),这也将在 99% 的时间里工作,让你更快地达到你的目标。

好的,回答你的具体问题

1)如果我认为是这样,它们是在运行时生成的,并且真的不依赖它们

2)当进入较低级别(如 AutomationElement)时,您可以搜索整棵树。尽管如此,这通常也会使搜索变得相当慢 - 如果你自己得到整棵树并遍历它,速度不会快多少

3)你可以混合任何你想要的东西。实际上,您甚至可以将句柄转换为 AutomationElements 到 Controls(至少对于大多数标准控件而言)。因此,您可以使用任何技术(例如 Win32 SDK)来遍历树。实际上,所有技术中的所有 GUI 树都是相似的——尽管不一样。很少有人编码似乎遵守任何标准.. 至少这是我的经验。

4)使用各种技术、坐标(实际上,我什至使用了屏幕截图)等,您几乎可以实现所有目标。不过这需要很多很多时间。在开发过程中正确掌握基础知识并考虑 UI 测试开发人员的反馈可以极大地帮助加快以后的测试。最简单的例子:应用程序是否在屏幕上绘制“一切正常”,或者是否有一个可以访问的控件具有“一切正常”的名称属性 - 第二种解决方案对于自动化人员来说会好得多。

另外,对于比较复杂的UI,如果你是在企业环境,有钱又想花很多时间在UI测试上,我推荐Ranorex、SilkRunner之类的产品。我使用 Ranorex Eval 工作了几天,并且(在习惯了它之后)可以导航非常难以事先导航的 UI。

于 2013-06-28T07:16:14.060 回答