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和GO语言实现的消息摘要算法示例
Mar 10 Python
Python中SOAP项目的介绍及其在web开发中的应用
Apr 14 Python
python保存字符串到文件的方法
Jul 01 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
Jun 27 Python
修改python plot折线图的坐标轴刻度方法
Dec 13 Python
PyQt5 QTableView设置某一列不可编辑的方法
Jun 25 Python
在python中计算ssim的方法(与Matlab结果一致)
Dec 19 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
Mar 23 Python
Django --Xadmin 判断登录者身份实例
Jul 03 Python
python 实现"神经衰弱"翻牌游戏
Nov 09 Python
Django celery异步任务实现代码示例
Nov 26 Python
Python TypeError: ‘float‘ object is not subscriptable错误解决
Dec 24 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正则表达式替换站点关键字链接后空白的解决方法
2014/09/16 PHP
php数字运算验证码的实现代码
2015/07/30 PHP
分享五个PHP7性能优化提升技巧
2015/12/07 PHP
ie 处理 gif动画 的onload 事件的一个 bug
2007/04/12 Javascript
TBCompressor js代码压缩
2011/01/05 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
JS动态调用方法名示例介绍
2013/12/18 Javascript
Jquery getJSON方法详细分析
2013/12/26 Javascript
JavaScript将一个数组插入到另一个数组的方法
2015/03/19 Javascript
angularjs 表单密码验证自定义指令实现代码
2016/10/27 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
Vue 仿百度搜索功能实现代码
2017/02/16 Javascript
微信小程序 功能函数小结(手机号验证*、密码验证*、获取验证码*)
2017/12/08 Javascript
Vue解决echart在element的tab切换时显示不正确问题
2020/08/03 Javascript
Vue全局使用less样式,组件使用全局样式文件中定义的变量操作
2020/10/21 Javascript
Python编程入门之Hello World的三种实现方式
2015/11/13 Python
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
2018/04/26 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
python logging添加filter教程
2019/12/24 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
亚洲航空公司官方网站:AirAsia
2019/11/25 全球购物
银行实习鉴定
2013/12/13 职场文书
幼儿园亲子活动方案
2014/01/29 职场文书
医院总经理岗位职责
2014/02/04 职场文书
课堂教学改革实施方案
2014/03/17 职场文书
社区交通安全实施方案
2014/03/22 职场文书
2014法制宣传日活动总结
2014/07/09 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书
毕业生学校组织意见
2015/06/04 职场文书
恋恋笔记本观后感
2015/06/16 职场文书
《家世》读后感:看家训的力量
2019/12/30 职场文书
python如何正确使用yield
2021/05/21 Python
python 进阶学习之python装饰器小结
2021/09/04 Python
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技