在 Java 中的使用Selenium 测试框架

news2025/1/13 10:04:09

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 自动化测试的示例代码:

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

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

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

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

相关文章

Camera Raw:编辑 - 曲线

Camera Raw “编辑”模块中的曲线 Curve面板提供了曲线这一强大的工具&#xff0c;通过精确控制亮度和对比度&#xff0c;以及调整红、绿、蓝通道的曲线&#xff0c;可以显著提升图像的视觉效果和色彩表现。这些调整工具为摄影师和图像编辑者提供了丰富的创意可能性&#xff0c…

Cesium 在加载 3dTiles 如何如何获取ID

文章目录 问题分析问题 加载的 3dTiles 打印content.getFeature(i)出来后如图所示,想获取到id值 分析 var tileset = mapLayer.init3dTileLayer({url:it.url,maximumMemoryUsage: it.maximumMemoryUsage,

python查找支撑数 青少年编程电子学会python编程等级考试三级真题解析2022年3月

目录 python查找支撑数 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python查找支撑数 2022年3月 python编程等级考试级编程题 一、题目要求…

金融科技:重塑用户体验,驱动满意度飙升

随着科技的飞速发展&#xff0c;金融科技&#xff08;FinTech&#xff09;已经深入到我们生活的每一个角落&#xff0c;从日常支付到投资理财&#xff0c;再到跨境汇款&#xff0c;它都在悄无声息地改变着我们的金融行为。而在这背后一个不可忽视的驱动力就是金融科技对用户体验…

kubernetes给指定用户分配调用k8s的api权限

文章目录 概要利用RBAC添加角色权限使用shell命令创建角色权限使用配置文件创建角色权限 调用k8s的api获取k8s账户的token 小结 概要 使用kubernetes部署项目时&#xff0c;有些特殊场景&#xff0c;我们需要在自己创建的pod里面调用k8s的api来管理k8s&#xff0c;但是需要使用…

Ubuntu24.04之安装KVM(二百五十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

牛客小白月赛97:D走一个大整数迷宫

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 给一个 nmn\times mnm 矩阵迷宫&#xff0c; 第 iii 行第 jjj 列的值为 ci,jc_{i,j}ci,j​ &#xff0c;LHLHLH 在迷宫中迷路了&#xff0c;他需要你的帮助。 LHLHLH 当前在 (1,1)(1…

Linux基础 - Samba 或 NFS 实现文件共享

目录 零. 简介 一. Samba 二. NFS 三. 总结 零. 简介 在 Linux 系统中&#xff0c;Samba 和 NFS 是两种常见的用于实现文件共享的方式&#xff0c;它们各有特点。 Samba 主要用于在 Linux 和 Windows 系统之间实现文件和打印机共享。它基于 SMB&#xff08;Server Message…

[Leetcode刷题] - 栅栏涂漆DP类问题

题目描述 这一类题目通常会问给定一组房子n和一组染料k去涂漆&#xff0c;并且会加入限制条件比如&#xff1a;某种颜色只能使用1次&#xff0c;相相邻房子不能涂同一种颜色&#xff0c;或者最多不能超过连续3个房子涂想通过颜色等等&#xff0c;让我们列举所有可能性总和&…

企智汇PaaS平台:数字化时代下的项目管理利器

企智汇项目管理系统PaaS平台是一个强大而灵活的平台&#xff0c;旨在为企业提供高效、智能的项目管理解决方案。在项目管理领域提供了显著的优势&#xff0c;这些优势主要体现在以下几个方面&#xff1a; 1.快速部署与迭代&#xff1a;企智汇一体化PaaS平台提供了预配置的基础…

代理IP如何助力旅游信息聚合?

在数字化时代&#xff0c;旅游信息聚合对于提升服务质量、优化用户体验起着至关重要的作用。随着在线旅游预订的普及&#xff0c;旅游信息的采集、整合和呈现成为了一个复杂而关键的过程。在这个过程中&#xff0c;代理IP技术以其独特的优势&#xff0c;为旅游信息聚合提供了强…

STM32介绍和资料地址

STM32标准外设软件库 https://www.st.com.cn/zh/embedded-software/stm32-standard-peripheral-libraries.html 支持标准外设库的产品系列&#xff1a;

ROS2开发机器人移动

.创建功能包和节点 这里我们设计两个节点 example_interfaces_robot_01&#xff0c;机器人节点&#xff0c;对外提供控制机器人移动服务并发布机器人的状态。 example_interfaces_control_01&#xff0c;控制节点&#xff0c;发送机器人移动请求&#xff0c;订阅机器人状态话题…

【升压电子烟方案】DC-DC电源升压恒压芯片FP6277+全极低功耗霍尔MH251在电子烟中的应用

电子烟是一种新型烟草制品&#xff0c;由于其健康、环保和口感多样化的特点&#xff0c;逐渐受到了消费者的青睐。 升压芯片作为电子烟的核心组件之一&#xff0c;主要作用是将输入的电压升高至合适的工作电压&#xff0c;霍尔传感器控制电子烟的使用状态&#xff0c;以确保电子…

【笔记】Spring Cloud Gateway 实现 gRPC 代理

Spring Cloud Gateway 在 3.1.x 版本中增加了针对 gRPC 的网关代理功能支持,本片文章描述一下如何实现相关支持.本文主要基于 Spring Cloud Gateway 的 官方文档 进行一个实践练习。有兴趣的可以翻看官方文档。 由于 Grpc 是基于 HTTP2 协议进行传输的&#xff0c;因此 Srping …

已解决java.security.acl.LastOwnerException:无法移除最后一个所有者的正确解决方法,亲测有效!!!

已解决java.security.acl.LastOwnerException&#xff1a;无法移除最后一个所有者的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 1. 检查当前所有者数量 2. 添加新的所有者 3. 维…

【Python系列】Python 中循环依赖问题及其解决方案

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

CAN和CANFD数据写入.asc文件的dll

因为工作需要&#xff0c;需要做一些硬件不是CANoe的上位机&#xff08;比如说周立功CAN,NI-CAN&#xff09;&#xff0c;上位机需要有记录数据的功能&#xff0c;所以用Qt制作了一个记录数据的dll&#xff0c;方便重复使用&#xff08;因为有的客户指定了编程软件&#xff0c;…

Spring框架整体概念

Spring框架基础概念 首先&#xff0c; 从Spring框架的整体架构和组成对整体框架有个认知。 Spring基础 - Spring和Spring框架组成 上图是从官网4.2.x获取的原图&#xff0c;目前我们使用最广法的版本应该都是5.x&#xff0c;5版本移除了Web模块中的Portlet子模块&#xff0c;新…

机器人控制系列教程之控制理论概述

经典控制理论 经典控制理论主要研究线性定常系统。所谓线性控制系统是指系统中各组成环节或元件的状态由线性微分方程描述的控制系统。如果描述该线性系统的微分方程系数是常数,则称为线性定常系统。描述自动控制系统输入量、输出量和内部量之间关系的数学表达式称为系统的数学…