PO模式详解

PO模式详解po 模式详解

PO模式
  • PO模式是page object的缩写,是一种设计模式
  • 被测页面作为页面对象1,其中包含元素定位和元素操作的方法,将页面对象和真实网站页面进行一一对应
  • 举个栗子来讲:用户注册使用PO模式后,操作步骤如下:
    1. 创建class,该类就是登录页面对象类
    2. 类的属性:用户注册框、密码框和注册按钮的element
    3. 类的方法:各种元素的操作方法
      1. 方法中对selenium进行二次封装2
      2. 用例层直接调用其中方法即可,不需要关注其他
    4. 测试层从页面操作层调用其中方法,实现用例和元素方法的分离
  • PO模式分层机制3
    • 对象库层:二次封装selenium的方法
    • 页面操作层:封装页面元素对象和元素操作方法
    • 业务层:多个页面操作完成一个业务测试,一般结合单元测试框架(pytest、unittest)来进行测试
    • 如下图:

在这里插入图片描述

PO模式的优点

说到PO模式的有点必须要说到非PO模式进行对比可能会更加明显

在这里插入图片描述

非PO模式 PO模式
面向过程的线性脚本4 页面元素和业务操作分离,实现了松耦合5
复用性差 UI元素改变后不需大规模修改只需要修改页面操作层即可
维护性差 PO的可读性比较高6
用例实现

Exp:用户注册为例进行编写

实现BasePage类:

#BasePage.py  from selenium import webdriver class BasePage(object): #初始化driver def __init__(self, driver): self.driver = driver # 访问页面 def visit(self,url): self.driver.get(url) # 元素定位 def locator(self, locator): return self.driver.find_element(*locator) # 关闭浏览器 def quit_driver(self): self.driver.quit() 

实现注册类:

  1. 继承Base类
  2. 将页面元素标识在属性中(页面元素,url等)
  3. 添加操作行为(文本输入)
  4. 添加被测函数
#Register.py from basepage.base_page import BasePage from selenium import webdriver from selenium.webdriver.common.by import By from time import sleep class Register(BasePage): # 页面元素发生变化时,维护好当前元素路径即可 input_username = (By.ID, 'kw') input_pwd = (By.ID, 'passwd') click_id = (By.ID, 'su') # 输入元素 def input_text(self, input_text): self.locator(self.input_id).send_keys(input_text) # 点击注册按钮 def click_element(self): self.locator(self.click_id).click() # 测试 def check(self, url, input_text): self.visit(url) self.input_text(input_text) self.click_element() if __name__ == '__main__': url = 'https://www.baidu.com' driver = webdriver.Chrome() sp = SearchPage(driver) sp.check(url, '软件测试') sp.quit_driver() 

测试用例实现:

#test_register.py from basepage.base_page import BasePage from selenium import webdriver from selenium.webdriver.common.by import By from time import sleep class RegisPage(BasePage): url = 'https://www.test.com' link_id = (By.LINK_TEXT,'注册') # 用户名 username = (By.ID,'pwd') # 密码 pwd = (By.ID,'pwd') # 注册按钮 btn = (By.XPATH,'//*[@id="TANGRAM__PSP_11__submit"]') # 弹出登录框 def click_link(self): self.locator(self.link_id).click() # 点击用户名密码注册 def click_user(self): self.locator(self.uname_pwd).click() # 输入用户名 def input_username(self,input_username): self.locator(self.username).send_keys(input_username) # 输入密码 def input_pwd(self,input_pwd): self.locator(self.pwd).send_keys(input_pwd) # 点击注册 def click_register(self): self.locator(self.btn).click() if __name__ == '__main__': driver = webdriver.Chrome() sp = LoginPage(driver) sleep(3) sp.check('username','pwd') sleep(8) sp.quit_driver() 

  1. 讲被测页面进行抽象,使用面向对象的思想进行看待 ↩︎
  2. 不止对于selenium会进行基础方法的封装对于接口自动化中的requests也会进行二次封装 ↩︎
  3. 这里的分层机制主要对上述步骤中的类创建方法使用PO模式进行说明 ↩︎
  4. 线性脚本是所有复杂脚本编写的基础,也就是每个实现过程都进行编写但是相互独立 ↩︎
  5. 耦合就是用例之间没有运行过程中的关联关系,松耦合就是用例之间没有关联关系,没有先后关系 ↩︎
  6. 可读性指的是框架结构明显方便执行者的阅读和执行 ↩︎
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233472.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • idea 添加Tomcat_懂车帝怎么添加

    idea 添加Tomcat_懂车帝怎么添加使用IDEA编辑器开发项目十分便捷,这里介绍使用IDEA编辑器添加Tomcat1、新建web工程这里有一个已经创建好的web项目2、配置tomcat配置tomcat前,先确保本地已经下载并安装完成了tomcat如果不清楚如何安装tomcat,请参考:安装tomcat点击Run,EditConfigurations…点击+号,添加服务配置找到TomcatServer,选择Local自定义Name,这里是T…

    2022年10月17日
    3
  • GATK流程_diskeeper怎么用

    GATK流程_diskeeper怎么用一、使用GATK前须知事项:(1)对GATK的测试主要使用的是人类全基因组和外显子组的测序数据,而且全部是基于illumina数据格式,目前还没有提供其他格式文件(如IonTorrent)或者实验设计(RNA-Seq)的分析方法。(2)GATK是一个应用于前沿科学研究的软件,不断在更新和修正,因此,在使用GATK进行变异检测时,最好是下载最新的版本,目前的版本是2.8.1(2014-02

    2025年8月25日
    3
  • 计算机网络ip地址划分方法,ip地址怎么划分 ip地址划分方法【图文】

    计算机网络ip地址划分方法,ip地址怎么划分 ip地址划分方法【图文】IP地址指的是互联网的协议地址,它的全称为IPAddress,IP地址是IP协议当中的一种地址格式,互联网上的任意一个网络以及它们的主机使用的逻辑地址都是由IP地址分配的,那么你知道IP地址是怎样进行划分的吗?下面我们就一起来看看IP地址的划分以及IP地址的查询方法吧。一、IP地址的划分:IP地址一个包括五大类,分别是A类IP地址、B类IP地址、C类IP地址、D类IP地址和E类IP地址。其中A类…

    2022年6月9日
    33
  • Android动态改变布局

    Android动态改变布局

    2021年9月4日
    51
  • 简单的激光干涉测距仪原理——为什么只能测量相对距离「建议收藏」

    简单的激光干涉测距仪原理——为什么只能测量相对距离「建议收藏」为什么要用激光来测量距离呢?这一切都是因为激光的波长很短,同频率的光波叠加会在波长级的尺度上产生周期性的变化,因此用激光测量距离时,精度是波长级别的,这也是为什么通常选用波长较短的激光进行测距。将同一光束分成两束,其中一束状态不变,另一束经物体反射后与第一束合并,以光电探测器进行探测。物体每移动半个波长,探测器探测到的信号就会出现一个极值,通过数极值的数量就可以知道物体移动了多少。…

    2022年5月22日
    57
  • 全局钩子注入

    全局钩子注入全局钩子介绍hook,指利用api来提前拦截并处理windows消息的一种技术。如键盘钩子,许多木马都有这东西,监视你的键盘操作。全局钩子是系统钩子的一种,当指定的一些消息被系统中任

    2021年12月13日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号