Selenium自动化测试中的PageObject模式

news2025/5/14 17:49:53

PageObject模式简介

众所周知,UI页面元素常常是不稳定的,在使用Selenium编写WebUI自动化测试用例时,随着测试脚本的增加,维护和更新这些元素便成为一个令人头疼的问题。
在普通模式下,脚本直接定位并操作元素,一旦有元素变动时,首先我们需要从众多的用例中找到使用它的用例,然后逐个修改,逐个调试。这是一个非常耗时耗力的过程。

这就像,随着一个公司的扩大,人员的增多,必然会引入中层管理者,来分组管理零散的人员。
对于元素也是一样,我们对元素按页面进行分组,然后引入PageObject页面对象,来专门负责元素的定位和操作。这样脚本只需要使用各个页面对象提供的操作方法即可,无需再关心元素的定位问题。
当元素变动时,只需要维护对应的页面对象即可,这样便可以大大降低框架的维护成本,如下图。

编写页面对象

一个基本的页面对象如下

# baidu_page.py
class BaiduPage(object):
    # 1. 列出所需要操作的元素定位器,元素定位器即 定位方式+定位表达式 
    search_ipt_loc = ('id', 'kw')
    search_btn_loc = ('id', 'su')
    
   # 2. 初始化时传入浏览器驱动并绑定对象,以使得内部可以通过driver定位及操作函数
    def __init__(self, driver, url=None):
        self.driver = driver
        self.url = url

    def open():
        """打开页面"""
        self.driver.get(self.url)
    
    # 3. 每个元素每种操作封装一个方法
    def input_search_keyword(self, keyword):
        """搜索框输入搜索词"""
        self.driver.find_element(*self.search_ipt_loc).send_keys(keyword)
    
    def click_search_button(self):
        """点击百度一下按钮"""
        self.driver.find_element(*self.search_btn_loc).click()
    
    # 4. 也可以封装一些本页面常用的组合操作
    def search(self, keyword):
        """搜索关键词"""
        self.open()
        self.input_search_keyword(keyword)
        self.click_search_button()

使用页面对象

新建一个用例文件test_baidu.py,导入该页面对象使用即可。

from selenium import webdriver
from baidu_page import BaiduPage

def test_baidu_search():
     driver = webdriver.Chrome()
     baidu = BaiduPage(driver, url='https://www.baidu.com')
     baidu.search('美国大选')

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

 如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/518712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

链表中的经典问题

