第 09 章Page Object 设计模式
Page Object 是 Selenium 自动化测试项目开发实践的最佳设计模式之一,Page Object 的主要体现于对界面交互细节的封装,这样可以使测试案例更关注与业务而非界面细节,提高测试案例的可读性。
9.1、认识 Page Object
Page Object 设计模式的优点如下:
● 减少代码的重复。
● 提高测试用例的可读性。
● 提高测试用例的可维护性,特别是针对 UI 频繁变化的项目。
当在为 Web 页面编写测试时,需要操作该 Web 页面上的元素进行操作。然而,如果在测试代码中直接操作 HTML 元素,那么你的代码是及其脆弱的,因为 UI 会经常变动。我们可以将一个 page 对象封装成一个 HTML 页面,可以通过提供的应用程序特定的 API 来操作页面元素,而不在 HTML 中四处搜寻。
page 对象的一个基本经验法则是,凡是人能做的事,page 对象通过软件客户端都能够做到。因此它也应当提供一个易于编程的接口并隐藏窗口中低层的部件。所以访问一个文本框应该通过一个访问方法(accessor method)来实现字符串的获取与返回,复选框应当使用布尔值,按钮应当被表示为行为导向的方法名。page 对象应当将在 GUI 控件上所有查询和操作数据的行为封装为方法。一个好的经验法则是,即使改变具体的控件,page 对象的接口也不应当发生变化。
尽管该术语是“页面”对象,但并不意味着需要针对每个页面建立一个这样的对象,例如页面有重要意义的元素可以独立为一个 page 对象。经验法则的目的在于通过给页面建模,从而对应用程序的使用者变得有意义。
9.2、Page Object 实例
我们先以百度搜索为例,通过 Page Object 设计模式来实现。
这里将百度页面上的搜索框和搜索按钮分别封装成 input()和 button()方法,对外提供参数。当需要进行百度搜索操作时,可以通过以下方式。
当然,这个例子中当需要操作页面上的某个元素时,只需要调用相关方法并传入相关参数即可。这样做的最主要的好处就是由元素变化引起的用例失败,只需要修改 Page 层即可,不需要到每个用例中进行修改。
当然,上面的例子还不够 Page Object,或者说在调用方法时还有些麻烦,因为每一个方法都要传一个固定的参数“driver”,因为封装到 Page 里的方法都需要拿到浏览器驱动才能进行相关操作。那么我们还可以进一步封装。