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为iOS10生成图标和截屏
Sep 24 Python
Python生成随机数组的方法小结
Apr 15 Python
python数字图像处理之高级形态学处理
Apr 27 Python
Python实现迭代时使用索引的方法示例
Jun 05 Python
Matplotlib scatter绘制散点图的方法实现
Jan 02 Python
Python列表list操作相关知识小结
Jan 29 Python
用Python做一个久坐提醒小助手的示例代码
Feb 10 Python
解决使用python print打印函数返回值多一个None的问题
Apr 09 Python
python多进程使用函数封装实例
May 02 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
May 22 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
Mar 03 Python
如何在Python中创建二叉树
Mar 30 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内置的Math函数效率测试
2014/12/01 PHP
PHP实现路由映射到指定控制器
2016/08/13 PHP
Yii2框架制作RESTful风格的API快速入门教程
2016/11/08 PHP
详解Yii2.0 rules验证规则集合
2017/03/21 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
dojo学习第一天 Tab选项卡 实现
2011/08/28 Javascript
jQuery+ajax实现鼠标单击修改内容的方法
2014/06/27 Javascript
Javascript基础教程之for循环
2015/01/18 Javascript
JavaScript使用slice函数获取数组部分元素的方法
2015/04/06 Javascript
js实现类似MSN提示的页面效果代码分享
2015/08/24 Javascript
Vue组件之自定义事件的功能图解
2018/02/01 Javascript
小程序实现展开/收起的效果示例
2018/09/22 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
jquery实现动态创建form并提交的方法示例
2019/05/27 jQuery
微信小程序保持session会话的方法
2020/03/20 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
2020/04/30 Javascript
微信小程序点击生成朋友圈分享图(遇到的坑)
2020/06/17 Javascript
python利用elaphe制作二维条形码实现代码
2012/05/25 Python
Python中实现两个字典(dict)合并的方法
2014/09/23 Python
Python简单爬虫导出CSV文件的实例讲解
2018/07/06 Python
详解Python with/as使用说明
2018/12/13 Python
python matplotlib库绘制散点图例题解析
2019/08/10 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
使用npy转image图像并保存的实例
2020/07/01 Python
Dower & Hall官网:英国小众轻奢珠宝品牌
2019/01/31 全球购物
免税水晶:Duty Free Crystal
2019/05/13 全球购物
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
实现向右循环移位
2014/07/31 面试题
大学生见习期满自我鉴定
2014/09/13 职场文书
2014院党委领导班子及其成员群众路线对照检查材料思想汇报
2014/10/04 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
2016小学优秀教师先进事迹材料
2016/02/26 职场文书
CentOS安装Nginx并部署vue
2022/04/12 Servers