基于Python Selenium Unittest PO设计模式详解
本文章会讲述以下几个内容:
1、什么是PO设计模式(Page Object Model)
2、为什么要使用PO设计模式
3、使用PO设计模式要点
4、PO设计模式实例
1、什么是PO设计模式 (Page Object Model)
一种在测试自动化中变得流行的设计模式,使得自动化测试脚本的减少代码重复、更易读、减少维护成本。
一般PO设计模式有三层
第一层:
- 对Selenium 进行二次封装,定义一个所有页面都继承的 BasePage ,
- 封装 Selenium 基本方法 例如:元素定位,元素等待,导航页面 ,
- 不需要全部封装,用到多少方法就封装多少方法。
第二层:
- 页面元素进行分离,每个元素只定位一次,隔离定位,如果页面改变,只需要改变相应的元素定位;
- 业务逻辑分离 或 操作元素动作分离
第三层:
- 使用单元测试框架对业务逻辑进行测试
2、为什么要使用PO设计模式
- 页面频繁变化,(页面html结构等变化)导致页面UI元素频繁变动,元素定位改变
- 传统线性自动化(面向过程开发),用例中需要反复的定位同一个元素
- 每当页面发生变化的时候,需要在用例中寻找变动的部分,工作量大,容易产生遗漏,不容易维护
3、使用PO设计模式要点
- 不要在page页面对象外做元素定位
- 不在page页面对象里面写断言,除非是页面是否成功加载断言
- 需要多少个元素就定位多少个,不需要对整个页面的元素进行定位
- 当你的用例设计页面跳转时,例如登陆操作,登陆完成后跳转首页,当页面发生“跳转”
,封装的业务逻辑需要返回(return)对应的页面对象的实例 - BasePage封装Selenium 基础方法,不需要全部封装,用到多少方法就封装多少方法
4、 PO设计模式实例
以TAPD作为项目例子,用PO设计模式实现登陆:
Github地址:https://github.com/SEtester/easy_POM
用例:
标题:登陆成功
前置条件:打开TAPD登录页 https://www.tapd.cn/cloud_logins/login
操作步骤:
1. 输入用户名(手机或邮箱):XXXXXX
2. 输入密码:XXXXXX
3. 点击登陆按钮
预期结果:
3. 页面跳转至“工作台-我的待办”
项目目录:

base_page.py

login_page.py


worktable_to_do_page.py

test_login.py

Page object model 官方文档
Github 官方文档地址 : https://github.com/SeleniumHQ/selenium/wiki/PageObjects
文末,感谢乙醇老师指导
基于Python Selenium Unittest PO设计模式详解的更多相关文章
- 一次完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试
Web登录测试是很常见的测试!手动测试大家再熟悉不过了,那如何进行自动化登录测试呢!本文作者就用python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动 ...
- Javascript设计模式详解
Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...
- iOS中MVC等设计模式详解
iOS中MVC等设计模式详解 在iOS编程,利用设计模式可以大大提高你的开发效率,虽然在编写代码之初你需要花费较大时间把各种业务逻辑封装起来.(事实证明这是值得的!) 模型-视图-控制器(MVC)设计 ...
- Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)
Jenkins简介 Jenkins是Java编写的非常流行的持续集成(CI)服务,起源于Hudson项目.所以Jenkins和Hudson功能相似. Jenkins支持各种版本的控制工具,如CVS.S ...
- web自动化 基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架
基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架 by:授客 QQ:1033553122 博客:http://blog.sina.com.cn/ishou ...
- [转]使用python来操作redis用法详解
转自:使用python来操作redis用法详解 class CommRedisBase(): def __init__(self): REDIS_CONF = {} connection_pool = ...
- 一次简单完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试
Web登录测试是很常见的测试,手动测试大家再熟悉不过了,那如何进行自动化登录测试呢!本文就基于python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动化 ...
- Python调用windows下DLL详解
Python调用windows下DLL详解 - ctypes库的使用 2014年09月05日 16:05:44 阅读数:6942 在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分 ...
- Javascript常用的设计模式详解
Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...
随机推荐
- Marionettejs
Marionette是牵线木偶的意思,这个库是对Backbone的一次更高层次封装.这样的封装有两个目标: 减少重复的工作,提高使用Backbonejs时的生产效率给复杂应用页面提供更多的结构,以支撑 ...
- 开源Log框架和平台介绍
共有162款 日志工具(Logging)开源软件 http://www.oschina.net/project/tag/144/logging
- Python:urllib模块的urlretrieve方法
转于:https://blog.csdn.net/fengzhizi76506/article/details/59229846 博主:fengzhizi76506 1)功能: urllib模块提供的 ...
- linux日常管理-防火墙netfilter工具-iptables-3
可以指定chain链的总开关 把链的关掉,针对端口开放,更加安全,但是不建议这么做 实例:filter表INPUT链.INPUT策略改成DROP. 把192.168.0.0/24网段开通22端口.对所 ...
- springmvc chrome jsonviewer 一起请求 重复提提交 controller重复执行 2次执行
情况一: springmvc chrome jsonviewer 一起请求 重复提提交 controller重复执行 2次执行 Chrome浏览器地址栏访问接口url,重复请求问题解决 不论刷新还 ...
- hive查询ncdc天气数据
使用hive查询ncdc天气数据 在hive中将ncdc天气数据导入,然后执行查询shell,可以让hive自动生成mapredjob,快速去的想要的数据结果. 1. 在hive中创建ncdc表,这个 ...
- C#调用ODBC连接SQL Server数据库的存储过程
OdbcConnection con = new OdbcConnection("Driver={SQL Server};server=PC-200201070359;uid=sa;pwd= ...
- 将gridview 的数据导出EXCEL
gridview数据 单击“导出EXCEL”按钮后 1.在上面的代码中,先将gridview绑定到指定的数据源中,然后在button按钮(用来做导出到EXCEL的)的事件中,写入相关的代 ...
- 使用showConfirmDialog显示确认框
------------------siwuxie095 工程名:TestJOptionPane 包名:com.siwuxie095.s ...
- Ubuntu 安装Logstash
Logstash 包是从同一存储库中可用,如 Elasticsearch,和我们已经安装了该公钥,因此,让我们共创 Logstash 源列表︰ echo 'deb http://packages.el ...