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标准库与第三方库详解
Jul 22 Python
python中as用法实例分析
Apr 30 Python
Python中在for循环中嵌套使用if和else语句的技巧
Jun 20 Python
python和ruby,我选谁?
Sep 13 Python
python2.7到3.x迁移指南
Feb 01 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
Jun 27 Python
python求平均数、方差、中位数的例子
Aug 22 Python
如何基于Python + requests实现发送HTTP请求
Jan 13 Python
Python 实现日志同时输出到屏幕和文件
Feb 19 Python
Python unittest工作原理和使用过程解析
Feb 24 Python
Pytorch 使用不同版本的cuda的方法步骤
Apr 02 Python
用Python自动清理系统垃圾的实现
Jan 18 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 获取可变函数参数的函数
2009/08/26 PHP
php中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
PHP使用CURL实现多线程抓取网页
2015/04/30 PHP
PHP 7.0新增加的特性介绍
2017/06/08 PHP
php实现有序数组旋转后寻找最小值方法
2018/09/27 PHP
php集成开发环境详解
2019/09/24 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
javascript中的绑定与解绑函数应用示例
2013/06/24 Javascript
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
jQuery获取多种input值的简单实现方法
2016/06/20 Javascript
搭建Bootstrap离线文档的方法
2016/12/02 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
利用js-cookie实现前端设置缓存数据定时失效
2019/06/18 Javascript
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
JS事件循环机制event loop宏任务微任务原理解析
2020/08/04 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
微信小程序反编译的实现
2020/12/10 Javascript
python通过zlib实现压缩与解压字符串的方法
2014/11/19 Python
Python操作Sql Server 2008数据库的方法详解
2018/05/17 Python
python3爬虫获取html内容及各属性值的方法
2018/12/17 Python
Python 实现域名解析为ip的方法
2019/02/14 Python
基于Python+Appium实现京东双十一自动领金币功能
2019/10/31 Python
CSS3提交意见输入框样式代码
2014/10/30 HTML / CSS
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
企业新年寄语
2014/04/04 职场文书
学雷锋演讲稿汇总
2014/05/10 职场文书
党的群众路线教育实践活动总结报告
2014/07/03 职场文书
国际商务专业毕业生自我鉴定2014
2014/09/27 职场文书
沈阳故宫导游词
2015/01/31 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书
VUE之图片Base64编码使用ElementUI组件上传
2022/04/09 Vue.js
python如何将mat文件转为png
2022/07/15 Python