1. 认识 PageObject
1.1 PO首次提出PO的思想最早是2013年由IT大佬Martin Flower提出的:
https://martinfowler.com/bliki/PageObject.html没错,就是他
--- 没错,就是他 ---
在他的文章里有这样一张经典样图,图片中展示了测试代码中直接操作HTML元素和使用PO模式将page对象封装成一个HTML页面,通过特定方法来操作元素的对比;如下图:
1.2 PO原则解读
我们知道,PO主要就是应用在UI自动化测试上(Web端和App端均适用),因此2015年,Selenium官方给出了PO的设计原则说明:https://github.com/SeleniumHQ/selenium/wiki/PageObjects
对官方的原则进行解读,我们可以得到如下的信息:
1.2.1 方法意义
用公共方法代表UI所提供的功能
如企业微信的通讯录页面,其中有“添加成员
”、“批量导入,导出
”、“设置所在部门
”、“删除
”等功能,这些功能都可以封装成通讯录这个UI界面所提供的方法;当然,部分数据较多或者较为复杂,复用性也比较高的话,例如添加成员,也可以单独抽离出来做一个page。
方法应该返回其他的PageObject或者返回用于断言的数据
我们既然以页面为对象进行业务操作,那么一个方法结束后必然要有返回值:
要么返回一个页面
,这个页面可以是当前页(因为可能还要在这个页面进行其他操作),可以是其他页面(我们操作某个方法后很可能会跳转到另一个页面进行下一步操作);
要么返回需要断言的值
,测试用例总归有预期结果的对吧,那么最后肯定要有方法返回一个值,用来给我们做断言,来判断用例执行是否符合预期结果。
不要返回null或者写一个void没有返回值的方法
,这样的方法没有意义,既不能为下一步操作创造条件,也不能为用例的断言提供结果。
同样的行为不同的结果可以建模为不同的方法
这个就比较好理解了,拿最简答的登录场景来说:
同样的行为
&#x