什么是Page Object模式
Page Object 见名知意,就是页面对象,并将页面元素定位方法和元素操作进行分离。在实际自动化测试实战过程中,我们一般对脚本的实现分为三层:
(1)对象层: 用于存放页面元素定位和控件操作
(2)逻辑层: 则是一些封装好的功能用例模块
(3)业务层: 则是我们真正的测试用例的操作部分
PageObject 的优点
- 减少代码冗余
- 业务和实现分离
- 降低代码维护成本
PageObject 的六大原则
-
The public methods represent the services that the page offers/公共方法表示页面提供的服务
-
Try not to expose the internals of the page/尽量不要暴露页面的内部
-
Generally don’t make assertions/Page设计中不要出现断言,应该写在测试用例类中
-
Methods return other PageObjects/方法返回其他PageObject
-
Need not represent an entire page/不需要表示整个页面
-
Different results for the same action are modeled as different methods/相同操作的不同结果被建模为不同的方法
示例(登录百度一下)
一、构建PO模型
项目的整个PO结构如下
二、基础层
首先是base目录下的basepage.py
这里作为基类,封装定位、点击、输入等基本操作以及可以增加异常时截图的方法
三、对象层、逻辑层
page目录下的login_page.py
封装这个页面基本所有可能的操作,注意方法的最后最好可以返回接下来要跳转的页面对象(如登录后就会跳转到首页)
page_element目录下是单独为每个页面的元素做维护而建立的模块文件
还有common目录下
constant.py
内定义一下常量,logger.py
为日志打印
testcase目录
编写真正的测试用例,可以再次进行断言、添加测试报告等。
四、运行结果
DevTools listening on ws://127.0.0.1:50996/devtools/browser/8d43e43e-ca09-4513-b9bd-0517cf980a0e
INFO 2023-03-01 10:32:23,623 [test_login.py_16] ------用例前置工作:打开浏览器------
INFO 2023-03-01 10:32:25,086 [basepage.py_36] 查找百度首页-登录按钮 - 元素('id', 's-top-loginbtn')成功!
INFO 2023-03-01 10:32:25,123 [basepage.py_44] 点击:百度首页-登录按钮 - 元素('id', 's-top-loginbtn')成功
INFO 2023-03-01 10:32:28,032 [basepage.py_36] 查找输入登录账号 - 元素('id', 'TANGRAM__PSP_11__userName')成功!
INFO 2023-03-01 10:32:28,129 [basepage.py_54] 输入:在输入登录账号 - 元素('id', 'TANGRAM__PSP_11__userName')输入文本值(xxx)成功
INFO 2023-03-01 10:32:28,157 [basepage.py_36] 查找输入登录密码 - 元素('id', 'TANGRAM__PSP_11__password')成功!
INFO 2023-03-01 10:32:28,282 [basepage.py_54] 输入:在输入登录密码 - 元素('id', 'TANGRAM__PSP_11__password')输入文本值(xxx)成功
INFO 2023-03-01 10:32:28,332 [basepage.py_36] 查找点击登录按钮 - 元素('id', 'TANGRAM__PSP_11__submit')成功!
INFO 2023-03-01 10:32:28,603 [basepage.py_44] 点击:点击登录按钮 - 元素('id', 'TANGRAM__PSP_11__submit')成功
ERROR 2023-03-01 10:32:48,863 [basepage.py_66] 查找登录成功与否 - 元素('class name', 'user-name')失败!
DevTools listening on ws://127.0.0.1:51175/devtools/browser/213f651a-8cb3-4d27-9f03-db5466c6614e
INFO 2023-03-01 10:32:54,779 [test_login.py_16] ------用例前置工作:打开浏览器------
INFO 2023-03-01 10:32:56,132 [basepage.py_36] 查找百度首页-登录按钮 - 元素('id', 's-top-loginbtn')成功!
INFO 2023-03-01 10:32:56,172 [basepage.py_44] 点击:百度首页-登录按钮 - 元素('id', 's-top-loginbtn')成功
INFO 2023-03-01 10:32:58,292 [basepage.py_36] 查找输入登录账号 - 元素('id', 'TANGRAM__PSP_11__userName')成功!
INFO 2023-03-01 10:32:58,374 [basepage.py_54] 输入:在输入登录账号 - 元素('id', 'TANGRAM__PSP_11__userName')输入文本值(xxx)成功
INFO 2023-03-01 10:32:58,406 [basepage.py_36] 查找输入登录密码 - 元素('id', 'TANGRAM__PSP_11__password')成功!
INFO 2023-03-01 10:32:58,512 [basepage.py_54] 输入:在输入登录密码 - 元素('id', 'TANGRAM__PSP_11__password')输入文本值(xxx)成功
INFO 2023-03-01 10:32:58,539 [basepage.py_36] 查找点击登录按钮 - 元素('id', 'TANGRAM__PSP_11__submit')成功!
INFO 2023-03-01 10:32:58,600 [basepage.py_44] 点击:点击登录按钮 - 元素('id', 'TANGRAM__PSP_11__submit')成功
INFO 2023-03-01 10:33:09,474 [basepage.py_36] 查找登录成功与否 - 元素('class name', 'user-name')成功!
INFO 2023-03-01 10:33:09,523 [basepage.py_68] 查找登录成功与否 - 元素('class name', 'user-name')成功!
INFO 2023-03-01 10:33:09,524 [test_login.py_24] ------用例后置工作:关闭浏览器------
F
----------------------------------------------------------------------
Ran 2 tests in 50.878s
FAILED (failures=1)
以上就是Web端Selenium基于OPM模型自动化测试框架的大体模式,实际上还有很多可以优化的地方,比如增加测试报告、测试结果自动发送邮件、实现CI/CD等。或许后续有时间可以继续做补充优化分享给大家。
以上就是本期文章的所有内容,感谢观看,如果对您有帮助请点赞关注+收藏,一键三连,多谢支持!