在 Java 中的使用Selenium 测试框架

devtools/2024/9/20 7:25:31/ 标签: java, selenium, 开发语言

Selenium 测试框架:在 Java 中的使用

Selenium 测试框架就是这样一个强大的工具,它为 Web 应用的自动化测试提供了全面且高效的解决方案。

一、Selenium 简介

Selenium 是一个开源的自动化测试工具集,专门用于测试 Web 应用程序。它支持多种操作系统和主流的编程语言,其中包括 Java。Selenium 能够模拟真实用户在浏览器中的各种操作,从而对 Web 应用的功能、性能、用户界面等方面进行全面的测试。
官网:https://www.selenium.dev/zh-cn/
在这里插入图片描述

二、Selenium 的核心功能

Selenium 具有以下几个核心功能,使其成为 Web 应用测试的强大工具:

  1. 页面操作模拟

    • 可以模拟用户在浏览器中的点击、输入、拖拽、滚动等各种操作,就像真实用户与页面进行交互一样。这使得能够全面测试页面的各种功能和用户流程。
    • 例如,模拟用户填写表单并提交,验证表单数据的处理是否正确。
  2. 元素定位与操作

    • 能够精确地定位页面中的元素,无论是通过元素的 ID、名称、类名、标签名、链接文本,还是使用强大的 XPath 和 CSS 选择器。
    • 定位到元素后,可以对其进行各种操作,如获取文本内容、设置属性值、检查元素的可见性和可用性等。
  3. 浏览器控制

    • 支持多种主流浏览器,如 Chrome、Firefox、Edge 等,并能够控制浏览器的打开、关闭、前进、后退、刷新等操作。
    • 可以在不同的浏览器中运行相同的测试脚本,以确保 Web 应用在各种浏览器环境下的兼容性。
  4. 断言与验证

    • 提供了丰富的断言方法,用于验证页面元素的状态、文本内容、属性值等是否符合预期。
    • 通过断言,可以确定测试步骤的结果是否正确,从而判断测试是否通过。
  5. 多窗口和多标签页管理

    • 能够处理浏览器中的多个窗口和标签页,在不同的窗口和标签页之间切换,进行操作和验证。
    • 这对于测试涉及多个页面交互的场景非常有用,例如在新窗口中打开链接并验证内容。
  6. 异步操作处理

    • 能够处理页面中的异步加载和动态内容。可以等待特定元素出现或特定条件满足后再进行下一步操作,确保测试的准确性和稳定性。
  7. 与测试框架集成

    • 可以与常见的测试框架,如 JUnit、TestNG 等集成,方便测试用例的组织、管理和报告生成。

这些核心功能使得 Selenium 成为一个强大而灵活的工具,能够满足各种复杂的 Web 应用测试需求,帮助开发和测试人员提高测试效率和质量。

三、Selenium 的安装

1. 安装 Java 开发环境(JDK)

首先,需要从 Oracle 官方网站下载适合您操作系统的 JDK 安装包,并按照安装向导进行安装。安装完成后,需要配置环境变量,以便在命令行中能够识别 Java 命令。

2. 配置 Maven 项目

如果您使用 Maven 来管理项目依赖,可以在项目的 pom.xml 文件中添加 Selenium 的依赖:

<dependencies><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>${selenium.version}</version></dependency>
</dependencies>

或者,如果您不使用 Maven ,可以手动将 Selenium 的 JAR 文件添加到项目的类路径中。

四、Selenium 的配置

1. 选择浏览器

Selenium 支持多种常见的浏览器,如 Chrome、Firefox、Edge 等。您可以根据项目需求和实际情况选择适合的浏览器进行测试。

2. 下载浏览器驱动

对于您选择的浏览器,需要下载对应的驱动程序。例如,如果选择 Chrome 浏览器,需要下载 ChromeDriver;如果选择 Firefox 浏览器,需要下载 GeckoDriver 等。
注:驱动版本和自己浏览器的版本匹配
您可以从以下官方网站获取相应的浏览器驱动:

  • ChromeDriver:https://sites.google.com/a/chromium.org/chromedriver/
  • GeckoDriver:https://github.com/mozilla/geckodriver/releases
    可以将驱动安装在JDK的bin目录下在这里插入图片描述

下载完成后,将驱动文件放置在项目目录或系统环境变量指定的路径中。

五、浏览器驱动

浏览器驱动是 Selenium 与浏览器之间进行通信的关键桥梁。它们负责将 Selenium 发送的指令准确无误地传递给浏览器,并将浏览器的响应返回给 Selenium 。

务必确保所下载的浏览器驱动版本与您使用的浏览器版本相互兼容,否则可能会遇到各种无法预料的问题,如无法启动浏览器、执行操作失败等。

六、Selenium 基础语法(Java 示例)

以下是一个使用 Java 语言和 Selenium 进行简单 Web 自动化测试的示例代码:

