在WebDriver测试中维护Application UI和UI定位器之间的一致性

时间:2013-09-06 14:53:42

标签: webdriver selenium-webdriver automated-tests ui-automation

我正面临一个共同的问题,我们大多数人在编写UI自动化测试时都面临着这个问题: 自动化测试与AUT的强大耦合。
如果增强功能更改了模块的UI,则必须花费大量时间进行更改:
1.用于测试模块的代码(逻辑) 2.或者只是元素的定位器。

如果UI中的更改最小,则可以手动替换测试中的定位器。但考虑到期限和时间限制,如果变化非常大,则无法做到这一点。

我试图找到一种方法来实现一个工具/实用程序,这将节省我的时间来更改我存储在我的定位器映射中的Web应用程序中的任何元素的定位器。 例如: 我在locator-map中有一个搜索结果列表的定位器:

searchResultsLocator=span[id="searchResults"] > ul > li[class="ui-menu-item"] > a

如果开发人员通过将div替换为某个补丁的一部分来改变这一点,那么我希望在我的定位器映射中自动更新。

有没有人解决过这个问题?有人可以建议吗?

2 个答案:

答案 0 :(得分:1)

我不确定问题是否已修复,如果没有修复,你可以尝试这个..

我面对同样的问题但是没有更多。 创建一个保存所有元素引用的文件(如果没有ID,则可以使用XPath),然后使用一个从该文件获取值而不是硬编码的变量。

不要为整个应用程序创建单个文件,请确保在单个文件中有相关元素(比如单页元素)。

因此,当UI发生变化时,您只能编辑一个地方而不是整个测试代码。

答案 1 :(得分:0)

您可以为每个元素使用多个/备份定位器。请在此处查看我的问题:Pros/cons for using multiple locators per element in Selenium?

这不会自动更新您的定位器,但我担心尝试这样做可能会错误地更新它们。然后你可能会得到一种误报 - 测试通过,因为它们会自动更新为新的定位器,但是错误元素的定位器!

但是,预定义多个定位器允许您的测试在一个定位器发生故障时继续平稳运行,但您可以生成有关失败的报告/通知,然后仍然有时间手动更新定位器,只要在其中至少有一个备份继续工作。