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基础教程之序列详解
Aug 29 Python
Python表示矩阵的方法分析
May 26 Python
解决Python print 输出文本显示 gbk 编码错误问题
Jul 13 Python
python 读取摄像头数据并保存的实例
Aug 03 Python
详解Python给照片换底色(蓝底换红底)
Mar 22 Python
django使用haystack调用Elasticsearch实现索引搜索
Jul 24 Python
python如何从文件读取数据及解析
Sep 19 Python
Python基于pygame实现单机版五子棋对战
Dec 26 Python
Python qrcode 生成一个二维码的实例详解
Feb 12 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
Apr 30 Python
Django --Xadmin 判断登录者身份实例
Jul 03 Python
python 多态 协议 鸭子类型详解
Nov 27 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
mysql limit查询优化分析
2008/11/12 PHP
PHP解压ZIP文件到指定文件夹的方法
2016/11/17 PHP
JavaScript关闭当前页面(窗口)不带任何提示
2014/03/26 Javascript
深入浅出理解javaScript原型链
2015/05/09 Javascript
JavaScript识别网页关键字并进行描红的方法
2015/11/09 Javascript
Bootstrap每天必学之级联下拉菜单
2016/03/27 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
浅析JS中常用类型转换及运算符表达式
2017/07/23 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
nodejs项目windows下开机自启动的方法
2017/11/22 NodeJs
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
Vue项目中使用better-scroll实现菜单映射功能方法
2019/09/11 Javascript
使用Python的判断语句模拟三目运算
2015/04/24 Python
Python中编写ORM框架的入门指引
2015/04/29 Python
Python的Django框架中从url中捕捉文本的方法
2015/07/20 Python
Python的装饰器用法学习笔记
2016/06/24 Python
python3利用Dlib19.7实现人脸68个特征点标定
2018/02/26 Python
对python3新增的byte类型详解
2018/12/04 Python
Python爬虫文件下载图文教程
2018/12/23 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
python实现三壶谜题的示例详解
2020/11/02 Python
意大利奢侈品网站:Italist
2016/08/23 全球购物
Zavvi西班牙:电子游戏、极客服装、Blu-ray、Funko Pop等
2019/05/03 全球购物
市场总经理岗位职责
2014/04/11 职场文书
《赠汪伦》教学反思
2014/04/12 职场文书
食品安全承诺书
2014/05/22 职场文书
党员教师群众路线思想汇报范文
2014/10/28 职场文书
教师党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
网聊搭讪开场白
2015/05/28 职场文书
交流会主持词
2015/07/02 职场文书
篮球赛新闻稿
2015/07/17 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
Python Django搭建文件下载服务器的实现
2021/05/10 Python
阿里云服务器部署mongodb的详细过程
2021/09/04 MongoDB