selenium自动化测试框架之PO设计模式

Selenium设计模式 —— POM Python 阅读详情

面向对象的特性:封装、继承、多态。在自动化中一样适用,Selenium自动化测试中有一个名字常常被提及PageObject(思想与面向对象的特性相同),通过PO模式可以大大提高测试用例的维护效率。

传统测试脚本的弊端

  • 测试脚本分离,维护成本高
  • 可扩展性差
  • 复用性低等

PageObject设计模式

PO的核心要素:

  1. 在PO模式中抽象封装成一个BasePage类,该基类应该拥有一个只实现webdriver实例的属性。
  2. 每个一个page都继承BasePage,通过driver来管理本page中元素,将page中的操作封装成一个个的方法。
  3. TestCase继承unittest.Testcase类,并且依赖page类,从而实现相应的测试步骤。

案例

基础案例

前面基础场景选取的是baidu搜索页面(baidu页面简单,不需要搭建测试环境)baidu.py

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")

driver.find_element_by_xpath("//input[@id='kw']").send_keys("Bela")
driver.find_element_by_xpath("//input[@id='su']").click()
sleep(5)
driver.quit()

将上面的脚本放在baidu.py文件中。

分析

通过对baidu.py脚本的分析,可以提取到:

  • 不同的运行脚本环境,浏览器不同:驱动webdriver.Firefox()可以剥离,
  • 请求地址的变化(生产环境与测试环境):url==http://www.baidu.com可以剥离
  • 操作元素时,常常需要等待元素加载完毕后方可进行操作:是否可以把webdriver提供的findelement* 方法封装下,才操作元素前,先判断元素的是否可操作。

===================================================

  • 实际测试场景中,可能有多个测试场景,如果每个测试场景都需要维护url、浏览器驱动、元素定位等,效率会非常低。

  • 因此基于对上面的分析,是否可以设计一个所有测试页面(selenium本身是对B/S系统开展测试)的基类,来维护一些公共的方法。此处先定义个名字哦BasePage.py,用于存放页面公共方法及webdriver原有方法二次封装等。
    BasePage.py内容如下:

from selenium.webdriver.support.wait import WebDriverWait
from selenium import  webdriver
from selenium.webdriver.support import expected_conditions as EC

class BasePage(object):
    """
    BasePage封装所有页面都公用的方法,例如driver, Find_Element等
    """
    # 实例化BasePage类时,最先执行的就是__init__方法,该方法的入参,其实就是BasePage类的入参。
    # __init__方法不能有返回值,只能返回None

    def __init__(self,selenium_driver,base_url):
        self.driver = selenium_driver
        self.base_url = base_url
        # self.pagetitle = pagetitle

    def on_page(self,pagetitle):
        return pagetitle in self.driver.title

    def _open(self,url):
        self.driver.get(url)
        self.driver.maximize_window()

    def open(self):
        self._open(self.base_url,self.pagetitle)

    def find_element(self,*loc):  #*loc任意数量的位置参数(带单个星号参数)
        # return self.driver.find_element(*loc)
        try:
            WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(loc))
            return self.driver.find_element(*loc)
        except:

            print("%s 页面未能找到 %s 元素"%(self,loc))

    def script(self,src):
        self.driver.excute_script(src)

    def send_keys(self, loc, vaule, clear_first=True, click_first=True):
        try:
            loc = getattr(self, "_%s" % loc)  # getattr相当于实现self.loc
            if click_first:
                self.find_element(*loc).click()
            if clear_first:
                self.find_element(*loc).clear()
                self.find_element(*loc).send_keys(vaule)
        except AttributeError:
            print("%s 页面中未能找到 %s 元素" % (self, loc))

测试脚本的优化

BasePage.py提取完毕,其中设计了BasePage类,对一些webdriver的方法进行了二次封装。

baidu.py基于BasePage.py进行优化(充分体现PO的设计思想,封装、继承)

# 基本测试场景
# from selenium import  webdriver
# from time import sleep
#
# driver = webdriver.Firefox()
# driver.get("http://www.baidu.com")
#
# driver.find_element_by_xpath("//input[@id='kw']").send_keys("Bela") #输入框
# driver.find_element_by_xpath("//input[@id='su']").click() #百度一下按钮
#
# sleep(3)
# driver.quit()

# 优化后的测试场景
from selenium.webdriver.common.by import By
from PODemo.BasePage import BasePage  #假设baidu.py、BasePage.py均在PODemo.BasePage目录下
from selenium import webdriver

class SearchPage(BasePage):

    # 定位元素
    search_loc = (By.ID,"kw")
    btn_loc = (By.ID,"su")

    def open(self):
        self._open(self.base_url)

    def search_content(self,content):
        BaiduContent = self.find_element(*self.search_loc)
        BaiduContent.send_keys(content)

    def btn_click(self):
        BaiduBtn = self.find_element(*self.btn_loc)
        BaiduBtn.click()

PageObject总结

  1. PO设计模式中的BasePage基类对应案例中的BasePage.py文件。
  2. PO模式中的page1或pageN对应案例中的Search.py
  3. PO设计模式中TestCase对应案例中的TestCase.py

结语

感谢您的观看,如有不足之处,欢迎批评指正。

获取资料

本次给大家推荐一个免费的学习群,里面概括Python/性能/接口/安全/自动化软件测试以及面试资源等。
对测试感兴趣的同学,欢迎加入Q群:1007119548,不管你是小白还是大牛我都欢迎,还有大牛整理的一套高效率学习路线和教程与您免费分享,同时每天更新视频资料。
最后,祝大家早日学有所成。

原文:https://www.jianshu.com/p/0f10ad684bd5

Selenium Web自动化测试——基于unittest框架的PO设计模式  引言   前面一直在讲接口自动化测试框架与案例分享,很少讲Selenium这个Web自动化测试神器。它主要用来做UI自动化测试,大家都知道UI自动化测试成本相当高,一般的Web自动化测试我是一直不建议做的。   虽然不推荐,但是这里有一个设计思想是不错的——PO设计模式。   PO设计模式   PO设计模式,英文名称:Page Object Model。PO设计模式是Selenium自动化测试中最佳的设计方式之一。相比传统设计中:页面定位元素→输入数据→操作元素→断言结果,会有以下问题:   1 阅读详情

相关推荐

Selenium自动化测试框架之PO设计模式

面向对象的特性:封装、继承、多态。在自动化中一样适用,Selenium自动化测试中有一个名字常常被提及PageObject(思想与面向对象的特性相同),通过PO模式可以大大提高测试用例的维护效率。 ##传统测试脚本的弊端 测试脚本分离,维护成本高 可扩展性差 复用性低等 PageObject设计模式 PO的核心要素: 在PO模式中抽象封装成一个BasePage类,该基类应该拥有一个只实现webdriver实例的属性。 每个一个page都继承BasePage,通过driver来管理本page

小乖V小倩的博客 678

Python+Selenium WebUI自动化框架 -- 实现特殊PO模型

前言: 设计用例格式类,封装PO模型工厂,一行代码执行上千条用例不是梦,让UI自动化框架脱离高成本、低效率时代,将用例的重用性贯彻到极致,让烦人的PO概念变得无所谓,让一个测试小白都能编写并实现自动化 知识储备前提:熟练python语言理论与实际运用,熟悉selenium库与自动化测试环境配置。上一篇文章《Python实现UI自动化框架 -- 一键调用页面操作》 《Python实...

weixin_40331132的博客 2981

Selenium WebDriver自动化测试(设计篇):PO设计模式导读!!!

这是一种在自动化测试领域中变得流行的设计模式,尤其是UI自动化,使得框架代码具有可维护性,即可达到减少重复性代码、使得代码更易读、也减少了维护成本、提高代码复用性的目的。tips:可能是在某些线上教育机构,为小白营造高深的技术印象而加分;实际可能应用并不广泛,或使用其他设计模式更为出众。

我先测了 2503

python+selenium基于po模式的web自动化测试框架

​ Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid。 ​

chengxuyuznguoke的博客 431

科研党必备:用Python+Excel批量下载文献的保姆级教程(附常见错误解决)

本文提供了一套利用Python和Excel实现外文文献批量下载的自动化解决方案。教程详细介绍了如何从数据库导出并清洗DOI信息,编写健壮的Python脚本进行批量下载,并包含错误处理与进阶优化技巧,旨在帮助科研人员将重复性劳动自动化,大幅提升文献收集效率。

weixin_29050513的博客 309

抖音无人直播技术全解析:从原理、实操到合规化思考

直播技术作为内容分发的核心形式,其底层依赖于流媒体协议(如RTMP)与实时音视频编码推流。通过OBS等软件进行场景合成与虚拟摄像头技术,可以实现丰富的画面包装与自动化播放。这项技术的核心价值在于突破人力与时间的限制,实现内容的持续输出与流量获取,在电商带货、品牌展示、陪伴式内容等场景中具有应用潜力。然而,单纯依赖录播循环存在高风险,平台风控系统会通过内容重复性检测与互动行为模型进行识别。因此,更可持续的方向是探索“半无人直播”或自动化辅助工具,例如利用AI数字人驱动或直播切片技术,在合规前提下提升运营效率。

weixin_29895109的博客 509

selenium自动化测试框架PO设计模式

整理一下 selenium 自动化测试实践中使用较多的 PO(PageObject)设计模式 面向对象的特性:封装\继承\多态.在自动化中一样适用,selenium 自动化测试中有一个名字常常被提及 PageObject(思想与面向对象的特性相同),通过 PO 模式可以大大提高测试用例的维护效率 传统测试脚本的弊端: 测试脚本分离,维护成本高 可扩展性差 复用性低等 PageOb...

夜莺_Cody 1万+

波分复用技术原理

波分复用原理 把不同波长的光信号复用到同一根光纤中进行传送,这种方式我们把它叫做波分复用( Wavelength Division Multiplexing ) 一根光纤被划分为多个波道,多个波长以一定的间隔隔开,在光纤中独立传输。 波分复用应用演示 如果将WDM系统看作交通系统,光纤可以看作是多个车道的公用道路。 各种类型的业务就像货物一样,被打包装载到车辆中。 车辆按照分配的车道行驶至目的地,完成货物的运输。 想要提高波分复用系统的传输容量,就要增加波道数量或是提升单波传...