java">import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;import static java.lang.Thread.sleep;public class SeleniumExample {public static void main(String[] args) throws InterruptedException {// 设置 ChromeDriver 的路径ChromeOptions options = new ChromeOptions();// 允许所有请求options.addArguments("--remote-allow-origins=*");// 初始化 Chrome 浏览器驱动WebDriver webDriver = new ChromeDriver(options);// 打开指定的网页webDriver.get("https://www.baidu.com");// 进行其他操作,如查找元素、与元素交互等//等待5秒sleep(5000);// 关闭浏览器webDriver.quit();}
}

在上述代码中,首先设置了 ChromeDriver 的路径,然后创建了 ChromeDriver 对象来启动浏览器,并使用 get 方法打开指定的网页。
效果:在这里插入图片描述

七、八大元素定位

在 Selenium 中,精确地定位页面元素是进行各种交互操作的基础。以下是一些常见的元素定位方法(Java 示例):

  1. By.id():通过元素的 ID 属性进行定位。
java">WebElement element = driver.findElement(By.id("elementId"));
  1. By.name():通过元素的 name 属性进行定位。
java">WebElement element = driver.findElement(By.name("elementName"));
  1. By.className():通过元素的 class 属性进行定位。
java">WebElement element = driver.findElement(By.className("elementClass"));
  1. By.tagName():通过元素的标签名进行定位。
java">List<WebElement> elements = driver.findElements(By.tagName("div"));
  1. By.linkText():通过链接的完整文本进行定位。
java">WebElement element = driver.findElement(By.linkText("链接文本"));
  1. By.partialLinkText():通过链接的部分文本进行定位。
java">WebElement element = driver.findElement(By.partialLinkText("部分链接文本"));
  1. By.xpath():使用 XPath 表达式进行定位,XPath 是一种强大且灵活的定位方式。
java">WebElement element = driver.findElement(By.xpath("//div[@class='exampleClass']/input[@name='exampleName']"));
  1. By.cssSelector():通过 CSS 选择器进行定位。
java">WebElement element = driver.findElement(By.cssSelector("#elementId.exampleClass"));

总之,Selenium 测试框架为 Web 应用的测试提供了强大的支持。通过熟练掌握 Selenium 在 Java 中的安装、配置、基础语法和元素定位等知识,您能够构建高效、可靠的自动化测试脚本,显著提升 Web 应用的质量和稳定性。


http://www.ppmy.cn/devtools/56228.html

相关文章

nuxt实现vuex持久化

前言&#xff1a; 此处不借助插件实现 store 本地持久化 所有状态持久化 使用 vuex 里面的 replaceState 方法还原 store 的根状态 API 参考 | Vuex 创建 store-cache.js 文件 在 plugins 目录下创建 store-cache.js 文件&#xff1b; store-cache.js export default (ctx) &g…

shell编程实战

1.1 shell脚本编程的步骤 需求分析&#xff1a;确定功能 命令测试&#xff1a;确定脚本需要的关键命令 编辑脚本 测试脚本 1.2 操作 1.2.1 实验一 1.需求描述 (1)统计网络中的服务器的mac 注&#xff1a;ARP&#xff0c;地址解析协议 注&#xff1a; (2)检查哪些主机开…

Ubuntu开机后图像化界面消失只有命令行界面

ubuntu重新安装cpp库时突然黑屏&#xff0c;打开之后&#xff0c;只能手动输入用户名和密码才能登陆&#xff0c;当时最坏的结果就是重新安装系统&#xff0c;但是还是得抢救一下&#xff0c;万幸的是抢救成功了&#xff01;&#xff01;&#xff01; 于是来到第一个博客 参考…

收银系统源码-千呼新零售【分销商城】

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

【cf】Edu Codeforces Round 167(Div.2)题解 A - E

文章目录 A. Catch the CoinB. Substring and Subsequence&#xff08;贪心&#xff09;C. Two Movies&#xff08;贪心&#xff09;D. Smithing Skill&#xff08;贪心双指针&#xff09;E. Distance to Different&#xff08;dp&#xff09; A. Catch the Coin y 小于 -1 就…

Talking Web

1. curl 1.1 http curl http://127.0.0.1:80 向目标主机端口发送http请求 1.2 httphead curl -H “Host: 18ed3df584cd48328b5839443aa7b42b” http://127.0.0.1:80 1.3 httppath curl http://127.0.0.1:80/853c64cd218f80d0a59665666fb2ab80 1.4 URL编码路径 &#xff0…

光学相机市场格局:中国光学相机市场评估及未来发展趋势研究报告

欢迎关注GZH《光场视觉》 光学相机行业定义 光学相机是一种利用光学镜头和感光材料&#xff08;如胶片&#xff09;或数字传感器来捕捉图像的装置。光学相机&#xff0c;也常被称作传统相机或胶片相机&#xff0c;其工作原理基于光的折射和聚焦。当光线通过相机的镜头进入时&…

从我邮毕业啦!!!

