第一次海报。我从事 UI 自动化工作多年,但最近才被介绍/指导使用页面对象模型。其中大部分是常识,包括我已经使用过的技术,但有一个特别好的点我无法在自己的脑海中证明,尽管广泛搜索了一个合理的解释。我希望这里有人可以启发我,因为当我尝试将 POM 与我自己的最佳实践集成时,这个问题引起了一些恐慌。
来自http://code.google.com/p/selenium/wiki/PageObjects:
上面给出的代码显示了一个重要的点:测试,而不是 PageObjects,应该负责做出关于页面状态的断言......当然,与每条指南一样,也有例外......
来自http://seleniumhq.org/docs/06_test_design_considerations.html#chapter06-reference:
页面对象的设计方式有很大的灵活性,但是有一些基本规则可以让您的测试代码获得所需的可维护性。页面对象本身不应该进行验证或断言。这是测试的一部分,应该始终在测试代码中,而不是在页面对象中。页面对象将包含页面的表示,以及页面通过方法提供的服务,但与正在测试的内容相关的代码不应包含在页面对象中。
有一个单一的验证可以而且应该在页面对象内,即验证页面以及页面上可能的关键元素是否正确加载。此验证应在实例化页面对象时完成。
这两个“指导方针”都允许潜在的例外情况,但我完全不同意基本前提。我习惯于在“页面方法”中进行大量验证,并且我认为验证的存在是一种在各种上下文中查找问题的强大技术(即,每次调用方法时都会进行验证)而不是而不仅仅是在特定测试的有限环境中发生。
例如,假设当您登录到 AUT 时,会出现一些文本,上面写着“以用户身份登录”。有一个单独的测试来专门验证它是合适的,但你为什么不想每次都验证它登录叫什么?这个工件与页面是否“加载正确”没有直接关系,一般来说也与“正在测试什么”没有关系,所以根据上面的POM指南,它显然不应该在页面方法中。 .. 但在我看来,它显然应该存在,通过尽可能多地验证重要工件,尽可能少地预先考虑,从而最大限度地发挥自动化的力量。将验证码放入页面方法中,通过允许您“免费”获得大量验证,而无需在测试中担心它,从而增加了自动化的力量,并且在不同的上下文中进行如此频繁的验证通常会发现您找不到的问题如果验证仅限于,例如,对该工件的单一测试。
换句话说,我倾向于区分特定于测试的验证和“一般”验证,并且我认为将后者广泛包含在页面方法中是完全合适/理想的。这促进了更精简的测试和更厚的页面对象,这通常通过重用更多代码来提高测试的可维护性——尽管这些指南中存在相反的争论。我错过了重点吗?不想在页面方法中进行验证的真正理由是什么?我描述的情况实际上是这些指南中描述的“例外”之一,因此实际上与 POM 不一致吗?提前感谢您的想法。-jn-