本文节选自霍格沃兹测试学院内部教材
PageObject 的核心思想是六大原则,掌握六大原则才可以进行 PageObject 实战演练,这是 PageObject 的精髓所在。
Selenium 官方凝聚出六大原则,后面的 PageObject 使用都将围绕六大原则开展:
- 公共方法代表页面提供的服务
- 不要暴露页面细节
- 不要把断言和操作细节混用
- 方法可以 return 到新打开的页面
- 不要把整页内容都放到 PO 中
- 相同的行为会产生不同的结果,可以封装不同结果
下面,对上述六大原则进行解释:
- 原则一:要封装页面中的功能(或者服务),比如点击页面中的元素,进入到新的页面,就可以为这个服务封装方法“进入新页面”。
- 原则二:封装细节,对外只提供方法名(或者接口)。
- 原则三:封装的操作细节中不要使用断言,把断言放到单独的模块中,比如 testcase。
- 原则四:点击一个按钮会开启新的页面,可以用 return 方法表示跳转,比如
return MainPage()
表示跳转到新的 PO:即 MainPage。 - 原则五:只为页面中重要的元素进行 PO 设计,舍弃不重要的内容。
- 原则六:一个动作可能产生不同结果,比如点击按钮后,可能点击成功,也可能点击失败,为两种结果封装两个方法,
click_success
和click_error
。
案例
以企业微信首页为例,企业微信首页有二个主要功能:立即注册和企业登录。
企业微信网址:https://work.weixin.qq.com/
Index 页面
点击企业登录可以进入登录页面,在页面可以扫码登录和企业注册。
Login 页面
点击企业注册可以进入注册页面,在页面可以输入相关信息进行注册。
Register 页面
用 PageObject 原则为页面建模,这里涉及三个页面:首页,登录,注册。在代码中创建对应的三个类 Index、Login、Register:
- 登陆页⾯提供 l