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 Shell获取hostname和fqdn释疑
Jan 25 Python
python操作字典类型的常用方法(推荐)
May 16 Python
python实现日常记账本小程序
Mar 10 Python
Python重新加载模块的实现方法
Oct 16 Python
Python中使用遍历在列表中添加字典遇到的坑
Feb 27 Python
在Python中如何传递任意数量的实参的示例代码
Mar 21 Python
Python面向对象实现一个对象调用另一个对象操作示例
Apr 08 Python
简单了解django索引的相关知识
Jul 17 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
Feb 18 Python
python Tornado框架的使用示例
Oct 19 Python
python爬取2021猫眼票房字体加密实例
Feb 19 Python
pycharm配置安装autopep8自动规范代码的实现
Mar 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
PHP面向接口编程 耦合设计模式 简单范例
2011/03/23 PHP
php教程 插件机制在PHP中实现方案
2012/11/02 PHP
PHP常用正则表达式集锦
2014/08/17 PHP
php实现约瑟夫问题的方法小结
2015/03/23 PHP
PHP使用NuSOAP调用Web服务的方法
2015/07/18 PHP
PHPExcel导出2003和2007的excel文档功能示例
2017/01/04 PHP
JQuery实现倒计时按钮的实现代码
2012/03/23 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
2013/06/05 Javascript
js Math 对象的方法
2013/09/01 Javascript
构造函数+原型模式构造js自定义对象(最通用)
2014/05/12 Javascript
js判断浏览器类型为ie6时不执行
2014/06/15 Javascript
js给selected添加options的方法
2015/05/06 Javascript
javascript中substring()、substr()、slice()的区别
2015/08/30 Javascript
jQuery实现图片加载完成后改变图片大小的方法
2016/03/29 Javascript
解决vue多个路由共用一个页面的问题
2018/03/12 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
AngularJS动态生成select下拉框的方法实例
2019/11/17 Javascript
零基础写python爬虫之HTTP异常处理
2014/11/05 Python
Python rstrip()方法实例详解
2018/11/11 Python
python爬虫获取百度首页内容教学
2018/12/23 Python
python 产生token及token验证的方法
2018/12/26 Python
详解Python字符串切片
2019/05/20 Python
python如何实现异步调用函数执行
2019/07/08 Python
Python使用正则实现计算字符串算式
2019/12/29 Python
基于Python和PyYAML读取yaml配置文件数据
2020/01/13 Python
Python列表切片常用操作实例解析
2020/03/10 Python
python新手学习使用库
2020/06/11 Python
SportsDirect.com马来西亚:英国第一体育零售商
2018/11/21 全球购物
Furla官网:意大利著名的皮革品牌
2019/08/06 全球购物
土木建筑学生自我评价
2014/01/14 职场文书
银行见习期自我鉴定
2014/01/29 职场文书
《太阳》教学反思
2014/02/21 职场文书
银行转正自我鉴定
2014/09/29 职场文书
清明节寄语2015
2015/03/23 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python
Python 发送SMTP邮件的简单教程
2021/06/24 Python