一、反转链表 反转一个单链表:一种解决方案是按原始顺序迭代结点,并将它们逐个移动到列表的头部。 方法1:迭代 C struct ListNode* reverseList(struct ListNode* head) {struct ListNode* prev NULL;struct ListNode* curr head;while (curr) {struct ListN…

字节跳动软件测试面试记:二面被按地上血虐,所幸Offer已到手

在互联网做了几年之后,去大厂“镀镀金”是大部分人的首选。大厂不仅待遇高、福利好,更重要的是,它是对你专业能力的背书,大厂工作背景多少会给你的简历增加几分竞争力。 但说实话,想进大厂还真没那么容易。最近面试字…

Linux中与“系统网络状态”相关的内核数据结构

六、系统网络状态相关的数据结构 6.1 ifconf \linux-2.6.32.63\include\linux\if.h /* Structure used in SIOCGIFCONF request. Used to retrieve interfaceconfiguration for machine (useful for programs which must know allnetworks accessible). */ struct ifcon…

腾讯云与中电金信发布联合核心方案

5月11日,以“聚力革新,行稳致远”为主题的 “腾讯金融云国产化战略峰会”在北京举办,来自金融业、科技侧、研究机构的专家学者同聚一堂,共同探讨银行核心下移方法论以及国产化转型实践等话题。会议期间,中电金信副总经…

Java面试(2)数据类型

数据类型 1. Java有哪些数据类型 Java基本数据类型 这八种基本类型都有对应的包装类分别为:Byte、Short、Integer、Long、Float、Double、Character、Boolean 。 引用数据类型 引用数据类型非常多,大致包括:类、 接口类型、 数组类型、 枚…

AI低代码平台遍地开花,AI对于低代码到底是帮手还是对手?

AI对于低代码平台到底是帮手还是对手? 近日,CSDN举办的新程序员大会中,对于AI在代码领域的能力进行了5个层级的定义。并且进行了大量的测试,发现当下的AI已经可以去到初级程序员了,而更为强大的GPT-4的代码能力甚至还有…

Goby 漏洞更新 | 铭飞 CMS list 接口 sqlWhere 参数 sql 注入漏洞

漏洞名称:铭飞 CMS list 接口 sqlWhere 参数 sql 注入漏洞 English Name:MCMS list Interface sqlWhere Sql Injection Vulnerability CVSS core: 7.5 影响资产数:3091 漏洞描述: MCMS 是一套基于 java 开发的轻量级开源内容…

【时空权衡】

目录 知识框架No.0 时空权衡一、基本思想 No.1 计数排序二、分布计数 No.2 散列法 知识框架 No.0 时空权衡 一、基本思想 其实时空权衡:是指在算法的设计中,对算法的时间和空间作出权衡。 本文主要是是用空间来换时间的。(应该是这样吧) 对问题的部分或…

同样是做大模型的科技公司,为啥差距这么大呢?

2022年OpenAI亏了30多亿元, 站在风口上,谁的压力会小呢? 【科技明说 | 每日看点】站在风口上。OpenAI公司在2022年亏得十分“灿烂”,和往年同比几乎翻了一倍,亏损约达5.4亿美元,折合人民币约31…

微服架构基础设施环境平台搭建 -(五)Docker常用命令

微服架构基础设施环境平台搭建 -(五)Docker常用命令 本文主要列出了Docker常用的命令 微服架构基础设施环境平台搭建 系列文章 微服架构基础设施环境平台搭建 -(一)基础环境准备 微服架构基础设施环境平台搭建 -(二&am…

富文本输出如何避免XSS

有时网站为了美观,会允许用户输入一些富文本,这样在显示的时候,就可以显示的更友好。虽然在输入富文本的时候在客户端进行了控制,但是,仍然难易避免一些攻击者通过抓包篡改数据绕过客户端的控制。因此,在服…

【飞行棋】多人游戏-微信小程序开发流程详解

可曾记得小时候玩过的飞行棋游戏,是90后的都有玩过吧,现在重温一下,这是一个可以二到四个人参与的游戏,通过投骰子走棋,一开始靠运气,后面还靠自己选择,谁抢占先机才能赢,还可以和小…

Redis 三大特殊数据类型常见命令

Geospatial 朋友的定位,附近的人,打车距离计算 底层是 Zset,即可以使用Zset的命令操作Geospatial Redis3.2 开始支持的 1.添加地理位置 两极无法添加经度:-180 ~ 180(度)纬度:-85.05112878 ~ 8…

一、RestTemplate的使用

目录 1、新建项目springcloud(File--->New--->Project) 使用maven quickstart快速新建Maven项目 输入项目名称和Maven信息 确认Maven目录、配置文件、本地仓库,Finish即可 2、创建聚合项目springcloud-member、springcloud-order(项…

【人力资源管理】第2集 免费开源ERP: Odoo 16 Recruitment招聘管理 构建一体化企业人力资源管理

文章目录 前言一、概览二、主要功能1.组织空缺职位和职位申请2.追踪工作机会(查看哪个渠道收到的申请最多)3.定制您的招聘流程4.集成文档(定义您自己的文件管理流程)5.与Odoo应用程序完全集成 总结 前言 轻松处理您的招聘流程。 …

C++ 中到底是应该include .h文件还是应该include .cpp文件

在阅读一个较大的解决方案中,对于其他文件夹下的.h和.cpp文件,有时候#include“XXX.h”文件,有时候是#include“XXX.cpp”文件,而且二者还不能更换。下面就好好分析一下他们二者的区别。 测试 测试:XXX.h和XXX.cpp…

连接器:一种可靠耐用、节约成本的同为科技(TOWE)工业连接器

随着我国经济建设水平的飞速发展,工业连接器被广泛应用于工业、化工、机场、船舶、码头、建筑、铁路、医疗、会展、商业演出等领域。工业连接器的作用是用于连接一个电路导体与另一个电路导体、或一个传输元件与另一个传输元件的装置,并且为两个电路子系…

知识变现海哥:六种常见的知识变现渠道

什么是知识变现?就是用你所会的知识技能,在网上进行展示,吸引人们为其付钱。互联网发展到今天,我们可以看到它各方面已经逐渐完善了,但曾经在互联网上的不花钱的知识,在今天却要为其花费金钱。在此基础上&a…

CCSA TC1演讲分享 | 全域智能,构建平台化生态

日前,中国通信标准化协会(CCSA)成功召开互联网与应用技术工作委员会(TC1)第四十次全会,全会期间,TC1 WG7 IT内控与审计技术标准工作组举办了第3次工作组会议。此次会议重点讨论了各项标准文稿及…

微服架构基础设施环境平台搭建 -(四)在Kubernetes集群基础上搭建Kubesphere平台

微服架构基础设施环境平台搭建 -(四)在Kubernetes集群基础上搭建Kubesphere平台 通过采用微服相关架构构建一套以KubernetesDocker为自动化运维基础平台,以微服务为服务中心,在此基础之上构建业务中台,并通过Jekins自动…