Selenium系列(二十) - PageObject模式的详细介绍
如果你还想从头学起Selenium,可以看看这个系列的文章哦!
https://www.cnblogs.com/poloyy/category/1680176.html
其次,如果你不懂前端基础知识,需要自己去补充哦,博主暂时没有总结(虽然我也会,所以我学selenium就不用复习前端了哈哈哈...)
前言
- 在UI自动化测试中,PO是目前最为主流,也是公认最佳的设计模式
- UI自动化测试最初是通过关键字驱动+数据驱动的形式来实现,然后升级到PO模式
什么是关键字驱动
- 简单而言,就是将Selenium常用功能进行二次封装
- 譬如:把查找元素、点击、输入等原生方法进行封装
- 而最大的问题点在于:不管封装之后的关键字方法是否用得上,都会将Selenium的原生方法封装,但业务测试中是永远用不上的
关键字驱动 vs RF
- 可以把关键字驱动对比用RF(Robot Framework)做的自动化测试,在RF GUI界面调用关键字,并传入参数即可完成一系列的元素操作;
- 而我们在Pycharm上完成关键字驱动也是相同道理,封装好Selenium常用方法,然后去调用关键字,不同页面传入不同的参数即可完成一系列的元素操作
什么是数据驱动
将代码和数据进行分离,单纯由数据组成文件,再由文件来驱动关键字,最终实现整个自动化的流程
什么是关键字驱动+数据驱动
- 读取数据,将固定格式的数据进行拼接【读取数据】
- 拼接后的内容作为关键字所需要的参数,进行传入【传入数据】
- 调用关键字,将执行结果和预期结果进行对比,从而获取单条测试用例执行是否通过的结果【执行关键字,断言结果】
关键字驱动+数据驱动是一种设计模式哦!
什么是PO模式
- PO模式是page object model的缩写,是一种设计模式
- 把待测页面当成一个页面对象,一般包含了元素对象的定位和元素操作方法,将页面对象和真实的网站页面一 一映射起来
- 比如一个登录页面,使用PO模式后,操作的步骤如下:
- 会先创建一个class,该class就是登录页面对象类
- 类的属性:用户名输入框,密码输入框,登录按钮的webElenent
- 类的方法:各种元素操作的方法
- 方法里面会调用对象库层的二次封装Selenium的方法
- 测试层从页面操作层调用操作方法,写成测试用例,这种模式可以做到定位元素与测试用例分离
- 所以这样的设计理念就是PO模式
PO模式的分层
PO模式可以把一个页面一般分为三层
对象库层:二次封装Selenium的方法
页面操作层(也称:逻辑层):封装页面的元素对象和元素操作
测试层(也称:业务层):多个页面操作完成一个业务测试,一般结合单元测试框架(unittest、pytest)来测试
当然也有分四层的
对象库层:二次封装Selenium的方法
页面层:封装页面的元素对象
操作层:封装页面的元素操作
测试层:多个页面操作完成一个业务测试
PO模式和关键字驱动+数据驱动有什么区别?(PO模式的原理)
- 升级到PO模式之后,首先将Selenium常用的功能,结合实际业务需要进行二次封装;封装的内容是完全贴合实际业务来实现的【封装Selenium】
- 将元素对象和元素操作进行整合【元素对象整合】
- 将对象库和测试代码分离,实现数据与代码分离【数据与代码分离】
PO模式给代码带来的优势
- 代码冗余明显降低:二次封装Selenium方法和提取公共方法,提高代码复用性
- 代码的阅读性明显提升:因为三层分级,将不同内容进行不同的封装,整体代码阅读性提升
- 代码维护性明显提升:UI测试中,页面若经常变动,代码的维护量随之增多;因为三层分级,我们只需要修改页面对象的代码,如元素对象或者操作对象的方法,不用修改测试用例的代码,也不影响测试用例的正常执行
- 降低代码耦合性
Selenium系列(二十) - PageObject模式的详细介绍的更多相关文章
- C#设计模式之二十策略模式(Stragety Pattern)【行为型】
一.引言 今天我们开始讲"行为型"设计模式的第七个模式,该模式是[策略模式],英文名称是:Stragety Pattern.在现实生活中,策略模式的例子也非常常见,例如,在一个 ...
- Web 前端开发人员和设计师必读文章推荐【系列二十八】
<Web 前端开发精华文章推荐>2014年第7期(总第28期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列二十】
<Web 前端开发精华文章推荐>2013年第八期(总第二十期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...
- Web 开发人员和设计师必读文章推荐【系列二十九】
<Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web 前端开发人员和设计师必读精华文章【系列二十六】
<Web 前端开发精华文章推荐>2014年第5期(总第26期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十二】
<Web 前端开发精华文章推荐>2014年第一期(总第二十二期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML ...
- 设计模式 ( 二十 ) 访问者模式Visitor(对象行为型)
设计模式 ( 二十 ) 访问者模式Visitor(对象行为型) 1.概述 在软件开发过程中,对于系统中的某些对象,它们存储在同一个集合collection中,且具有不同的类型,而且对于该集合中的对象, ...
- 【转】VMware网络连接模式—桥接、NAT以及仅主机模式的详细介绍和区别
☞ 本文主要介绍软件『VMware Workstation(虚拟机)』的相关内容:VMware网络连接模式—桥接.NAT以及仅主机模式的详细介绍和区别. 其下列版本/分支可以参考本文: 全部版本/分支 ...
- VMware网络连接模式—桥接、NAT以及仅主机模式的详细介绍和区别
在使用VMware Workstation(以下简称:VMware)创建虚拟机的过程中,配置虚拟机的网络连接是非常重要的一环,当我们为虚拟机配置网络连接时,我们可以看到如下图所示的几种网络连接模式:桥 ...
随机推荐
- ionic监听android返回键(实现“再按一次退出”功能)
在android平台上的app,在主页面时经常会遇到"再按一次退出app"的功能,避免只按一下返回键就退出app提升体验优化. 1.这个功能需要我们用到ionic提供的regist ...
- JZOJ 5235. 【NOIP2017模拟8.7A组】好的排列
5235. [NOIP2017模拟8.7A组]好的排列 (File IO): input:permutation.in output:permutation.out Time Limits: 1000 ...
- 一键制作镜像并发布到k8s
*:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...
- flask连接mysql出现ModuleNotFoundError: No module named 'MySQLdb'
只需在配置SQLALCHEMY_DATABASE_URI时,加上pymysql就可以了: app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql ...
- 关于使用layui中的tree的一个坑
最近几天,因为项目需要,所以自学了下layui,在使用之前就对其比较感兴趣,毕竟封装的东西也不错(个人见解),在接触到layui之后,现在有个需要就是将部门做成tree的样子,开始觉得不怎么难,毕竟都 ...
- Linux——如何将Red Hat Enterprise Linux 6的语言改为中文?
第一步,打开终端,输入su -,获取超级用户权限,输入密码. 第二步,输入cd /etc/sysconfig,进入设置目录. 第三步,输入vi i18n,进入到配置文件. 第四步,按 ‘i’键,进入编 ...
- shell编程中星号(asterisk "*")的坑
今天分享一个有关shell编程中由通配符引起的问题. 1. 问题代码 cat test.logs 4567890 * ##*************************************## ...
- django 验证码图片生成视图函数
def verify_code(request): import random # 定义验证码图片背景颜色 宽和高 bgcolor = (random.randrange(20,180),random ...
- 微信小程序用setData修改数组或对象中的一个属性值,超好用,最简单的实现方法,不容错过!大神们 都 在 看 的方法!!!
在page中 data: { info: [{ name: "yuki", tou: "../img/head.jpg", zGong: 130, gMoney ...
- NLP(二十六)限定领域的三元组抽取的一次尝试
本文将会介绍笔者在2019语言与智能技术竞赛的三元组抽取比赛方面的一次尝试.由于该比赛早已结束,笔者当时也没有参加这个比赛,因此没有测评成绩,我们也只能拿到训练集和验证集.但是,这并不耽误我们在这 ...