如何在自动UI测试中避免破坏CSS路径/ XPath引用?

时间:2015-05-06 21:41:07

标签: user-interface testing selenium xpath testng

我有一组TestNG测试用于测试基于Web的UI。

例如,典型的测试会点击不同的菜单和按钮,并断言结果是我们期望的结果。

这些测试也在背景中使用Selenium。我在一个类中进行了测试,在另一个类中进行了网页模型。

要在网页中获取对UI组件(按钮,菜单等)的引用,我使用CSS或XPath选择器。这在模型类中是硬编码的。为了获得表示UI组件的对象,我在模型类中调用get方法,该方法使用css选择器返回UI组件的对象。然后使用该对象,我可以单击,选择,取消选择或对组件执行任何操作。

除非css选择器发生变化,否则一切正常。

有没有办法避免这种情况?

我在想是否可以通过执行每个步骤或单击来手动重复测试,并记录所用元素的css选择器,这比调试测试更快,找出页面中新元素名称的内容/ javascript手动并更新模型css选择器。

或者有没有办法链接网页开发并自动更新页面中的更改的模型代码,以便更改不会破坏测试?

谢谢!

3 个答案:

答案 0 :(得分:2)

如果使用具有有意义的id和/或CSS类的相关元素创建健壮的HTML,则需要调整测试选择器的UI的更改很少。 (你选择什么样的命名系统取决于你,重要的是它应该是系统的,它应该反映组件的含义而不是它应该如何显示。所以input200pxwidebold不是好的CSS类名,而mainMenuItem可能是。)

一般情况下,如果您发现自己必须调整单位测试的负载以覆盖SUT(被测系统)中的最微小变化,那么测试的脆弱性就是一种迹象(如果您愿意,还是有气味)设计应该改进。

答案 1 :(得分:2)

我不确定是否存在任何此类工具,但到目前为止我知道没有。我知道QTP具有内置功能,您可以在其中更新最新的元素/录音。但是,Selenium没有这样的机制。

就选择器而言, ids 始终是最佳选择。这就是Selenium核心团队和使用它的所有其他自动化工程师所建议的。请参阅SeleniumHQ提出的建议。 我非常同意他们,因为ids是独一无二的(即使有时我经历过重复的ids,并且通常是开发人员的错误),即使元素的位置或元素发生变化,也没有机会破坏你的测试。将(可能)打破其他选择器,如xpath / css。

我也同意在某些情况下,ID不可能是一种选择。在这种情况下,您必须非常小心编写选择器。使用高效的选择器,您可以避免/最小化失败的可能性,如此特定情况。

例如Google搜索输入标记的绝对xpath:

html/body/div[1]/div[3]/form/div[2]/div[2]/div[1]/div[1]/div[3]/div/div[3]/div/input[3]

但是,您需要避免使用这样的选择器并编写一个不依赖于html的每个标记或结构的选择器。

我可以为同一个元素编写如下内容:

//*[@id='gs_htif0']

相同的概念适用于 cssSelector 。另外,考虑使用 xpath 基于文本的搜索,即使这不应该是第一选择。

答案 2 :(得分:1)

我过去为修复路径/选择器而做的一些事情就是将它们作为字符串保存在一个或多个文件中,这些字符串由模型导入。此文件的路径/选择器字符串可能是Java中的属性文件。让您的开发团队拥有这些路径的维护,因此当他们更改GUI时,他们也会更新此文件。

是的,这还有一件事需要完成,但它确实使自动化测试的维护变得更加容易。

有一点需要注意,有时GUI会发生变化,控件会消失,或者更改类型,在这种情况下,新定位器无法帮助您。