Python自动化测试PO模型封装过程详解


Posted in Python onJune 22, 2021

在自动化中, Selenium 自动化测试中有一个名字经常被提及 PageObject( 思想与面向对象的特征相 同 ) ,通常 PO 模型可以大大提高测试用例的维护效率  

优点:可重用,业务和对象分离,代码结构清晰,方便代码维护  

Python自动化测试PO模型封装过程详解 

核心要素

1. 在 PO 模式中抽离封装集成一个BasePage 类,该基类应该拥有一个只实现 webdriver 实例的属性

2. 每一个 page 都继承 BasePage ,通过 driver 来管理本 page 中元素,将 page 中的操作封装成一个个方法

3.TestCase 继承 unittest.Testcase 类,并依赖 page 类,从而实现相应的测试步骤  

PO 实现进入百度页面输入数据后进入下一个页面  

组织代码

Python自动化测试PO模型封装过程详解 

  1 :实现 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 = driver
        self.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])

2 :实现 SearchPage

from selenium.webdriver.common.by import By
from base.base_page import BasePage
class SearchOne(BasePage):
    def __init__(self,driver,url):
        BasePage.__init__(self,driver,url)
    #进入百度
    def open_baidu(self):
        self.get()
    #输入数据
    def input_search_content(self,text):
        self.send_text(text,By.ID,"kw")
    # 点击按钮
    def click_baidu_search(self):
        self.left_click(By.ID, "su")
    def click_open_hao(self):
        self.left_click(By.XPATH,".//*[@id='1']/h3/a[1]")

3 :实现 TestCase

import unittest
from selenium import webdriver
from page.page_one import SearchOne
from page.page_two import SearchTwo
class BaiBu(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.driver = webdriver.Firefox()
        cls.driver.implicitly_wait(10)
    def test001(self):
        url="http://www.baidu.com"
        s = SearchOne(self.driver,url)
        s.open_baidu()
        s.input_search_content("123")
        s.click_baidu_search()
        s.click_open_hao()
        self.driver.switch_to.window(self.driver.window_handles[1])
    def test002(self):
        s=SearchTwo(self.driver,"")
        s.open_baidu_map()
    def tearDown(self) -> None:
    #      self.driver.quit()
        pass
if __name__ == '__main__':
    unittest.main()

PO 模式的优点  

1:PO 提供了一种业务流程与页面元素操作分离的模式,这使得测试代码变得更加清晰

2 :页面对象与用例分离,使得我们更好的复用对象

3 :可复用的页面方法代码会变得更加优化

4 :更加有效的命令方式使得我们更加清晰的知道方法所操作的 UI 元素

以上就是Python自动化测试PO模型封装的详细内容,更多关于Python自动化测试PO模型的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python 变量类型及命名规则介绍
Jun 08 Python
python中使用smtplib和email模块发送邮件实例
Apr 22 Python
python中的装饰器详解
Apr 13 Python
Python数组定义方法
Apr 13 Python
用sqlalchemy构建Django连接池的实例
Aug 29 Python
wxpython多线程防假死与线程间传递消息实例详解
Dec 13 Python
python几种常用功能实现代码实例
Dec 25 Python
python 爬取疫情数据的源码
Feb 09 Python
如何更换python默认编辑器的背景色
Aug 10 Python
Python制作一个仿QQ办公版的图形登录界面
Sep 22 Python
python爬虫中的url下载器用法详解
Nov 30 Python
OpenCV图像变换之傅里叶变换的一些应用
Jul 26 Python
python中的class_static的@classmethod的巧妙用法
Jun 22 #Python
Python答题卡识别并给出分数的实现代码
Python 中的单分派泛函数你真的了解吗
Jun 22 #Python
Python实现DBSCAN聚类算法并样例测试
python中sqllite插入numpy数组到数据库的实现方法
Jun 21 #Python
利用Python第三方库实现预测NBA比赛结果
Django实现drf搜索过滤和排序过滤
You might like
php实现上传图片保存到数据库的方法
2015/02/11 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
jquery跨域请求示例分享(jquery发送ajax请求)
2014/03/25 Javascript
jQuery实现列表自动滚动循环滚动展示新闻
2014/08/22 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
2016/04/04 Javascript
搞定immutable.js详细说明
2016/05/02 Javascript
JavaScript解八皇后问题的方法总结
2016/06/12 Javascript
Bootstrap简单表单显示学习笔记
2016/11/15 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
js表单序列化判断空值的实例
2017/09/22 Javascript
实例分析JS与Node.js中的事件循环
2017/12/12 Javascript
Electron实现应用打包、自动升级过程解析
2020/07/07 Javascript
JavaScript实现无限轮播效果
2020/11/19 Javascript
vue使用echarts图表自适应的几种解决方案
2020/12/04 Vue.js
python实现封装得到virustotal扫描结果
2014/10/05 Python
python使用pil生成图片验证码的方法
2015/05/08 Python
Python机器学习之决策树算法实例详解
2017/12/06 Python
Python获取指定字符前面的所有字符方法
2018/05/02 Python
关于Python中的向量相加和numpy中的向量相加效率对比
2019/08/26 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
python音频处理的示例详解
2020/12/23 Python
Python字符串的15个基本操作(小结)
2021/02/03 Python
用CSS禁用输入法(CSS3 UI规范)实例解析
2012/12/04 HTML / CSS
HTML5播放实现rtmp流直播
2020/06/16 HTML / CSS
奇怪的鱼:Weird Fish
2018/03/18 全球购物
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
希腊品牌鞋类销售网站:epapoutsia.gr
2020/03/18 全球购物
zooplus德国:便宜地订购动物用品、动物饲料、动物食品
2020/05/06 全球购物
必须要使用游标的SQL语句有那些
2012/05/07 面试题
单位成立周年感言
2014/01/26 职场文书
工伤事故证明
2014/10/20 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
优秀党支部申报材料
2014/12/24 职场文书
中国合伙人观后感
2015/06/02 职场文书
最美乡村教师观后感
2015/06/11 职场文书