当前位置: 首页 > news >正文

Selenium 在自动化测试中的应用

在自动化测试中,Selenium是一种非常流行的工具,它允许开发者通过编程的方式与Web浏览器进行交互,模拟用户操作,如点击按钮、填写表单、导航网页等。

1. Selenium 简介

Selenium是一个支持多种浏览器的Web自动化测试工具,它提供了与浏览器交互的API,使得开发者可以模拟浏览器中的一系列用户行为,从而实现自动化测试。Selenium支持的浏览器包括Chrome、Firefox、Edge、Safari等,此外,它还支持多种编程语言,如Python、Java、C#、Ruby、JavaScript等。

Selenium主要有三种组件:

  • Selenium WebDriver:用于控制浏览器,执行自动化测试脚本。
  • Selenium Grid:允许在多台机器上并行执行测试。
  • Selenium IDE:一个记录和回放测试的工具,适合不熟悉编程的用户。

2. Selenium 在自动化测试中的应用场景 

Selenium主要应用于Web应用的自动化测试,尤其适用于以下场景:

  • 功能测试:自动化验证Web应用的功能是否按照预期工作。
  • 回归测试:在Web应用做出修改后,自动化测试确保旧的功能依然正常工作。
  • 表单验证:自动填写和提交表单,验证表单的各类验证规则是否正常工作。
  • UI测试:通过模拟用户行为,检查界面的各个元素是否正确显示和响应。
  • 性能测试:与负载工具配合,测试Web应用在不同负载下的表现。
  • 跨浏览器测试:确保应用在不同浏览器中的兼容性。 

3. Selenium 自动化测试的基本流程

1. 选择浏览器:使用WebDriver启动一个浏览器实例,通常选择Chrome、Firefox、Edge等常用浏览器。

2. 定位元素:通过各种定位方式(ID、Class Name、XPath、CSS Selector等)定位Web页面上的元素。

3. 执行操作:模拟用户操作,如点击按钮、输入文本、选择下拉框等。

4. 验证结果:使用断言验证Web页面上的内容是否符合预期。

5. 关闭浏览器:测试完成后,关闭浏览器并释放资源。

4. Selenium 自动化测试的代码示例

场景:假设你需要在一个页面上进行自动化测试,验证用户名和密码是否正确。

 4.1 安装Selenium

pip install selenium

4.2 编写自动化测试脚本

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time# 启动 Chrome 浏览器
driver = webdriver.Chrome()# 打开登录页面
driver.get('https://www.example.com/login')# 通过ID(也可以是其他方式如By.NAME, By.XPATH, By.CSS_SELECTOR)定位页面元素,并填写用户名
username_field = driver.find_element(By.ID, 'username')
username_field.send_keys('test_user')# 定位并填写密码
password_field = driver.find_element(By.ID, 'password')
password_field.send_keys('test_password')# 定位并点击登录按钮
login_button = driver.find_element(By.ID, 'login-button')
login_button.click()# 等待一段时间,等待页面加载
time.sleep(2)# 验证登录是否成功
welcome_message = driver.find_element(By.ID, 'welcome-message')
assert 'Welcome' in welcome_message.text  #断言# 关闭浏览器
driver.quit()

5. 常见的Selenium测试操作:

5.1 等待元素加载(显示/隐式等待)

  • 隐式等待:让WebDriver等待一段时间,知道页面上所有的元素都加载完毕。
driver.implicitly_wait(10)  # 等待最大10秒
  • 显示等待:等到某个特定元素加载完毕。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import Bywait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.ID, 'element_id')))

 5.2 弹窗处理(Alert)

# 接受弹窗
alert = driver.switch_to.alert
alert.accept()# 拒绝弹窗
alert.dismiss()

5.3 切换窗口或标签页

# 获取当前所有窗口的句柄
handles = driver.window_handles
# 切换到第二个窗口
driver.switch_to.window(handles[1])

5.4 执行JavaScript脚本

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

6. 使用Selenium进行跨浏览器测试(通过设置不同的WebDriver来进行跨浏览器测试)

#以Edge浏览器为例
from selenium import webdriver# 设置 Edge驱动 的路径
edge_driver_path = 'E:\SoftWare_work\download\edgedriver_win64\msedgedriver.exe' driver = webdriver.Edge(executable_path=edge_driver_path)
driver.get("https://www.example.com")

7. Selenium Grid与并行测试

Selenium Grid允许你在多台机器或者浏览器上并行运行测试,从而加速测试过程。

  • 配置Selenium Hub和Selenium Node来实现分布式测试。
  • 通过Selenium Grid可以运行不同浏览器、不同操作系统的组合进行并行测试。

8. Selenium 与测试框架集成

Selenium可以与测试框架结合使用,如:

  • unittest 或 pytest(Python) 
  • JUnit(Java)
  • TestNG(Java)

这样可以将Selenium脚本嵌入到自动化测试框架中,进行组织、管理和报告生成。

9. Selenium测试的优缺点

优点:

  • 强大的跨浏览器支持,适用于各种Web应用的自动化测试。
  • 灵活性高,支持多种编程语言。
  • 可以与其他工具(如Jenkins)集成,支持CI/CD流程。

缺点:

  • 需要安装Web浏览器和WebDriver,配置和维护稍显复杂。
  • 测试执行速度较慢,尤其是启动和关闭浏览器时。
  • 在一些复杂的动态网页中,可能需要更多的调试和等待策略。 

总结:

由于Selenium是通过模拟用户浏览网页的行为进行页面交互的,所以当我们将Selenium应用于系统的自动化测试时,考虑到不同系统间页面内容、布局、数据等存在差异,自动化脚本可能需要进行调整。也就是说对一个系统开发的自动化测试工具不能完全用于另一个系统的测试。例如,某些字段可能在不同环境下显示或加载的顺序不同,元素的 ID、类名、标签等也可能有所不同,这会导致脚本中的定位方式(如通过 IDXPathCSS 等选择器)失效

相关文章:

Selenium 在自动化测试中的应用

在自动化测试中,Selenium是一种非常流行的工具,它允许开发者通过编程的方式与Web浏览器进行交互,模拟用户操作,如点击按钮、填写表单、导航网页等。 1. Selenium 简介 Selenium是一个支持多种浏览器的Web自动化测试工具&#xff…...

python3 Flask应用 使用 Flask-SQLAlchemy操作MySQL数据库

一、环境搭建 下载命令: pip install flask flask-sqlalchemy pymysql 二、创建项目结构 yourProjectFolder/ |—— app.py |—— config.py |—— models.py |__ mydb.py 三、基本使用 3.1 config.py 进行数据库连接配置 import osbasedir os.path.abspat…...

Python学习——猜拳小游戏

import random player int(input(“请输入:剪刀 0,石头 1,布2”)) computer random.randint(0,2)# print(“玩家输入的是%d,电脑输入的是%d” %(player,computer)) 用于测试 if (player 0) and (computer 0) or (player 1) a…...

递归-迭代

24. 两两交换链表中的节点 Leetcode 24 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 递归解法 // 注意:cpp …...

恋爱通信史之完整性

在前面的章节中,介绍了对通信消息的加密,可以保证保密性(机密性)。虽说中间人无法解密通信消息的内容,但是可以篡改通信的消息。在接受者视角来看,是无法识别通信消息是否被篡改。因此,必须引入一种机制,保…...

Docker 容器的初始化设置

虽然现在Conntainerd 大有取代Docker作为容器运行时的趋势,但是docker还是有自己的优势在。尤其是对于开发者来讲,使用Docker 比使用 containerd 方便很多,尤其是在Docker Desktop等工具的加持下。 本文主要面向Docker的初、中级学者&#xf…...

密码编码学与网络安全(第五版)答案

2.4题: 通过如下代码分别统计一个字符的频率和三个字符的频率,"8"——"e",“;48”——“the”,英文字母的相对使用频率,猜测频率比较高的依此为),t,*,5&#xf…...

C++初阶(十四)--STL--vector的模拟实现

文章目录 一、vector的基本结构 二、默认成员函数的实现 1.构造函数 2.拷贝构造函数 3.赋值运算符重载 4. 析构函数 三、迭代器相关函数 begin和end 四、容量和大小相关函数 size capacity reserve resize empty 五、修改容器的函数 push_back pop_back insert…...

