软件测试 | 什么是 PageObject 设计模式
测试人员为 UI 页面写测试用例时(如 Web 页面和移动端页面),测试用例中会存在大量元素和操作细节。当 UI 页面的功能发生变化时,测试用例也要跟着变化,我们用 PagaObject 可以很好地解决这个问题。
使用 UI 自动化测试工具时(包括 Selenium、Appium 等),如果无统一模式对测试用例进行规范,随着测试用例的增多会变得难以维护,通过使用 PageObject 可以让自动化测试脚本变得井然有序,将页面单独维护并封装其内容的细节。同时可以使用 testcase 更稳健,不需要太多改动。
使用 PageObject
具体用法: 把要测试的元素信息和操作细节封装到 Page 类中,测试用例中调用 Page 对象(PageObject),例如,测试用例中存在一个“选择相册标题”的操作,这时在测试用例中需要为之建立函数 selectAblumWithTitle(),函数内部实现的细节为 findElements WithClass('album')等,如图 3-24 所示。
测试用例中实现“选取相册标题” 操办的伪代码如下。
PageObject 的主要原理是,提供一个简单接口(或者函数,如上述的 selectAblumWithTitle),此函数可让调用者在 Web 页面上做任何操作,例如,点击页面元素、在输入框内输入内容等。因此,如果要访问 Web 页面中一个文本字段,测试用例可以用 PageObject 获取和返回字符串的方法,PageObject 封装了对数据的操作细节,如查找元素和点击元素等。当 Web 页面元素改动时,测试人员只改变测试用例中 page 类中的内容,不需要改变调用它的测试用例的其他地方。
不要为每个 UI 页面都创建一个 page 类,应该只为页面中重要的元素创建 page 类。例如,一个页面显示多个相册,应该创建一个相册列表 PageObject。如果某些复杂 UI 的层次结构只是用来组织 UI,那么这些层次结构就不应该出现在 PageObject 中。使用 PageObject 的目的是通过给页面建模,使测试用例的执行步骤变得更加清晰,如图 3-25 所示。
通过 Web 页面时往往需要从一个页面跳转到另一个页面,页面跳转的实现需要测试用例初始化 page 对象,并返回另一个 page 对象,这样的效果就如点击 “注册” 按钮后,进入注册页面。测试用例中使用的代码中用的是 return Register()方法。
建议不要在 PageObject 中放断言。PageObject 用于提供页面的状态信息及页面方法,而不是用来验证某个页面功能的。
搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核
评论