如何在编码的UI测试中处理更改控件ID

时间:2013-01-30 11:10:37

标签: c# visual-studio-2010 automation ui-automation coded-ui-tests

基本上我正在使用visual studio CODE UI进行基于Windows的应用程序的UI自动化测试,问题出现在布局更改或GUI中添加了一些新控件时,控件的控件ID也会发生变化。我们可以从屏幕截图中看到,典型的层次结构由CODE UI构建器重新编译,即: -

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

所以这里有关于这个层次和控制ID的问题吗?

1)如何生成这些控制ID?

  

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

     

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

2)有没有办法跳过控制ID 的窗口中间层,并成功进行记录和播放。(在我的情况下,我们可以访问所有控件的逻辑名称它们本身就是独一无二的,我们很好地摆脱了这些控制ID)

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

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

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

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

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

第三个显示CODED UI记录的连接按钮属性

第四个显示CODED UI记录的帮助按钮属性

Remote Desktop Computer: Connect Button Help Button

1 个答案:

答案 0 :(得分:1)

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

每个控件都有几个属性,例如name和automationid,用于命名最重要的属性。如果您自动化自己的UI(您自己编写代码/构建它),您应该始终尝试为每个控件提供一个独特的自动化功能,这将使您在自动化时更轻松。名称通常是一个糟糕的选择,因为当您拥有不同语言版本的程序时,它经常会发生变化。

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

VS Edit Search Properties box

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

顺便说一下,我之前使用的产品直接使用的是AutomationElements,在这里你可以选择并做你想做的全部功能 - 即使维护成本高,启动成本高。 (好吧,所以它通常非常耗时 - 并且总是比使用像VS Coded UI这样的现成解决方案更耗时。)

另一个简单的解决方案是简单地通过坐标(相对于一些已知控件,如主窗口或标签组),这也将在99%的时间内工作,并使您更快地达到目标。 / p>

好的,回答你的具体问题

1)如果这是我认为的那样,它们是在运行时生成的,并且确实没有依赖它们

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

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

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

此外,对于更复杂的用户界面,如果您在公司环境中,有一些钱,并且想要花费大量时间进行UI测试,我建议使用Ranorex,SilkRunner等产品。我和Ranorex Eval合作了几天,并且(经过一些习惯之后)可以导航那些事先很难自我导航的UI。