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 搭建Web站点之Web服务器与Web框架
Nov 06 Python
flask中主动抛出异常及统一异常处理代码示例
Jan 18 Python
Zookeeper接口kazoo实例解析
Jan 22 Python
python2.x实现人民币转大写人民币
Jun 20 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
Jul 25 Python
python实现括号匹配的思路详解
Aug 23 Python
Django框架的中的setting.py文件说明详解
Oct 15 Python
python 自动批量打开网页的示例
Feb 21 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
Jun 21 Python
Python如何把不同类型数据的json序列化
Apr 30 Python
Django开发RESTful API实现增删改查(入门级)
May 10 Python
OpenCV-Python实现人脸磨皮算法
Jun 07 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表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
2011/08/22 PHP
遭遇php的in_array低性能问题
2013/09/17 PHP
php针对cookie操作的队列操作类实例
2014/12/10 PHP
使用正则去除php代码中的注释方法
2016/11/03 PHP
php 静态属性和静态方法区别详解
2017/04/09 PHP
Open and Print a Word Document
2007/06/15 Javascript
js判断为空Null与字符串为空简写方法
2014/02/24 Javascript
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
jQuery中insertBefore()方法用法实例
2015/01/08 Javascript
express文件上传中间件Multer详解
2016/10/24 Javascript
JavaScript中在光标处插入添加文本标签节点的详细方法
2017/03/22 Javascript
Javascript实现找不同色块的游戏
2017/07/17 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
vue2.0中set添加属性后视图不能更新的解决办法
2019/02/22 Javascript
vue设置一开始进入的页面教程
2019/10/28 Javascript
JavaScript监听触摸事件代码实例
2019/12/30 Javascript
python二分法实现实例
2013/11/21 Python
深入学习python的yield和generator
2016/03/10 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
python实现泊松图像融合
2018/07/26 Python
python利用跳板机ssh远程连接redis的方法
2019/02/19 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
Python socket模块ftp传输文件过程解析
2019/11/05 Python
Python多进程编程常用方法解析
2020/03/26 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
Python 发送邮件方法总结
2020/08/10 Python
寻找完美的房车租赁:RVShare
2019/02/23 全球购物
小学体育教学反思
2014/01/31 职场文书
《放飞蜻蜓》教学反思
2014/04/27 职场文书
汉语言文学毕业求职信
2014/07/17 职场文书
学习教师法的心得体会
2014/09/03 职场文书
个人批评与自我批评发言稿
2014/09/28 职场文书
房屋登记授权委托书范本
2014/10/09 职场文书
家长给老师的感谢信
2015/01/20 职场文书
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis