ChromeDriver / Selenium-server

一、简介

ChromeDriver 是一个 WebDriver 的实现,专门用于自动化控制 Google Chrome 浏览器。以下是关于 ChromeDriver 的详细说明:
定义与作用:
        ChromeDriver 是一个独立的服务器程序,作为客户端库与 Google Chrome 浏览器之间的桥梁,允许对浏览器进行编程控制。
        它遵循 WebDriver 协议,这是一个 W3C 标准,旨在为 web 测试自动化提供平台和语言无关的 API。
主要用途包括网页自动化测试、网页数据抓取、网页应用功能自动化等场景,常与 Selenium、Appium 等自动化测试框架结合使用。
工作原理:
        当启动 ChromeDriver 时,它会创建一个 Chrome 浏览器实例,并监听一个端口以接收来自客户端(如 Selenium 或其他 WebDriver 客户端库)的 HTTP 请求。
客户端通过发送符合 WebDriver 协议的 JSON-over-HTTP 请求给 ChromeDriver,指示其执行特定的浏览器操作(如打开网页、点击元素、填写表单等)。
ChromeDriver 收到请求后,将其转换为 Chrome 浏览器内部的命令,利用 Chrome DevTools Protocol (CDP) 与浏览器交互,执行相应操作并获取结果。
执行结果返回给客户端,客户端根据响应更新对浏览器状态的认知或验证预期行为。

Selenium Server 是 Selenium 套件中的一款核心组件,主要在特定情况下作为中间代理,负责协调客户端测试脚本与浏览器(或浏览器模拟器)之间的通信。以下是对 Selenium Server 的详细介绍:
历史背景:
        Selenium RC (Remote Control):早期版本的 Selenium 提供了一个名为 Selenium RC 的工具,它通过 Selenium Server 实现对浏览器的远程控制。在这个架构中,测试脚本通过客户端库与 Selenium Server 通信,Server 接收指令后在本地或远程机器上启动浏览器,并通过注入 JavaScript 来模拟用户操作和获取页面状态。
        Selenium 2 (WebDriver):随着 WebDriver 技术的发展,Selenium RC 被逐渐取代。WebDriver 提供了一种更直接、更高效的方式来操控浏览器,无需依赖 JavaScript 注入。大多数情况下,直接使用 WebDriver 客户端库与相应的浏览器驱动(如 ChromeDriver、GeckoDriver 等)即可进行自动化测试,无需启动 Selenium Server。
当前角色与用途:
Selenium Server 在现代 Selenium 使用场景中的角色已经相对减少,但仍然在以下几种情况下发挥作用:
        远程执行:当需要在远程计算机(如云测试平台上的节点)上运行测试脚本时,可以使用 Selenium Server 作为中央调度器,接收来自本地客户端的指令并转发给远程浏览器驱动。
旧版浏览器支持:对于某些不再直接支持 WebDriver 协议的老版本浏览器,可能仍需要通过 Selenium Server(结合 legacy Selenium RC 模块)来进行自动化测试。
        HTMLUnit Driver:HTMLUnit 是一个无头(headless)的 Java 实现的浏览器模拟器。由于它不是真正的浏览器,不支持原生的 WebDriver 协议,因此在使用 HTMLUnit Driver 时,需要借助 Selenium Server 进行通信。
软件包与组件:
        selenium-server-standalone.jar:这是包含所有必要依赖的单一文件形式的 Selenium Server 发布包。只需下载并运行这个 JAR 文件即可启动 Selenium Server。
        selenium-server.jar:早期版本可能提供的仅包含核心组件的 JAR 文件,需要额外配置类路径(classpath)以包含所需的依赖库。
        selenium-java:这是一个 Maven 依赖坐标(artifact),通常指的是 Selenium Java 客户端库,用于编写测试脚本。它与 Selenium Server 本身是不同的组件,但在使用 Selenium Server 的项目中通常也会用到。
启动与配置:
        启动命令:通过 Java 命令行工具运行 java -jar selenium-server-standalone.jar 即可启动 Selenium Server。可以根据需要添加各种命令行参数来配置 Server,如指定端口、绑定 IP、启用 Grid 功能等。
        Selenium Grid:Selenium Server 同时支持充当 Selenium Grid 的 Hub 或 Node 角色。Grid 允许分布式执行测试,将测试负载分散到多台机器上的多个浏览器实例上。配置 Grid 需要额外的命令行参数,并可能需要配置文件。
        综上所述,Selenium Server 主要用于在特定情况下提供远程浏览器控制、旧版浏览器支持以及与 HTMLUnit Driver 的集成。虽然在现代 WebDriver 测试中其使用频率有所下降,但在复杂或特殊需求的自动化测试环境中,它仍然是一个重要的组成部分。

二 、ChromeDriver

ChromeDriver官网下载地址: https://chromedriver.chromium.org/

查看你浏览器的版本号。

进入ChromeDriver的下载官网,点击the Chrome for Testing availability dashboard

选择和自己的浏览器相对应的版本,将网址复制后在浏览器中粘贴就可以下载其压缩包

下载压缩包后,将其在你浏览器所在的同级目录解压

配置环境变量

运行cmd查看是否成功

三、Selenium-server

官网下载链接: https://www.selenium.dev/downloads/

这里我直接下载最新版的Selenium-server.jar包

放在没有中文件下的路径

在IDEA中点击 File  ->  Project Structure...

点击Modules -> 你所想做测试的模块 -> Dependencies 

点击"+"   JARs or Directories...

选择Selenium-server.jar包,点击“OK”

Selenium-server.jar包已被引入,点击“apply” 后点击“OK”

四、测试

在模块中新建一个测试类

    @Testpublic void main() throws InterruptedException {System.setProperty("webdriver.chrome.driver", "你的解压路径\\chromedriver.exe");WebDriver driver = new ChromeDriver();driver.get("https://www.baidu.com");  // 访问网站// ... 进行网页导航、元素操作等Thread.sleep(60000);driver.quit();  // 结束会话,关闭浏览器}

运行

(1)

或者也可以在你要做测试的的模块的pom文件中引入以下依赖:(这样可以让父模块起到集中管理依赖的作用)

		<dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.141.59</version></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>31.0.1-jre</version> <!-- 你需要的版本号可能不同 --></dependency>
  • 第一个依赖声明是针对 Selenium WebDriver 的 Java 绑定的。Selenium WebDriver 是一个用于自动化 web 浏览器交互的库,经常被用于测试 web 应用。<groupId> 是 org.seleniumhq.selenium<artifactId> 是 selenium-java,这两个字段一起确定了这个库在 Maven 仓库中的位置。<version> 字段是 3.141.59,代表了你想要使用的这个库的版本。

  • 第二个依赖声明是针对 Guava 的,这是一个由 Google 提供的 Java 核心库,提供了许多有用的工具,如集合操作、函数式编程、缓存等。<groupId> 是 com.google.guava<artifactId> 是 guava<version> 字段是 31.0.1-jre

在你的项目中添加这两个依赖声明后,Maven 会自动下载这两个库,并将它们添加到你的项目中,你就可以在你的代码中使用这两个库提供的功能了。请注意,添加这些依赖声明并不会立即改变你的项目,你需要运行 mvn clean install 或类似的命令来让 Maven 更新你的项目并下载这些库。

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

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

相关文章

R语言数据可视化:ggplot2绘图系统

ggpolt2绘图系统被称为R语言中最高大上的绘图系统&#xff0c;使用ggplot2绘图系统绘图就像是在使用语法创造句子一样&#xff0c;把数据映射到几何客体的美学属性上。因此使用ggplot2绘图系统的核心函数ggplot来绘图必须具备三个条件&#xff0c;数据data&#xff0c;美学属性…

41---音频电路设计

视频链接 音频电路设计01_哔哩哔哩_bilibili 音频电路设计 1、音频基本介绍 1.1、设备 1.1.1、音频接口 型号&#xff1a;ABA-JAK-038-K44 电脑主机上的音频输出插口&#xff0c;一个是粉色的&#xff0c;用来连接麦克风或话筒&#xff0c;一个是绿色的&#xff0c;用来连…

智能工业电脑在智慧电力中实现全程实时监控与调控

可视化编程工业电脑在化工、石油、电力等行业过程控制领域扮演着越来越重要的角色。这些基于ARM架构设计的嵌入式工业计算机凭借其高性能、低功耗以及出色的实时处理能力&#xff0c;有效提升了各行业生产过程的安全性和效率。 钡铼技术ARMxy系列采用嵌入式Linux 系统开发的产品…

YUDAO源码中的正序倒序表格ElmentUI的实现,与后端的配合?

前端展示和实现&#xff1a; 1. elmentUI表格的定义 2. JS请求参数改造 <!-- 列表 --><el-table v-loading"loading" :data"list" sort-change"handleSortChange"><el-table-column label"Expiry Date" prop"…

Vue第三方组件使用

文章目录 一、组件传值二、elementui组件使用三、fontawesome图标 一、组件传值 1、父组件与孩子组件传值 在孩子组件中定义props属性&#xff0c;里面定义好用于接收父亲数据的变量。 孩子组件是Movie Movie.vue。注意看在Movie组件里面有props对象中的title和rating属性用…

flutter ListView在TabBar在Column在SingleChildScrollView

flutter ListView在TabBar在Column在SingleChildScrollView _大数据知识库 我得到的异常为A RenderBox object must have an explicit size before it can be hit-tested. Make sure that the RenderBox in question sets its size during layout. 解决办法&#xff1a;添加w…

LMDeploy 推理部署工具

一. 大模型部署面临的挑战 1. 计算量巨大 大模型参数量巨大&#xff0c;前向推理时需要进行大量计算。 2. 内存开销巨大 大模型在推理过程中&#xff0c;以FP16为例&#xff0c;20B模型仅加载参数就需40G显存&#xff0c;175B模型更是需要350G显存。同时在推理过程中&#xff…

项目中使用消息队列改进——基于RabbitMQ

使用 RabbitMQ 实现消息队列 导入依赖 <!--AMQP依赖&#xff0c;包含RabbitMQ--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> <!--防止消息转…

Jmeter如何录制https的系统性能脚本

在使用jmeter录制性能测试脚本时&#xff0c;会遇到网站为http和https两种情况&#xff0c;略有不同&#xff0c;下面介绍一下&#xff1a; 1.Jmeter录制http 1.测试计划–>添加–>非测试元件–>HTTP(S)测试脚本记录器 【HTTP(S)测试脚本记录器】有的版本叫【HTTP代…

基于ES-EKF的LiDAR/GNSS/IMU传感器融合轨迹估计(附项目源码)

基于改进EKF的LiDAR/GNSS/IMU传感器融合轨迹估计&#xff08;附项目源码&#xff09; 算法概述PredictionCorrectionES-EKF算法融合算法实现轨迹估计实验结果 最近在研究传感器融合&#xff0c;看到一个很好的开源项目&#xff0c;适合小白学习&#xff0c;为以后做传感器融合、…

.net 6 集成NLog

.net 6 webapi项目集成NLog 上代码step 1 添加nugetstep 2 添加支持step 3 添加配置文件 结束 上代码 step 1 添加nuget 添加nuget 包 Roc step 2 添加支持 修改program.cs var builder WebApplication.CreateBuilder(args); // 添加NLog日志支持 builder.AddRocNLog();ste…

贪心算法|860.柠檬水找零

力扣题目链接 class Solution { public:bool lemonadeChange(vector<int>& bills) {int five 0, ten 0, twenty 0;for (int bill : bills) {// 情况一if (bill 5) five;// 情况二if (bill 10) {if (five < 0) return false;ten;five--;}// 情况三if (bill …

Lvs+keepalived+nginx搭建高可用负载均衡集群,爱了爱了

检查 最后启动nginx服务 135配置虚拟网卡 检查 最后启动nginx服务 Nginx.conf配置如下 关闭132的keepalived服务后 浏览器能正常访问 132在keepalived配置中加入脚本 脚本内容 132清除ipvsadm中的规则,vip不见 133收到vip 自我介绍一下&#xff0c;小编13年上海交大毕业&…

使用idea运行程序,发现控制台的中文出现乱码

修改UTF-8发现没有效果&#xff0c;寻找.idea文件夹的encodings.xml文件&#xff0c;将里面的UTF-8全部变成GBK.

了解Vue中的 computed 计算属性

目录 1. computed计算属性介绍和基础语法 1.1. 概念 1.2. 语法 2. “计算属性”和“方法”的对比 2.1. computed 计算属性 2.1.1. 作用 2.1.2. 语法 2.2. methods 方法 2.2.1. 作用 2.2.2. 语法 2.2.3. 缓存特性&#xff08;提升性能&#xff09; 3. computed 计算…

云原生:5分钟了解一下Kubernetes是什么

在当今的云计算时代&#xff0c;容器化技术变得越来越重要。它能够帮助开发者更高效地部署和管理应用程序。而Kubernetes&#xff0c;作为容器编排领域的领军者&#xff0c;正逐渐成为企业构建和管理云原生应用的核心工具。 近期将持续为大家分享Kubernetes相关知识&#xff…

sql基础语法

sql基础语法 1. 什么是MySQL1.1 RDBMS 特点1.2 sql分类1.3 数据类型1.4 适应MySQL 2. 代码顺序与后台执行顺序2.1 代码撰写顺序2.2 后台执行顺序 3. 基础查询4. 条件检索5. 分组6. 多表查询6.1 子查询&#xff08;几乎不用&#xff09;6.2 连接查询 7. 常用函数 前同事培训过相…

GitHub 仓库 (repository) Branch - SSH clone URL - Clone in Desktop - Download ZIP

GitHub 仓库 [repository] Branch - SSH clone URL - Clone in Desktop - Download ZIP 1. Branch2. SSH clone URL3. Clone in Desktop4. Download ZIPReferences 1. Branch 显示当前分支的名称。从这里可以切换仓库内分支&#xff0c;查看其他分支的文件。 2. SSH clo…

FreeGPT3.5 开源软件

GPT-3.5不需要付费&#xff0c;也不需要注册用户&#xff0c;可以直接使用了&#xff0c;官方彻底开放了API接口。 该API政策一放开&#xff0c;GitHub很快就已经出现了一个开源项目FreeGPT35&#xff0c;可以自动生成key调用GPT3.5的API接口&#xff0c;再也用不着注册账号和申…

服务器数据恢复—V7000存储raid5数据恢复案例

服务器数据恢复环境&#xff1a; P740AIXSybaseV7000存储阵列柜&#xff0c;阵列柜上有12块SAS机械硬盘&#xff08;包括1块热备盘&#xff09;。 服务器故障&#xff1a; 管理员在日常巡检过程中发现阵列柜中有一块磁盘发生故障&#xff0c;于是更换磁盘并同步数据&#xff0…