在我的测试自动化实践中,我总是使用gui映射策略来减少维护工作。
例如,如果我需要识别“ Google搜索”按钮(www.google.com),其XPAth将
//input[@name='q']
而不是/html/body/center/form/table/tbody/tr/td[2]/input[3]
在第二种情况下很明显
页面结构的一点变化可能会破坏我的测试。
但也许我错过了什么?也许如果文档结构发生变化,我应该知道这一点,我的一些测试应该会失败?
你怎么看?你会推荐什么样的最佳实践?
答案 0 :(得分:4)
如果元素具有脚本/ css使用的id,我们在测试中使用该ID。否则,我们会主动检测HTML以进行测试。我的意思是我们可以添加一个id 仅用于测试以避免任何歧义。我们通常给它一个前缀来表示这一点,即。 ID = “ftGoogleButton”。这样,只使用HTML的人才会理解与元素相关的自动化测试。这个约定是实用的,因为它们通常只在css / js中查找对给定id的引用。
答案 1 :(得分:3)
我会这样做,选择第一个配方而不是第二个配方......对于大多数测试。
您希望测试能够在相关的更改中突破这些测试所涵盖的功能,并且您希望相同的测试忽略应用程序的大多数其他更改
因此,如果您检查搜索“foo”应该返回的文档数量超过零,那么这与页面结构无关,应该忽略这些更改。
但是,在为确保搜索表单配备了提交按钮而编写的测试中,您希望在用于从表单导航到按钮的XPath中体现这些假设。
答案 2 :(得分:2)
正如krosenvold所说,让开发人员对html name
和/或id
属性进行标准化并使用这些属性是最好的策略之一。
我的论文Test Automation as a Development Requirement讨论了这个主题以及开发人员可以做的其他事情,以使应用程序更加自动化。
您还应确保将所有对象标识属性存储在一个中央存储库中,以便进行任何后续维护。大多数商业工具都内置了此功能,但使用开源工具可能需要使用自己的机制。