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实现登陆知乎获得个人收藏并保存为word文件
Mar 16 Python
Python fileinput模块使用实例
Jun 03 Python
Python实现树的先序、中序、后序排序算法示例
Jun 23 Python
Python爬虫实现(伪)球迷速成
Jun 10 Python
基于sklearn实现Bagging算法(python)
Jul 11 Python
浅谈Python访问MySQL的正确姿势
Jan 07 Python
TensorFlow梯度求解tf.gradients实例
Feb 04 Python
python实现随机加减法生成器
Feb 24 Python
Python实现检测文件的MD5值来查找重复文件案例
Mar 12 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
May 20 Python
Keras—embedding嵌入层的用法详解
Jun 10 Python
Python QT组件库qtwidgets的使用
Nov 02 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
在IIS上安装PHP4.0正式版
2006/10/09 PHP
php MsSql server时遇到的中文编码问题
2009/06/11 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
Yii框架where查询用法实例分析
2019/10/22 PHP
PHP哈希表实现算法原理解析
2020/12/11 PHP
JavaScript 学习笔记(六)
2009/12/31 Javascript
javascript奇异的arguments分析
2010/10/20 Javascript
项目中常用的JS方法整理
2015/01/30 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
js实现简洁的滑动门菜单(选项卡)效果代码
2015/09/04 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
2017/05/11 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
node 使用 async 控制并发的方法
2018/05/07 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
Vue实现购物车详情页面的方法
2019/08/20 Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
2019/09/25 Javascript
python开发中range()函数用法实例分析
2015/11/12 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
Python基于OpenCV实现视频的人脸检测
2018/01/23 Python
python实现教务管理系统
2018/03/12 Python
通过Python模块filecmp 对文件比较的实现方法
2018/06/29 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
2019/08/02 Python
Jupyter Notebook的连接密码 token查询方式
2020/04/21 Python
使用python求斐波那契数列中第n个数的值示例代码
2020/07/26 Python
详解pycharm自动import所需的库的操作方法
2020/11/30 Python
详解使用HTML5 Canvas创建动态粒子网格动画
2016/12/14 HTML / CSS
上班睡觉检讨书
2014/01/09 职场文书
构建高效课堂实施方案
2014/03/13 职场文书
常务副总经理任命书
2014/06/05 职场文书
乡镇领导班子批评与自我批评材料
2014/09/23 职场文书
先进工作者个人总结
2015/02/15 职场文书
校园广播稿范文
2015/08/19 职场文书
电台广播稿范文
2015/08/19 职场文书