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 ip正则式
May 07 Python
python实现zencart产品数据导入到magento(python导入数据)
Apr 03 Python
Python求解平方根的方法
Mar 11 Python
Python中的Matplotlib模块入门教程
Apr 15 Python
pandas带有重复索引操作方法
Jun 08 Python
如何优雅地改进Django中的模板碎片缓存详解
Jul 04 Python
Django给admin添加Action的步骤详解
May 01 Python
Django中celery执行任务结果的保存方法
Jul 12 Python
python常见字符串处理函数与用法汇总
Oct 30 Python
tensorboard实现同时显示训练曲线和测试曲线
Jan 21 Python
Flask处理Web表单的实现方法
Jan 31 Python
Python Matplotlib绘制等高线图与渐变色扇形图
Apr 14 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提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
2014/08/28 PHP
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
php生成二维码时出现中文乱码的解决方法
2014/12/18 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
2015/01/07 PHP
Whatever:hover 无需javascript让IE支持丰富伪类
2010/06/29 Javascript
jquery.boxy弹出框(后隔N秒后自动隐藏/自动跳转)
2013/01/15 Javascript
js读取被点击次数的简单实例(从数据库中读取)
2014/03/07 Javascript
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
AngularJs动态加载模块和依赖注入详解
2016/01/11 Javascript
Bootstrap表单组件教程详解
2016/04/26 Javascript
原生js实现水平方向无缝滚动
2017/01/10 Javascript
jQuery插件版本冲突的处理方法分析
2017/01/16 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
JavaScript观察者模式原理与用法实例详解
2020/03/10 Javascript
通过实例了解JS执行上下文运行原理
2020/06/17 Javascript
[01:02:10]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第一局
2016/02/26 DOTA
Python3字符串学习教程
2015/08/20 Python
Python彩色化Linux的命令行终端界面的代码实例分享
2016/07/02 Python
分享一个pycharm专业版安装的永久使用方法
2019/09/24 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
jupyter notebook 多环境conda kernel配置方式
2020/04/10 Python
使用Python实现批量ping操作方法
2020/05/06 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
2020/05/08 Python
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
ASOS英国官网:英国在线时装和化妆品零售商
2017/05/19 全球购物
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
英国在线泳装店:Simply Swim
2019/05/05 全球购物
美国领先的个性化礼品商城:Personalization Mall
2019/07/27 全球购物
英国书籍、CD、DVD和游戏的第一道德零售商:Awesome Books
2020/02/22 全球购物
《逃家小兔》教学反思
2014/02/23 职场文书
动物科学专业求职信
2014/07/27 职场文书
家长高考寄语
2015/02/27 职场文书
幼儿园中班教学反思
2016/03/03 职场文书
财务会计个人原因辞职信
2019/06/21 职场文书