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的Tornado框架对子域名和泛域名的支持
May 02 Python
编写Python脚本抓取网络小说来制作自己的阅读器
Aug 20 Python
玩转python爬虫之正则表达式
Feb 17 Python
Python实现计算两个时间之间相差天数的方法
May 10 Python
python实现稀疏矩阵示例代码
Jun 09 Python
python 用下标截取字符串的实例
Dec 25 Python
详解Python的三种可变参数
May 08 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
Nov 19 Python
python DataFrame转dict字典过程详解
Dec 26 Python
Django查询优化及ajax编码格式原理解析
Mar 25 Python
python 在threading中如何处理主进程和子线程的关系
Apr 25 Python
Python多线程threading创建及使用方法解析
Jun 17 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 文件缓存的性能测试
2010/04/25 PHP
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
2014/04/24 PHP
Yii2框架BootStrap样式的深入理解
2016/11/07 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
jQuery 跨域访问问题解决方法
2009/12/02 Javascript
jquery之empty()与remove()区别说明
2010/09/10 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
了不起的node.js读书笔记之node.js中的特性
2014/12/22 Javascript
jQuery实现简洁的导航菜单效果
2015/11/23 Javascript
JavaScript中将数组进行合并的基本方法讲解
2016/03/07 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
2017/10/21 Javascript
手把手教你写一个微信小程序(推荐)
2018/10/17 Javascript
vue多次循环操作示例
2019/02/08 Javascript
简单了解vue中的v-if和v-show的区别
2019/10/08 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
Python 自动补全(vim)
2014/11/30 Python
Python中的Classes和Metaclasses详解
2015/04/02 Python
举例讲解Python中字典的合并值相加与异或对比
2016/06/04 Python
Python中使用haystack实现django全文检索搜索引擎功能
2017/08/26 Python
初探TensorFLow从文件读取图片的四种方式
2018/02/06 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
2018/03/20 Python
Python编程flask使用页面模版的方法
2018/12/28 Python
mac使用python识别图形验证码功能
2020/01/10 Python
Python修改列表值问题解决方案
2020/03/06 Python
Python安装Bs4的多种方法
2020/11/28 Python
用纯css3和html制作泡沫对话框实现代码
2013/03/21 HTML / CSS
HTML5中的Scoped属性使用实例
2014/04/23 HTML / CSS
教学个人的自我评价分享
2014/02/16 职场文书
租房合同协议书
2014/04/09 职场文书
运动会稿件100字
2014/09/24 职场文书
信息技术研修心得体会
2016/01/08 职场文书
幼儿园师德师风心得体会
2016/01/12 职场文书
《七律·长征》教学反思
2016/02/16 职场文书
如何通过cmd 连接阿里云服务器
2022/04/18 Servers