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之入门(三)序列
May 25 Python
Python中用max()方法求最大值的介绍
May 15 Python
Python的Twisted框架上手前所必须了解的异步编程思想
May 25 Python
Python模块WSGI使用详解
Feb 02 Python
Pipenv一键搭建python虚拟环境的方法
May 22 Python
python实现自主查询实时天气
Jun 22 Python
详解python中sort排序使用
Mar 23 Python
在自动化中用python实现键盘操作的方法详解
Jul 19 Python
python无序链表删除重复项的方法
Jan 17 Python
Python flask框架实现查询数据库并显示数据
Jun 04 Python
Python如何定义有默认参数的函数
Aug 10 Python
Pycharm 如何一键加引号的方法步骤
Feb 05 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程序
2006/10/09 PHP
PHP 金额数字转换成英文
2010/05/06 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
2014/06/13 PHP
总结一些js自定义的函数
2006/08/05 Javascript
javascript new fun的执行过程
2010/08/05 Javascript
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
Raphael一个用于在网页中绘制矢量图形的Javascript库
2013/01/08 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
2013/08/18 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
浅谈String.valueOf()方法的使用
2016/06/06 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
2017/05/17 Javascript
微信小程序中进行地图导航功能的实现方法
2018/06/29 Javascript
使用elementUI实现将图片上传到本地的示例
2018/09/04 Javascript
jQuery实现B2B网站后台管理系统侧导航
2020/07/08 jQuery
[06:16]第十四期-国士无双绝地翻盘之撼地神牛
2014/06/24 DOTA
用Python编写一个国际象棋AI程序
2014/11/28 Python
python获取图片颜色信息的方法
2015/03/18 Python
浅谈终端直接执行py文件,不需要python命令
2017/01/23 Python
Python多重继承的方法解析执行顺序实例分析
2018/05/26 Python
解决Python pandas df 写入excel 出现的问题
2018/07/04 Python
python实现诗歌游戏(类继承)
2019/02/26 Python
python实现的分析并统计nginx日志数据功能示例
2019/12/21 Python
python 读取yaml文件的两种方法(在unittest中使用)
2020/12/01 Python
利用CSS3实现毛玻璃效果示例源码
2016/09/25 HTML / CSS
利用纯CSS3实现tab选项卡切换示例代码
2016/09/21 HTML / CSS
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
金牌葡萄酒俱乐部:Gold Medal Wine Club
2017/11/02 全球购物
HR喜欢的自荐信格式
2013/10/08 职场文书
《槐乡五月》教学反思
2014/04/25 职场文书
积极向上的团队口号
2014/06/06 职场文书
本科毕业生应聘自荐信范文
2014/06/26 职场文书
教育实习指导教师评语
2014/12/31 职场文书
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL
Java使用httpRequest+Jsoup爬取红蓝球号码
2021/07/02 Java/Android