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 strip()函数 介绍
May 24 Python
Python Requests 基础入门
Apr 07 Python
Python中datetime模块参考手册
Jan 13 Python
Python实现注册、登录小程序功能
Sep 21 Python
python字符串和常用数据结构知识总结
May 21 Python
记录Python脚本的运行日志的方法
Jun 05 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
Jun 20 Python
python中对数据进行各种排序的方法
Jul 02 Python
python flask几分钟实现web服务的例子
Jul 26 Python
wxPython电子表格功能wx.grid实例教程
Nov 19 Python
关于ResNeXt网络的pytorch实现
Jan 14 Python
Python3操作MongoDB增册改查等方法详解
Feb 10 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
GD输出汉字的函数的分析
2006/10/09 PHP
php实现的返回数据格式化类实例
2014/09/22 PHP
Twig模板引擎用法入门教程
2016/01/20 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
php 截取中英文混合字符串的方法
2018/05/31 PHP
javascript操作select元素实例分析
2015/03/27 Javascript
javascript实现跨域的方法汇总
2015/06/25 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
简单谈谈Javascript中类型的判断
2015/10/19 Javascript
JavaScript实现多种排序算法
2016/02/24 Javascript
vue开发心得和技巧分享
2016/10/27 Javascript
jQuery实用密码强度检测
2017/03/02 Javascript
js从输入框读取内容,比较两个数字的大小方法
2017/03/13 Javascript
jquery点赞功能实现代码 点个赞吧!
2020/05/29 jQuery
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
jquery实现侧边栏左右伸缩效果的示例
2017/12/19 jQuery
详解Vue基于 Nuxt.js 实现服务端渲染(SSR)
2018/04/05 Javascript
vue实现抽屉弹窗效果
2020/11/15 Javascript
[03:18]DOTA2放量测试专访820:希望玩家加入国服大家庭
2013/08/25 DOTA
[03:39]2015国际邀请赛主赛事首日精彩回顾
2015/08/05 DOTA
Python 基础教程之包和类的用法
2017/02/23 Python
Python引用类型和值类型的区别与使用解析
2017/10/17 Python
Python学习笔记之列表推导式实例分析
2019/08/13 Python
python序列化与数据持久化实例详解
2019/12/20 Python
浅谈tensorflow中张量的提取值和赋值
2020/01/19 Python
什么是python的函数体
2020/06/19 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
会计专业毕业生推荐信
2013/11/05 职场文书
平面设计岗位职责
2013/12/14 职场文书
机关搬迁方案
2014/05/18 职场文书
2014年办公室文员工作总结
2014/11/12 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
辅导员学期工作总结
2015/08/14 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书