如果你还想从头学起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模式后,操作的步骤如下:
    1. 会先创建一个class,该class就是登录页面对象类
    2. 类的属性:用户名输入框,密码输入框,登录按钮的webElenent
    3. 类的方法:各种元素操作的方法
    4. 方法里面会调用对象库层的二次封装Selenium的方法
    5. 测试层从页面操作层调用操作方法,写成测试用例,这种模式可以做到定位元素与测试用例分离
  • 所以这样的设计理念就是PO模式

PO模式的分层

PO模式可以把一个页面一般分为三层

对象库层:二次封装Selenium的方法

页面操作层(也称:逻辑层):封装页面的元素对象和元素操作

测试层(也称:业务层):多个页面操作完成一个业务测试,一般结合单元测试框架(unittest、pytest)来测试

当然也有分四层的

对象库层:二次封装Selenium的方法

页面层:封装页面的元素对象

操作层:封装页面的元素操作

测试层:多个页面操作完成一个业务测试

PO模式和关键字驱动+数据驱动有什么区别?(PO模式的原理)

  • 升级到PO模式之后,首先将Selenium常用的功能,结合实际业务需要进行二次封装;封装的内容是完全贴合实际业务来实现的【封装Selenium】
  • 将元素对象和元素操作进行整合【元素对象整合】
  • 将对象库和测试代码分离,实现数据与代码分离【数据与代码分离】

PO模式给代码带来的优势

  • 代码冗余明显降低:二次封装Selenium方法和提取公共方法,提高代码复用性
  • 代码的阅读性明显提升:因为三层分级,将不同内容进行不同的封装,整体代码阅读性提升
  • 代码维护性明显提升:UI测试中,页面若经常变动,代码的维护量随之增多;因为三层分级,我们只需要修改页面对象的代码,如元素对象或者操作对象的方法,不用修改测试用例的代码,也不影响测试用例的正常执行
  • 降低代码耦合性

Selenium系列(二十) - PageObject模式的详细介绍的更多相关文章

  1. C#设计模式之二十策略模式(Stragety Pattern)【行为型】

    一.引言   今天我们开始讲"行为型"设计模式的第七个模式,该模式是[策略模式],英文名称是:Stragety Pattern.在现实生活中,策略模式的例子也非常常见,例如,在一个 ...

  2. Web 前端开发人员和设计师必读文章推荐【系列二十八】

    <Web 前端开发精华文章推荐>2014年第7期(总第28期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  3. Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列二十】

    <Web 前端开发精华文章推荐>2013年第八期(总第二十期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...

  4. Web 开发人员和设计师必读文章推荐【系列二十九】

    <Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  5. Web 前端开发人员和设计师必读精华文章【系列二十六】

    <Web 前端开发精华文章推荐>2014年第5期(总第26期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  6. Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十二】

    <Web 前端开发精华文章推荐>2014年第一期(总第二十二期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML ...

  7. 设计模式 ( 二十 ) 访问者模式Visitor(对象行为型)

    设计模式 ( 二十 ) 访问者模式Visitor(对象行为型) 1.概述 在软件开发过程中,对于系统中的某些对象,它们存储在同一个集合collection中,且具有不同的类型,而且对于该集合中的对象, ...

  8. 【转】VMware网络连接模式—桥接、NAT以及仅主机模式的详细介绍和区别

    ☞ 本文主要介绍软件『VMware Workstation(虚拟机)』的相关内容:VMware网络连接模式—桥接.NAT以及仅主机模式的详细介绍和区别. 其下列版本/分支可以参考本文: 全部版本/分支 ...

  9. VMware网络连接模式—桥接、NAT以及仅主机模式的详细介绍和区别

    在使用VMware Workstation(以下简称:VMware)创建虚拟机的过程中,配置虚拟机的网络连接是非常重要的一环,当我们为虚拟机配置网络连接时,我们可以看到如下图所示的几种网络连接模式:桥 ...

随机推荐

  1. 前端javascript知识(三)

    函数记忆,判断是不是质数. 方法一: function isPrime1(n){ if(n<=3){return true} else{ for(var i=2;i<Math.sqrt(n ...

  2. Python - loguru日志库,高效输出控制台日志和日志记录

    一.安装loguru loguru的PyPI地址为:https://pypi.org/project/loguru/ GitHub仓库地址为:https://github.com/Delgan/log ...

  3. Keras深度神经网络算法模型构建【输入层、卷积层、池化层】

    一.输入层 1.用途 构建深度神经网络输入层,确定输入数据的类型和样式. 2.应用代码 input_data = Input(name='the_input', shape=(1600, 200, 1 ...

  4. Java堆内存是线程共享的!面试官:你确定吗?

    Java作为一种面向对象的,跨平台语言,其对象.内存等一直是比较难的知识点,所以,即使是一个Java的初学者,也一定或多或少的对JVM有一些了解.可以说,关于JVM的相关知识,基本是每个Java开发者 ...

  5. 将url转化成file文件

            let img = "https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=508387608,28489740 ...

  6. C# BASS音频库 + 频谱基本用法

    效果图: 使用了 BASS.dll.  BASS.NET.dll   和  PeakMeterCtrl.dll 前面两个负责播放   最后一个负责绘制频谱,本文重点讲的是频谱部分,播放音频部分注意一点 ...

  7. js 模拟鼠标绘制方块

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. Python只有文件不存在才能写文件

    当我们在Python里面写文件时,我们常用的模式为 w模式,这种模式下,如果文件不存在,就会生成文件:如果文件已经存在,就会直接覆盖. 有时候,如果文件已经存在,直接覆盖文件可能会导致重要数据丢失.你 ...

  9. onOK Modal.warning iview 要写一个函数 套上,不然会得不到异步调用,直接弹出的时候就执行了

    export const warning = (str, callback = _ => {}, outCallback = () => {}) => { Modal.warning ...

  10. 使用C#+EmguCV处理图像入门(图像读取_显示_保存)二

    上个随笔已经介绍EmguCV的一些常用库和程序安装以及环境变量的配置,这次写的是如何使用这个类库对图像进行操作. EmguCV图像处理系统组成(个人见解): 图像的基本操作: 贴个代码: using ...