引言 时间过的好快&#xff0c;转眼间就要从北邮毕业了&#xff0c;距离上一次月度总结又过去了两个月&#xff0c;故作本次总结。 PS: https://github.com/WeiXiao-Hyy/blog整理了后端开发的知识网络&#xff0c;欢迎Star&#xff01; 毕业&#x1f393; 6月1号完成了自己的…

# Kafka_深入探秘者(1):初识 kafka

Kafka_深入探秘者&#xff08;1&#xff09;&#xff1a;初识 kafka 一、kafka 特性 1、Kafka &#xff1a;最初是由 Linkedln 公司采用 Scala 语言开发的一个多分区、多副本并且基于 ZooKeeper 协调的分布式消息系统&#xff0c;现在已经捐献给了 Apache 基金会。目前 Kafka…

【websocket】websocket网课视频记录

仅个人方便回顾。 【WebSocket入门与案例实战-哔哩哔哩】 https://b23.tv/2p1f9t2 课程对应代码仓库: https://gitee.com/duoli-java/websocket-demo.git

[图解]企业应用架构模式2024新译本讲解18-活动记录2

1 00:00:00,940 --> 00:00:04,890 接下来&#xff0c;就是要把这个列表输出到控制台 2 00:00:06,490 --> 00:00:12,280 这里面有3个 3 00:00:15,420 --> 00:00:17,480 Id有了&#xff0c;姓 4 00:00:18,600 --> 00:00:28,500 一个一个取&#xff0c;ID&#xff…

Python 实现Excel转TXT,或TXT文本导入Excel

Excel是一种具有强大的数据处理和图表制作功能的电子表格文件&#xff0c;而TXT则是一种简单通用、易于编辑的纯文本文件。将Excel转换为TXT可以帮助我们将复杂的数据表格以文本的形式保存&#xff0c;方便其他程序读取和处理。而将TXT转换为Excel则可以将文本文件中的数据导入…

不是KVM不支持精简置备的磁盘,而是VMM

正文共&#xff1a;999 字 11 图&#xff0c;预估阅读时间&#xff1a;1 分钟 书接上文&#xff08;不会吧&#xff01;KVM竟然不支持磁盘的精简置备&#xff01;&#xff1f;&#xff09;&#xff0c;我们已经掌握了通过“虚拟系统管理器VMM”创建虚拟机的基本方法&#xff0c…

Kafka Stream 流处理设计概述

Kafka Stream 流处理设计概述 Kafka 流处理是指使用 Kafka 及其生态系统中的组件来处理实时数据流。Kafka Streams 是 Kafka 官方 提供的流处理库,它简化了构建流处理应用程序的过程,并与 Kafka 无缝集成。以下是 Kafka 流处理的设 计原理和相关概念。 1. Kafka 流处理基本…

基于matlab的不同边缘检测算子的边缘检测

1 原理 1.1 边缘检测概述 边缘检测是图像处理和计算机视觉中的基本问题&#xff0c;其目的在于标识数字图像中亮度变化明显的点。这些变化通常反映了图像属性的重要事件和变化&#xff0c;如深度不连续、表面方向不连续、物质属性变化和场景照明变化等。边缘检测在特征提取中…

计算机毕业设计Python+Spark知识图谱微博预警系统 微博推荐系统 微博可视化 微博数据分析 微博大数据 微博爬虫 微博预测系统 大数据毕业设计

课题名称 基于Bert模型对微博的言论情感分析设计与实现 课题来源 课题类型 BY 指导教师 学生姓名 专 业 计算机科学与技术 学 号 开题报告内容&#xff1a;&#xff08;调研资料的准备&#xff0c;设计/论文的目的、要求、思路与预期成果&#xff1b;…

【uniapp】上传附件+Java后端

一、背景 移动端项目使用uniapp开发&#xff0c;项目有上传附件的需求。现在分享给大家&#xff0c;一起进步 二、前端 关键代码&#xff1a; uni.chooseFile({type: "all",count: this.count,success: res > {let len 0;res.tempFiles.forEach((item, index…

endswith()方法——是否以指定子字符串结尾

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 endswith()方法用于检索字符串是否以指定子字符串结尾。如果是则返回True&#xff0c;否则返回False。endswith()方法的语法格式如下&…

提升 Selenium 测试稳定性的秘诀:深入理解等待 API 的使用

目录 为什么需要等待Selenium 等待 API 简介隐式等待显式等待Fluent Wait等待策略的选择示例代码总结 正文 1. 为什么需要等待 在 Web 自动化测试中&#xff0c;等待是一个关键因素。网络应用通常是动态的&#xff0c;页面加载时间、元素的显示时间都可能不同步。直接操作这…

DataV大屏组件库

DataV官方文档 DataV组件库基于Vue &#xff08;React版 (opens new window)&#xff09; &#xff0c;主要用于构建大屏&#xff08;全屏&#xff09;数据展示页面即数据可视化&#xff0c;具有多种类型组件可供使用&#xff1a; 源码下载