本文章会讲述以下几个内容:

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设计模式详解的更多相关文章

  1. 一次完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试

    Web登录测试是很常见的测试!手动测试大家再熟悉不过了,那如何进行自动化登录测试呢!本文作者就用python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动 ...

  2. Javascript设计模式详解

    Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...

  3. iOS中MVC等设计模式详解

    iOS中MVC等设计模式详解 在iOS编程,利用设计模式可以大大提高你的开发效率,虽然在编写代码之初你需要花费较大时间把各种业务逻辑封装起来.(事实证明这是值得的!) 模型-视图-控制器(MVC)设计 ...

  4. Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)

    Jenkins简介 Jenkins是Java编写的非常流行的持续集成(CI)服务,起源于Hudson项目.所以Jenkins和Hudson功能相似. Jenkins支持各种版本的控制工具,如CVS.S ...

  5. web自动化 基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架

    基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架   by:授客 QQ:1033553122     博客:http://blog.sina.com.cn/ishou ...

  6. [转]使用python来操作redis用法详解

    转自:使用python来操作redis用法详解 class CommRedisBase(): def __init__(self): REDIS_CONF = {} connection_pool = ...

  7. 一次简单完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试

    Web登录测试是很常见的测试,手动测试大家再熟悉不过了,那如何进行自动化登录测试呢!本文就基于python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动化 ...

  8. Python调用windows下DLL详解

    Python调用windows下DLL详解 - ctypes库的使用 2014年09月05日 16:05:44 阅读数:6942 在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分 ...

  9. Javascript常用的设计模式详解

    Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...

随机推荐

  1. oracle数据库规划建议

    之前负责的项目有用到oracle的,oracle dba给过一些建议,自己整理了一下,写再这里做个备忘 数据库需求分析: 1. 创建的数据库名称为maildb,并且字符集为UTF8. 2. 提供可连接 ...

  2. 【Google】循环字符串里面的独立子串

    转载自九章算法(地址) 题目: 假设s是一个无限循环的字符串”abcdefghijklmnopqrstuvwxyz”,s就是一个”...zabcdefghijklmnopqrstuvwxyza...” ...

  3. 移动端H5 button 默认事件

    button 在移动端下会有自带的默认事件,如果不处理的话,点击按钮的时候会有自动刷新页面的效果,原因就是button的默认事件没有阻止. 所以在点击事件里面要加上 e.preventDefault( ...

  4. DC/DC尖峰脉冲吸收电路

    在DC/DC转换器中,脉冲问题直接影响到产品的EMI和电源噪声,需要在某些时候加尖峰脉冲吸收电路. 从上图可以看到,尖峰脉冲吸收电路就是一个RC吸收电路.至于在DC/DC哪里加RC吸收电路,这里有一个 ...

  5. iPhone X机型适配

    1.启动页 启动App,发现App只能居中显示,不能上下充满. 问题产生的原因是:iPhone X是5.8英寸,比5.5英寸的屏幕还要大,没有合适的启动页可以加载,所以只能使用以前5.5英寸的启动页, ...

  6. 【转】Pro Android学习笔记(十三):用户界面和控制(1):UI开发

    目录(?)[-] UI开发 方式一通过XML文件 方式二通过代码 方式三XML代码 UI开发 先理清一些UI概念: view.widget.control:这三个名词其实没有什么区别,都是一个UI元素 ...

  7. 对象流demo1----

    对象流demo1: package com.etc.test; import java.io.BufferedInputStream; import java.io.BufferedOutputStr ...

  8. Java探索之旅(3)——选择与循环

    1.选择结构与输出 ❶Switch语句: Switch表达式必须算出 char,byte,short,int类型数值之一,总是括号括住:Value1----ValueN,对应有相同数据类型且为常量或者 ...

  9. Dialog 自定义使用2(进度条)

    1:  自定义的Dialog 代码: public class IphoneProgersssDialog extends Dialog { private Context context; priv ...

  10. [51nod1270] 数组的最大代价(简单dp)

    解题关键:先由贪心的思想得出任何一个位置只能取1或者a[i],然后dp即可. #include<bits/stdc++.h> using namespace std; typedef lo ...