高质量PageObject的6条规则

页面对象模式是全面的用户界面(UI)测试自动化的最重要方面之一。 但以我的经验来看,每10名测试自动化工程师中就有8名忽略了它-即使它已经存在了15年以上。 鉴于页面对象模式的有用性和有效性,忽略它们应该添加到您不想做的测试自动化错误列表中。

通过在自动功能测试和目标web页面之间创建一个抽象层,页面对象模式减少了重复的来源。换句话说,您为一个web页面创建一个类,然后在您的自动化功能测试中使用这个类,以与您手动操作相同的方式与web页面交互。

这是一种行之有效的经过试验和测试的模式——但只有在正确遵循时才有效。与我共事的解决方案架构师一直在使用页面对象模式,很容易看出原因:这是一个产生结果的直接、有效的系统。

您很容易误以为所有好的解决方案都必须是复杂的,但对于页面对象模式和测试自动化来说,情况并非如此。最直接的解决方案通常是最好的,所以将其添加到您的测试自动化资源列表中。

要在自动化工作中很好地使用页面对象模式,您需要了解以下内容。

为页面对象类创建一个好名字

确保您选择的名称100%清楚地显示了页面对象中的内容。如果您不能这样做,那么您的页面对象可能做得太多了。

看一下下面的SauceDemoLoginPage,它是一个app的登录页面。读过类名之后,你会猜里面有哪些方法和属性?

您不太可能对SauceDemoLoginPage类中的内容感到惊讶。另一方面,想象一下,如果具有相同代码的类被称为SaucePageObject()。在阅读本文时,您可能不知道这个类实际上表示什么,您可能会对其中的内容感到惊讶。

page类应该只包含与HTML页面或组件交互的方法

应用程序的最终用户没有ConnectToSQL()、OpenExcel()或ReadPDF()。因此,这些方法在您的自动化UI测试中没有位置。通过扩展,这意味着它们不能在页面对象中公开访问。

假设有50个测试调用OpenExcel()。当您越来越高级并意识到Excel可能不是存放测试数据的最佳位置时,您可能会开始使用来自API、JSON或CSV的数据。

此时,您需要更新这50个测试来使用新方法,但这并不是因为应用程序的需求发生了变化。相反,您需要更新它们,因为您在测试中公开了与软件功能没有任何关系的方法。

page类应该包含属性和方法,或者由公开访问的对象组成

通过使用页面对象,您可以通过一个接口与应用程序交互:页面对象。如果希望与登录页面交互,可以通过SauceDemoLoginPage类进行。

例如,您可能希望通过使用登录到SauceDemoLoginPage

登录(“用户名”,“密码”);

在这种情况下,您需要避免将定位器放在单独的类中,因为它们不是必需的,而且只会使代码过于复杂。

您会读到很多文章,这些文章都说,通过将方法与页面对象的属性分离,您将维护单一责任原则(single responsibility principle, SRP)。但这是不对的。在SRP中,责任来自于参与者,其需求的变化将迫使您更新页面对象。如果有多个这样的参与者,那么模块或页面对象就有多个职责。

严格地说,开发人员是唯一能够迫使您在类中进行更改的参与者。没有人需要在不修改HTML方法的情况下修改HTML元素。

最后,避免将定位器与页面对象的方法分离是至关重要的。这是不必要的;over-optimization。也就是说,一个页面可以由多个与该页面对象相关的组件组成。

页面对象不必是整个HTML页面,可以是一个小组件

这就是程序员所说的“组合”。其目的是将页面推向复合,而不是必须使用继承。下面,你将看到如何使用合成创建更清晰、更紧凑的页面对象。 无论是传统测试模型还是连续交付模型,我们通常定义以下三种类型的测试:

在本例中,汽车由引擎和车轮组成,Engine是一个保存汽车引擎的操作和属性的类。

以类似的方式,您可以将大型页面对象分解为多个组件。在下面的ProductsPage示例中,注意它是如何由一个CartComponent和一个FooterComponent组成的。CartComponent执行与购物车相关的操作,而FooterComponent是应用程序的页脚。

注意这个ProductsPage还遵循了其他三个原则。类内部的内容或公开公开的方法并不奇怪。

充分利用页面对象

简单页面对象是一种被低估的技术。它们非常有效,易于使用,并为您提供易于阅读和维护的代码。页面对象模式是经过验证的,它们工作得很好。你只需要知道如何使用它们来获得结果。

author

石头 磊哥 seven 随便叫

company

thoughtworks

大家好,本人不才,目前依旧混迹于thoughtworks,做着一名看起来像全栈的QA,兴趣爱好前端,目前是thoughtworks 西安QA社区的leader,如果有兴趣分享话题,或者想加入tw,可以找我

roles

QA(营生) dev(front-end dev 兴趣爱好)

联系方式

如果想转载或者高薪挖我 请直接联系我 哈哈

wechat:

qileiwangnan

email:

qileilove@gmail.com