贴代码框架PasteForm特性介绍之query,linkquery

简介 PasteForm是贴代码推出的 “新一代CRUD” ,基于ABPvNext,目的是通过对Dto的特性的标注,从而实现管理端的统一UI,借助于配套的PasteBuilder代码生成器,你可以快速的为自己的项目构建后台管理端!目前管…...

高防IP如何构建安全高效的数字政务新生态

随着数字化转型浪潮的日渐汹涌,政务行业也在朝着智慧政务的方向高速迈进,提升了为民服务的整体效率。然而,凡事都有双面性,随着政务服务线上化的深入发展,网络安全威胁也日益严峻。黑客攻击、DDoS攻击、CC攻击等安全事…...

数据结构与算法——1122—复杂度总结检测相同元素

1、复杂度总结 1、时间复杂度计算遵循的原则 1、复杂度与其具体的常系数无关(即:常数项的系数不要) 2、多项式级复杂度相加的时候,把其高项作为结果(即:多项式只保留最大项) 3、O(1)含义为&…...

HTML通过JavaScript获取访问连接,IP和端口

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>Get IP Address</title> <script> function displayURL() { var url window.location.href; // 获取当…...

自动化测试过程操作细节

一、软件与框架介绍 1. Postman 读音&#xff1a;[pəʊstmən]&#xff08;剖斯特曼&#xff09; 介绍&#xff1a;API开发与测试的得力助手&#xff0c;通过直观界面发送HTTP请求&#xff0c;查看响应数据。支持环境变量、集合、脚本等功能。 主要特点&#xff1a;易于使用…...

AR智能眼镜|AR眼镜定制开发|工业AR眼镜方案

AR眼镜的设计与制造成本主要受到芯片、显示屏和光学方案的影响&#xff0c;因此选择合适的芯片至关重要。一款优秀的芯片平台能够有效提升设备性能&#xff0c;并解决多种技术挑战。例如&#xff0c;采用联发科八核2.0GHz处理器&#xff0c;结合12nm制程工艺&#xff0c;这种低…...

从〇开始深度学习(0)——背景知识与环境配置

从〇开始深度学习(0)——背景知识与环境配置 文章目录 从〇开始深度学习(0)——背景知识与环境配置写在前面1.背景知识1.1.Pytorch1.2.Anaconda1.3.Pycharm1.4.CPU与GPU1.5.整体关系 2.环境配置2.1.准备工作2.1.1.判断有无英伟达显卡2.1.2.清理电脑里的旧环境 2.1.安装Anaconda…...

实验室管理技术革新:Spring Boot系统

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…...

C语言 蓝桥杯某例题解决方案(查找完数)

蓝桥杯原题&#xff1a; 一个数如果恰好等于它的因子之和&#xff0c;这个数就称为“完数”。例如6 1 2 3.编程找出1000以内的所有完数。 这个题没有很大的难点&#xff0c;与我们上一个解决的问题“质因数分解”不同&#xff0c;它不需要判断因数是否是质数&#xff0c;因此…...

Prompting LLMs to Solve Complex Tasks: A Review

文章目录 题目简介任务分解未来方向结论 题目 促使 LLM 解决复杂任务&#xff1a; 综述 论文地址&#xff1a;https://www.intjit.org/cms/journal/volume/29/1/291_3.pdf 简介 大型语言模型 (LLM) 的最新趋势显而易见&#xff0c;这体现在大型科技公司的投资以及媒体和在线社…...

C++ 编程指南05 - 编译时检查优于运行时检查

一&#xff1a;概述 编译时错误检查是C编程中一条非常重要的原则&#xff0c;它强调了在可能的情况下&#xff0c;应该优先依赖编译时检查&#xff08;静态检查&#xff09;而不是运行时检查。这样做的主要目的是提高程序的性能、安全性和可维护性。 编译时检查&#xff0c;即在…...

【优先算法】专题——双指针

1.移动零 移动零 题目描述&#xff1a; 思路&#xff1a; 本题我们把数组分块&#xff0c;将非零元素移动到左边&#xff0c;为零元素移动右边。 我们使用双指针算法&#xff08;利用数组下标来充当指针&#xff09; 两个指针的作用&#xff1a; cur&#xff1a;从左往右…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...