PO模型(设计模式)
文章目录
- 什么是PO模型
- PO优点:
- PO的核心
- 实例
什么是PO模型
PO模型全称:Page Object(思想与面向对象的特征相同),也叫PO设计模式。他的出现主要是为了解决自动化测试中代码量增加而难以维护。
PO的优点:代码复用,可读性强,可维护性强
个人理解:就是将重复的代码封装,复用。还有就是,如果应用后期修改UI界面学要重新定位元素,会非常的方便
(例:那web端自动化selenium来说,重复性操作有,八大定位元素,点击,获取新的句柄,多表单等,可以将这些webdriver的操作封装到一个类中,需要时调用
另外,就是手机APP需要用风度多彩的UI界面来吸引用户眼球,频繁的更新界面UI,能有效地帮助我们对于这些修改做出相应的改变)
PO优点:
1:PO提供了一种业务流程与页面元素操作分离的模式,这使得测试代码变得更加清晰
2:页面对象与用例分离,使得我们更好的复用对象
3:可复用的页面方法代码会变得更加优化
4:更加有效的命令方式使得我们更加清晰的知道方法所操作的UI元素
PO的核心
1.在PO模式中抽离封装集成一个BasePage类,将webdriver的所有操作全都封装到该类中
2.每一个page都继承BasePage,通过driver来管理本page中元素,将page中的操作封装成一个个方法
3.TestCase继承unittest.Testcase类,并依赖page类,从而实现相应的测试步骤
实例
(命名可能不规范)
点击百度–>搜索hao123–>点击搜索列表hao123–>点击地图
BasePage类:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains #鼠标操作
class BasePage():'''BasePage封装所有界面都公用的方法。例如driver,find_element等''''''实例化BasePage类时,事先执行的__init__方法,该方法需要传递参数'''def __init__(self,driver,url):self.driver = driverself.base_url = url# 进入网址def get(self):self.driver.get(self.base_url)#元素定位,替代八大定位def get_element(self,*locator):return self.driver.find_element(*locator)#点击def left_click(self,*locator):ActionChains(self.driver).click(self.get_element(*locator)).perform()#输入def send_text(self,text,*locator):self.driver.find_element(*locator).send_keys(text)#清除def clear_text(self,*locator):self.driver.find_element(*locator).clear()#表单切换def switch_iframe(self,*locator):self.driver.switch_to.frame(self.driver.find_element(*locator))#窗口切换def switch_window(self,n):self.driver.switch_to.window(self.driver.window_handles[n])
Page页1:
from po.basePage.BaseDemo import BasePage
from selenium.webdriver.common.by import By
class PageOne(BasePage):def __init__(self,dirver,url):BasePage.__init__(self,dirver,url)#访问网站def get_openbaidu(self):self.get()#获取文本框中内容def input_text(self,text):self.send_text(text,By.ID,"kw")#百度一下def click_baidu_search(self):self.left_click(By.ID,"su")#获取hao123点击def click_hao123(self):self.left_click(By.XPATH,"//*[@id='1']/h3/a[1]")
Page页2:
from po.basePage.BaseDemo import BasePage
from selenium.webdriver.common.by import By
class PageTwo(BasePage):def __init__(self,driver,url):BasePage.__init__(self,driver,url)#获取百度地图元素,点击def bddt(self):self.left_click(By.CSS_SELECTOR,"#userCommonSites > ul > li:nth-child(6) > div > a")
TestClass(测试用例)
import unittest
from selenium import webdriver
from po.page.page import PageOne
from po.page.pageTwo import PageTwo
class TestClass(unittest.TestCase):@classmethoddef setUpClass(cls):cls.driver = webdriver.Chrome()#创建webdriver + 谷歌浏览器对象cls.driver.maximize_window()#铺满全屏cls.driver.implicitly_wait(10)# 饮食等待10秒def test001(self):url = "http://www.baidu.com"po = PageOne(self.driver,url)po.get_openbaidu()po.input_text("123")#输入123po.click_baidu_search()#点击百度一下po.click_hao123()#点击搜索列表中的好123self.driver.switch_to.window(self.driver.window_handles[1])#获取句柄def test002(self):url = ""pw = PageTwo(self.driver, url)pw.bddt()@classmethoddef tearDownClass(cls):# cls.driver.quit()passif __name__ == "main":unittest.main()
PO模型(设计模式)相关推荐
- Python+Selenium+PO模型实现自动化测试
一. PO模型介绍 在自动化中,Selenium自动化测试中有一个名字经常被提及PageObject(思想与面向对象的特征相 同),通常PO模型可以大大提高测试用例的维护效率 PO模型又叫PO设计模式 ...
- po模型+unittest测试
po模型 一.PO模型介绍 二.PO的核心 三.非op模型实现 四.op模型实现 1.包含内容 2.代码实现(多页面) 一.PO模型介绍 在自动化中,Selenium自动化测试中有一个名字经常被提及P ...
- selenium自动化之PO模型
目录 一.selenium: 1.定位: 2.加载url 3.输入 4.点击 5.清除 6.获取文本内容 7.获取属性 8.切换/窗口切换 8.1Frame切换 8.2窗口切换: 9.等待 二.log ...
- 自动化测试之PO模型
一. PO模型介绍 在自动化中,Selenium自动化测试中有一个名字经常被提及PageObject(思想与面向对象的特征相 同),通常PO模型可以大大提高测试用例的维护效率 二.PO的核心要素 1. ...
- Day33 PO模型
系列文章目录 Day01 软件测试基础总结 Day02 测试用例知识点总结(上) Day03 测试用例知识点总结(下) Day04 禅道-从安装到卸载 Day05 MySql的基础使用 Day06 M ...
- Selenium+Python ---- 免登录、等待、unittest单元测试框架、PO模型
1.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...
- Appium+Python之PO模型(Page object Model)
思考:我们进行自动化测试时,如果把代码都写在一个脚本中,代码的可读性会变差,且后期代码维护也麻烦,最好的想法就是测试对象和测试用例可以分离,可以很快定位问题,代码可读性高,也比较容易理解.这里推荐大家 ...
- Selenium基于Python web自动化测试框架 —— PO模型
目录 1.前言: 2.PO模型的概念和理解: 3.PO模型的目录结构: 4.PO代码示例: 5.总结 6.重点:配套学习资料和视频教学 1.前言: 关于selenium测试框架首先想到的就是PO模型, ...
- 使用po模型进行自动化测试
编写公用的父类方法 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionC ...
最新文章
- 编程之美:无差错二分查找
- Java学习笔记26
- ASA IPSEC ×××配置
- numpy更改形状、类型
- 1.6.2 多表插入
- 【Java】矩阵乘法的朴素算法
- RPC入门总结(一)RPC定义和原理
- android 导航抽屉_Android导航抽屉示例教程
- 拓端tecdat|R语言风险价值:ARIMA,GARCH模型,Delta-normal法滚动估计,预测VaR(Value at Risk)和回测分析花旗公司股票时间序列数据
- layui jquery innerHTML 无效
- Thinkphp聊天室H5实时聊天室群聊聊天室自动分配账户完群组私聊禁言等功能全开源运营版本
- C# - Poker Sort
- bccomp php扩展,PHP 中文工具包 ChineseUtil v2.0 发布,引入 FFI 提升性能节省内存
- android 播放器 samba,超强本地播放器一款支持samba、FTP/Windows共享服务-简单不折腾...
- python 哈希_python实现哈希集合
- 【操作系统】30天自制操作系统--(1)虚拟机加载最小操作系统
- 构建共线矩阵的两种惊艳操作
- sw制作arduino模型
- Msc.Marc的python开发#2
- 开源许可违反:案例说明(Apache License 2.0)
热门文章
- 在access中一列称为_在数据表中,每一行称为一条____,每一列称为一个____。
- 【JS数据结构与算法】双向链表(DoublylinkedList)封装及其方法
- word批注怎么删除计算机名字,Word批注怎样删掉用户名
- 三大集合:List、Map、Set
- bootstrap简单的页面布局
- 美国音乐学院计算机音乐专业排名2015年,2019USNEWS美国音乐专业排名前100!
- 凯文·凯利:个人数据才是大未来
- 【机器学习】(十七)非负矩阵分解NMF:人脸图像特征提取、用特征排序;还原混合信号
- 时间复杂度的三种常见表示符号
- 图像处理笔记二(阙值、霍夫变换、重映射)