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自动连接ssh的方法
Mar 07 Python
简单理解Python中的装饰器
Jul 31 Python
Python 实现数据库更新脚本的生成方法
Jul 09 Python
python学习必备知识汇总
Sep 08 Python
python正则实现计算器功能
Dec 14 Python
python字符串string的内置方法实例详解
May 14 Python
Python 日期区间处理 (本周本月上周上月...)
Aug 08 Python
python对象转字典的两种实现方式示例
Nov 07 Python
浅谈在JupyterNotebook下导入自己的模块的问题
Apr 16 Python
python异常处理之try finally不报错的原因
May 18 Python
python实现调用摄像头并拍照发邮箱
Apr 27 Python
Python Matplotlib绘制条形图的全过程
Oct 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
Zend Studio 无法启动的问题解决方法
2008/12/04 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
2014/06/30 PHP
php实现session自定义会话处理器的方法
2015/01/27 PHP
php+Mysqli利用事务处理转账问题实例
2015/02/11 PHP
php中遍历二维数组并以表格的形式输出的方法
2017/01/03 PHP
Laravel 批量更新多条数据的示例
2017/11/27 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
2009/07/06 Javascript
基于jquery的一个拖拽到指定区域内的效果
2011/09/21 Javascript
使用js在页面中绘制表格核心代码
2013/09/16 Javascript
用javascript删除当前行,添加行(示例代码)
2013/11/25 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
2015/02/11 Javascript
JS组件Bootstrap Select2使用方法解析
2016/05/30 Javascript
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
vue.js 实现输入框动态添加功能
2018/06/25 Javascript
vue项目中使用Svg的方法
2018/10/24 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
JavaScript中构造函数与原型链之间的关系详解
2019/02/25 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
2020/04/30 Javascript
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
[03:04]2018年国际邀请赛典藏宝瓶&莱恩声望物品展示 片尾有彩蛋
2018/06/04 DOTA
在Python中使用正则表达式的方法
2015/08/13 Python
Python实现的txt文件去重功能示例
2018/07/07 Python
Python UnboundLocalError和NameError错误根源案例解析
2018/10/31 Python
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
Python 异常处理Ⅳ过程图解
2019/10/18 Python
Pythonic版二分查找实现过程原理解析
2020/08/11 Python
无刑事犯罪记录证明
2014/09/18 职场文书
党的群众路线教育实践活动个人整改措施
2014/10/27 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python
python中的mysql数据库LIKE操作符详解
2021/07/01 MySQL
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2021/08/30 Java/Android
Python+DeOldify实现老照片上色功能
2022/06/21 Python