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 流程控制实例代码
Sep 25 Python
python中sleep函数用法实例分析
Apr 29 Python
安装dbus-python的简要教程
May 05 Python
python列表操作之extend和append的区别实例分析
Jul 28 Python
Python之父谈Python的未来形式
Jul 01 Python
Flask入门之上传文件到服务器的方法示例
Jul 18 Python
Django中数据库的数据关系:一对一,一对多,多对多
Oct 21 Python
python字符串替换re.sub()方法解析
Sep 18 Python
Python:slice与indices的用法
Nov 25 Python
将python依赖包打包成window下可执行文件bat方式
Dec 26 Python
浅析python 通⽤爬⾍和聚焦爬⾍
Sep 28 Python
LeetCode189轮转数组python示例
Aug 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 函数中使用static的说明
2012/06/01 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
2015/05/13 PHP
详解php比较操作符的安全问题
2015/12/03 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
2016/11/21 PHP
PHP基于ip2long实现IP转换整形
2020/12/11 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
javascript 单选框,多选框美化代码
2008/08/01 Javascript
Ext JS Grid在IE6 下宽度的问题解决方法
2009/02/15 Javascript
jquery 操作表格实现代码(多种操作打包)
2011/03/20 Javascript
JS 表单验证大全
2011/11/23 Javascript
3款实用的在线JS代码工具(国外)
2012/03/15 Javascript
javascript编码的几个方法详细介绍
2013/01/06 Javascript
JS图片根据鼠标滚动延时加载的实例代码
2013/07/13 Javascript
js this函数调用无需再次抓获id,name或标签名
2014/03/03 Javascript
原生js实现日期联动
2015/01/12 Javascript
JavaScript数组前面插入元素的方法
2015/04/06 Javascript
angularjs中ng-bind-html的用法总结
2017/05/23 Javascript
vuex实现登录状态的存储,未登录状态不允许浏览的方法
2018/03/09 Javascript
vue初始化动画加载的实例
2018/09/01 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
2018/09/30 Javascript
Vue axios 将传递的json数据转为form data的例子
2019/10/29 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
JS绘图Flot应用图形绘制异常解决方案
2020/10/16 Javascript
[03:01]完美盛典趣味短片 DOTA2年度最佳&拉胯英雄
2019/12/07 DOTA
python实现倒计时的示例
2014/02/14 Python
浅谈Python小波分析库Pywavelets的一点使用心得
2019/07/09 Python
wxpython布局的实现方法
2019/11/01 Python
pandas的相关系数与协方差实例
2019/12/27 Python
django 多数据库及分库实现方式
2020/04/01 Python
解决jupyter notebook 出现In[*]的问题
2020/04/13 Python
Python如何获取文件指定行的内容
2020/05/27 Python
助人为乐表扬信范文
2014/01/14 职场文书
三年级科学教学反思
2014/01/29 职场文书
小学校长竞聘演讲稿
2014/05/16 职场文书
安全检查汇报材料
2014/12/26 职场文书