m0_63251770的博客 9998

如何学selenium自动化测试框架之PO设计模式?——这是我见过最好的回答

目录selenium自动化测试框架之PO设计模式传统测试脚本的弊端PO的核心要素:基础案例PageObject总结 selenium自动化测试框架之PO设计模式 面向对象的特性:封装、继承、多态。在自动化中一样适用,Selenium自动化测试中有一个名字常常被提及PageObject(思想与面向对象的特性相同),通过PO模式可以大大提高测试用例的维护效率。 传统测试脚本的弊端 测试脚本分离,维护成本高 可扩展性差 复用性低等 PageObject设计模式 selenium自动化测试框架之PO设计模式 PO的

weixin_45129876的博客 438

ModbusRTU串口读写报文解析

解析MODBUS报文的格式,讨论异常状态、读多个寄存器与写多个寄存器

Serendipitor的博客 9212

泛微E9与金蝶云星空单点登录集成实战指南

本文详细介绍了泛微E9与金蝶云星空单点登录(SSO)集成的实战指南,包括前期准备、核心代码实现、常见问题排查及安全加固建议。通过集成,企业可实现一次登录全网通行,显著提升工作效率和安全性。文章特别强调了签名生成机制和跳转URL构造的关键技巧,帮助开发者避免常见错误。

weixin_30689307的博客 535

python selenium po模式_selenium自动化测试框架之PO设计模式

面向对象的特性:封装、继承、多态。在自动化中一样适用,Selenium自动化测试中有一个名字常常被提及PageObject(思想与面向对象的特性相同),通过PO模式可以大大提高测试用例的维护效率。##传统测试脚本的弊端测试脚本分离,维护成本高可扩展性差复用性低等PageObject设计模式PO的核心要素:在PO模式中抽象封装成一个BasePage类,该基类应该拥有一个只实现webdriver实例的...

weixin_39598472的博客 298

KEGG两类报错--①No gene can be mapped--②URL ‘https://rest.kegg.jp/link/hsa/pathway‘…

版本问题,重新安装一下clusterProfiler包。网络问题,可以等待之后再试一下(试过不是)(以上可以排除基因不存在的错误因素)

weixin_57699783的博客 2万+

selenium自动化测试框架之PO设计模式详解

一. 面向对象的特性:封装、继承、多态。在自动化中一样适用,Selenium自动化测试中有一个名字常常被提及PageObject(思想与面向对象的特性相同),通过PO模式可以大大提高测试用例的维护效率。 传统测试脚本的弊端 测试脚本分离,维护成本高 可扩展性差 复用性低等 PageObject设计模式 PO的核心要素: 在PO模式中抽象封装成一个BasePage类,该基类应该拥有一个只实现webdriver实例的属性。 每个一个page都继承BasePage,通过driver来管理本page中元素,将pa

自动化测试技术栈 1460

YOLO学习笔记 | YOLOv8与卡尔曼滤波实现目标跟踪与预测(附代码)

YOLOv8采用改进的CSPDarknet骨干网络和动态标签分配策略,提供高精度、实时的目标检测能力。使用IOU(交并比)或马氏距离作为代价矩阵,通过匈牙利算法匹配预测框与检测框,解决多目标ID分配问题。卡尔曼滤波通过状态方程和观测方程对目标运动建模,结合预测与观测数据优化状态估计。完整代码需结合具体场景调整参数,并补充匈牙利算法实现(可参考。匈牙利算法(Hungarian Algorithm)是解决。的高效方法,常用于目标跟踪中的。),作为跟踪的输入观测值。(将检测框与预测框匹配)。

尘世冰封的专栏 1251

【系统分析师】2026年上半年真题:案例分析-答案及详解(回忆版)

案例一聚焦因果分析法(鱼骨图)的应用,分析企业订单履约问题。问题1阐述因果分析法定义及常见方法(鱼骨图、5个为什么等);问题2将8个原因归类为人员、方法、合同等5类;问题3筛选适合鱼骨图的场景(如系统响应慢、服务器故障等),强调其适用于复杂根因分析。 案例二对比嵌入式系统中Linux与RTOS的差异(实时性、资源占用等),结合智能监控终端需求推荐Linux+四核ARM方案(高算力、性价比),并列选Linux的5大优势(生态成熟、多任务支持等)。 案例三设计互联网医院系统用例图(患者、医生等参与

数据知道的博客 1357

selenium自动化测试框架之PO设计模式!

面向对象的特性:封装、继承、多态。在自动化中一样适用,Selenium自动化测试中有一个名字常常被提及PageObject(思想与面向对象的特性相同),通过PO模式可以大大提高测试用例的维护效率。

qq_43371695的博客 996

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

上一篇: Web测试中定位bug方法
下一篇: 自动化成本高?那么如何获得最高的投资回报呢?
TestingGDR
博客等级 码龄8年 496粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值