基于Java的Web自动化测试安装Selenium

selenium

环境准备
前置环境节点
  1. 安装JavaJava Downloads | Oracle 中国
  2. 安装ideaidea
  3. selenium帮助文档Selenium 浏览器自动化项目 | Selenium
  4. 下载相应的浏览器driveChromeEdge
Selenium库 下载
1、构建工具Maven
<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>${selenium.version}</version>
    </dependency>
</dependencies>

关于Maven类库下载慢:更改镜像地址为阿里云

在标签<mirrors></mirrors>中添加以下内容:

<!-- 阿里云仓库 -->
<mirror>
  <id>alimaven</id>
  <mirrorOf>central</mirrorOf>
  <name>aliyun maven</name>
  <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
2、手动下载类库

Selenium 下载

1、添加jar包到库

1.1、项目结构中添加

Project Structure > Libraries > 点击+添加需要的jar包

项目结构 > 库 > 点击+添加需要的jar包

1.2、模块中新建文件夹添加

模块下一级目录中新建文件夹 libraries ,将需要的jar包拖入 > 鼠标右键 > Add as Library

2、Selenium常用的jar包

jar包简要描述
selenium-java-x.x.x.jarSelenium 的核心 Java 类库,包含 WebDriver 和相关 API 的实现。它实现了浏览器操作、等待机制、元素查找等功能。
selenium-chrome-driver-x.x.x.jar专门用于驱动 Google Chrome 浏览器。这个 JAR 包包含了 ChromeDriver 的实现,用于启动、控制和与 Chrome 浏览器进行交互。
selenium-chromium-driver-x.x.x.jar用于支持 Chromium 引擎的浏览器(如 Microsoft Edge 的 Chromium 版本)。该 JAR 包通常用于处理基于 Chromium 的浏览器,而不仅限于 Chrome。
selenium-firefox-driver-x.x.x.jar专门用于驱动 Firefox 浏览器。用于启动、控制和与 Firefox 浏览器进行交互。
selenium-edge-driver-x.x.x.jar专门用于驱动 Edge 浏览器。用于启动、控制和与 Firefox 浏览器进行交互。
selenium-api-x.x.x.jar包含 Selenium WebDriver API 的核心类和接口,所有使用 Selenium 进行浏览器自动化的程序都需要这个库。它包含了与浏览器通信、操作网页元素、执行脚本等的功能。
selenium-devtools-v94-x.x.x.jar提供与 Chrome DevTools 协议版本 94 兼容的类。DevTools 协议允许你在浏览器层级控制和监视页面,适用于调试、网络条件模拟、性能分析、自动化等操作。
selenium-http-x.x.x.jar处理 HTTP 请求和响应的库,Selenium 通过它与浏览器驱动进行通信。这个 JAR 包在底层实现了 WebDriver 与浏览器之间的通信协议。
selenium-json-x.x.x.jar提供了与 JSON 数据交互的功能,主要用于浏览器与 WebDriver 之间通过 JSON 协议进行数据传输。
selenium-support-x.x.x.jar包含 Selenium WebDriver 操作中的一些辅助功能,例如等待策略、事件监听器、元素的辅助操作等。这个包在自动化过程中起到支持作用,确保其他核心功能的正常运行。
selenium-remote-driver-x.x.x.jar提供了远程 WebDriver 的支持,可以让 Selenium 通过远程服务器(如 Selenium Grid)操作浏览器。这个 JAR 包实现了与远程浏览器实例的通信。
关于Selenium版本选择

Selenium 4.x 完全适用于Java8、Java11,也适用于Java17

Selenium 3.x 主要支持Java8及以下版本;如果使用Java11及以上推荐升级为Selenium 4.x

Java8:推荐Selenium 4.10.0

Java11及更高版本:优先使用Selenium 4.x

第一个Selenium程序
package com.linandsummer;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.edge.EdgeDriver;

public class Main {
    public static void main(String[] args) throws InterruptedException {
        // 1、使用驱动实例开启会话
        WebDriver driver = new EdgeDriver();
        // 2、在浏览器上执行操作,导航到一个网页
        driver.get("http://localhost:8080/pams/front/login.do");
        // 最大化窗口
        driver.manage().window().maximize();
        // 3、定位元素
        WebElement element = driver.findElement(By.id("loginName"));
        // 4、键入 Hello World!
        element.sendKeys("Hello World!");
        // 5、线程睡3秒后退出浏览器
        Thread.sleep(3000);
        driver.quit();
    }
}
程序可能出现的异常
1、找不到浏览器驱动

在较低版本的Selenium中,即使手动配置了系统环境变量,也可能需要显示指定驱动位置。

"C:\Program Files\Java\jdk-1.8\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2024.1.7\lib\idea_rt.jar=56988:C:\Program Files\JetBrains\IntelliJ IDEA 2024.1.7\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk-1.8\jre\lib\charsets.jar;C:\Program Files\Java\jdk-1.8\jre\lib\deploy.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk-1.8\jre\lib\javaws.jar;C:\Program Files\Java\jdk-1.8\jre\lib\jce.jar;C:\Program Files\Java\jdk-1.8\jre\lib\jfr.jar;C:\Program Files\Java\jdk-1.8\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk-1.8\jre\lib\jsse.jar;C:\Program Files\Java\jdk-1.8\jre\lib\management-agent.jar;C:\Program Files\Java\jdk-1.8\jre\lib\plugin.jar;C:\Program Files\Java\jdk-1.8\jre\lib\resources.jar;C:\Program Files\Java\jdk-1.8\jre\lib\rt.jar;C:\Users\26636\Desktop\project\java\test\target\classes;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-java\3.141.59\selenium-java-3.141.59.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-api\3.141.59\selenium-api-3.141.59.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-chrome-driver\3.141.59\selenium-chrome-driver-3.141.59.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-edge-driver\3.141.59\selenium-edge-driver-3.141.59.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-firefox-driver\3.141.59\selenium-firefox-driver-3.141.59.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-ie-driver\3.141.59\selenium-ie-driver-3.141.59.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-opera-driver\3.141.59\selenium-opera-driver-3.141.59.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-remote-driver\3.141.59\selenium-remote-driver-3.141.59.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-safari-driver\3.141.59\selenium-safari-driver-3.141.59.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-support\3.141.59\selenium-support-3.141.59.jar;C:\Users\26636\.m2\repository\net\bytebuddy\byte-buddy\1.8.15\byte-buddy-1.8.15.jar;C:\Users\26636\.m2\repository\org\apache\commons\commons-exec\1.3\commons-exec-1.3.jar;C:\Users\26636\.m2\repository\com\google\guava\guava\25.0-jre\guava-25.0-jre.jar;C:\Users\26636\.m2\repository\com\google\code\findbugs\jsr305\1.3.9\jsr305-1.3.9.jar;C:\Users\26636\.m2\repository\org\checkerframework\checker-compat-qual\2.0.0\checker-compat-qual-2.0.0.jar;C:\Users\26636\.m2\repository\com\google\errorprone\error_prone_annotations\2.1.3\error_prone_annotations-2.1.3.jar;C:\Users\26636\.m2\repository\com\google\j2objc\j2objc-annotations\1.1\j2objc-annotations-1.1.jar;C:\Users\26636\.m2\repository\org\codehaus\mojo\animal-sniffer-annotations\1.14\animal-sniffer-annotations-1.14.jar;C:\Users\26636\.m2\repository\com\squareup\okhttp3\okhttp\3.11.0\okhttp-3.11.0.jar;C:\Users\26636\.m2\repository\com\squareup\okio\okio\1.14.0\okio-1.14.0.jar" com.linandsummer.Main
Exception in thread "main" java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.edge.driver system property; for more information, see https://github.com/SeleniumHQ/selenium/wiki/MicrosoftWebDriver. The latest version can be downloaded from http://go.microsoft.com/fwlink/?LinkId=619687
	at com.google.common.base.Preconditions.checkState(Preconditions.java:847)
	at org.openqa.selenium.remote.service.DriverService.findExecutable(DriverService.java:134)
	at org.openqa.selenium.edge.EdgeDriverService.access$000(EdgeDriverService.java:37)
	at org.openqa.selenium.edge.EdgeDriverService$Builder.findDefaultExecutable(EdgeDriverService.java:90)
	at org.openqa.selenium.remote.service.DriverService$Builder.build(DriverService.java:355)
	at org.openqa.selenium.edge.EdgeDriverService.createDefaultService(EdgeDriverService.java:70)
	at org.openqa.selenium.edge.EdgeDriver.<init>(EdgeDriver.java:96)
	at com.linandsummer.Main.main(Main.java:10)

在代码中添加以下行

System.setProperty("webdriver.edge.driver", "C:\\path\\to\\msedgedriver.exe");
2、版本不一

Selenium的.class使用的是高版本的Java编译的,而当前项目使用了低于该版本的Java编译器

java: 无法访问org.openqa.selenium.By
错误的类文件: /C:/Users/26636/Desktop/project/java/test/lib/selenium-api-4.26.0.jar!/org/openqa/selenium/By.class
类文件具有错误的版本 55.0, 应为 52.0
请删除该文件或确保该文件位于正确的类路径子目录中。

Java 字节码版本对照表

Java 版本字节码版本
Java 852.0
Java 953.0
Java 1054.0
Java 1155.0
Java 1761.0

升级JDK11:[Java 下载](Java Downloads | Oracle)

降低Selenium版本:Selenium 下载,如Selenium 3.141.59

3、依赖缺失

查看解压的Selenium中是否存在类似 bin 的目录,这通常是Selenium的依赖,新版本中已经将依赖和核心类库整合在同一目录了。

ImmutableMap 是 Guava 库中用于创建和操作不可变 Map 的工具类。它的主要特点包括:

  • 不可修改(线程安全)。
  • 在创建时提供高效的性能。
  • 常用于配置、固定映射关系或需要保证安全性的场景。

Selenium 的 EdgeDriver 实现需要使用 ImmutableMap。Selenium 内部依赖了 Guava 库来处理不可变集合或其他工具类。下载相应的依赖jar包添加就好了。

"C:\Program Files\Java\jdk-1.8\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2024.1.7\lib\idea_rt.jar=51399:C:\Program Files\JetBrains\IntelliJ IDEA 2024.1.7\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk-1.8\jre\lib\charsets.jar;C:\Program Files\Java\jdk-1.8\jre\lib\deploy.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk-1.8\jre\lib\javaws.jar;C:\Program Files\Java\jdk-1.8\jre\lib\jce.jar;C:\Program Files\Java\jdk-1.8\jre\lib\jfr.jar;C:\Program Files\Java\jdk-1.8\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk-1.8\jre\lib\jsse.jar;C:\Program Files\Java\jdk-1.8\jre\lib\management-agent.jar;C:\Program Files\Java\jdk-1.8\jre\lib\plugin.jar;C:\Program Files\Java\jdk-1.8\jre\lib\resources.jar;C:\Program Files\Java\jdk-1.8\jre\lib\rt.jar;C:\Users\26636\Desktop\project\java\test\target\classes;C:\Users\26636\Desktop\project\java\test\lib\selenium-api-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-http-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-java-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-json-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-support-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-ie-driver-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-api-4.0.0-sources.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-edge-driver-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-devtools-v85-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-devtools-v93-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-devtools-v94-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-devtools-v95-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-http-4.0.0-sources.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-java-4.0.0-sources.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-json-4.0.0-sources.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-opera-driver-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-chrome-driver-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-remote-driver-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-safari-driver-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-firefox-driver-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-chromium-driver-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-support-4.0.0-sources.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-ie-driver-4.0.0-sources.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-firefox-xpi-driver-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-edge-driver-4.0.0-sources.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-devtools-v85-4.0.0-sources.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-devtools-v93-4.0.0-sources.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-devtools-v94-4.0.0-sources.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-devtools-v95-4.0.0-sources.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-opera-driver-4.0.0-sources.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-chrome-driver-4.0.0-sources.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-remote-driver-4.0.0-sources.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-safari-driver-4.0.0-sources.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-firefox-driver-4.0.0-sources.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-chromium-driver-4.0.0-sources.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-firefox-xpi-driver-4.0.0-sources.jar" com.linandsummer.Main
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/collect/ImmutableMap
	at org.openqa.selenium.edge.EdgeDriver$EdgeDriverCommandExecutor.getExtraCommands(EdgeDriver.java:65)
	at org.openqa.selenium.edge.EdgeDriver$EdgeDriverCommandExecutor.<init>(EdgeDriver.java:61)
	at org.openqa.selenium.edge.EdgeDriver.<init>(EdgeDriver.java:49)
	at org.openqa.selenium.edge.EdgeDriver.<init>(EdgeDriver.java:41)
	at org.openqa.selenium.edge.EdgeDriver.<init>(EdgeDriver.java:38)
	at com.linandsummer.Main.main(Main.java:12)
Caused by: java.lang.ClassNotFoundException: com.google.common.collect.ImmutableMap
	at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:359)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
	... 6 more

Process finished with exit code 1

Netty 是一个用于网络编程的框架,Selenium 依赖于 Netty 进行 HTTP 请求的处理。下载相应的依赖jar包添加。

"C:\Program Files\Java\jdk-1.8\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2024.1.7\lib\idea_rt.jar=59133:C:\Program Files\JetBrains\IntelliJ IDEA 2024.1.7\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk-1.8\jre\lib\charsets.jar;C:\Program Files\Java\jdk-1.8\jre\lib\deploy.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk-1.8\jre\lib\javaws.jar;C:\Program Files\Java\jdk-1.8\jre\lib\jce.jar;C:\Program Files\Java\jdk-1.8\jre\lib\jfr.jar;C:\Program Files\Java\jdk-1.8\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk-1.8\jre\lib\jsse.jar;C:\Program Files\Java\jdk-1.8\jre\lib\management-agent.jar;C:\Program Files\Java\jdk-1.8\jre\lib\plugin.jar;C:\Program Files\Java\jdk-1.8\jre\lib\resources.jar;C:\Program Files\Java\jdk-1.8\jre\lib\rt.jar;C:\Users\26636\Desktop\project\java\test\target\classes;C:\Users\26636\Desktop\project\java\test\lib\guava-33.1.0-jre.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-api-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-http-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-java-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-json-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-support-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-edge-driver-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-devtools-v95-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-chrome-driver-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-remote-driver-4.0.0.jar;C:\Users\26636\Desktop\project\java\test\lib\selenium-chromium-driver-4.0.0.jar" com.linandsummer.Main
Exception in thread "main" java.lang.NoClassDefFoundError: io/netty/util/Timer
	at org.openqa.selenium.remote.http.netty.NettyClient$Factory.createClient(NettyClient.java:163)
	at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:107)
	at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:94)
	at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:85)
	at org.openqa.selenium.remote.service.DriverCommandExecutor.<init>(DriverCommandExecutor.java:77)
	at org.openqa.selenium.chromium.ChromiumDriverCommandExecutor.<init>(ChromiumDriverCommandExecutor.java:35)
	at org.openqa.selenium.edge.EdgeDriver$EdgeDriverCommandExecutor.<init>(EdgeDriver.java:61)
	at org.openqa.selenium.edge.EdgeDriver.<init>(EdgeDriver.java:49)
	at org.openqa.selenium.edge.EdgeDriver.<init>(EdgeDriver.java:41)
	at org.openqa.selenium.edge.EdgeDriver.<init>(EdgeDriver.java:38)
	at com.linandsummer.Main.main(Main.java:12)
Caused by: java.lang.ClassNotFoundException: io.netty.util.Timer
	at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:359)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
	... 11 more
为什么推荐使用Maven
1、Maven 依赖管理

在使用 Maven 时,<dependency> 标签会告诉 Maven 你需要哪些库(JAR 文件),并且 Maven 会自动处理这个库的下载和引入【Maven 会从中央仓库下载你指定版本的库,并自动解析它的所有传递性依赖(即这个库本身依赖的其他库)】。

例如,添加以下:

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

这时,Maven 会自动为你下载 selenium-java 这个库及其所依赖的所有其他库(包括 selenium-apiselenium-supportselenium-remote-driver 等)。Maven 会解决这些依赖关系,确保所有需要的类和文件都可以正常加载。

2、手动下载 JAR 包的方式

在手动下载 JAR 包时,你需要确保自己下载了所有相关的 JAR 文件,并将它们正确地添加到项目的类路径中。如果有一个 JAR 文件缺失,或者缺少它所依赖的其他 JAR 文件,那么程序就会抛出类似于 ClassNotFoundExceptionNoClassDefFoundError 的异常。

例如,Selenium 的 selenium-java 包可能会依赖其他包(比如 guavanetty 等),如果你没有手动下载这些依赖,那么程序就无法正常运行。

程序可能出现的警告

可以尝试更新JDK版本和Selenium版本来消除警告,同时规避不必要的兼容性问题。

第一个是关于SLF4J日志框架的警告,告诉我们当前项目使用了slf4j-api,但未提供相应的依赖(如logback-classicslf4j-simple),因此,日志功能没有启用。如果不用该日志可以忽视。

第二个是关于CDP实现的警告,告诉我们找不到与我们浏览器相匹配版本的jar(selenium-devtools.jar)

CDP 是 Google Chrome 提供的一套调试协议,用于与浏览器交互,支持诸如网络监控、性能分析、JavaScript 调试等功能。Selenium 使用 CDP 来实现对 Chromium 内核浏览器(如 Google Chrome、Microsoft Edge)的高级操作。

"C:\Program Files\Java\jdk-1.8\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2024.1.7\lib\idea_rt.jar=59540:C:\Program Files\JetBrains\IntelliJ IDEA 2024.1.7\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk-1.8\jre\lib\charsets.jar;C:\Program Files\Java\jdk-1.8\jre\lib\deploy.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk-1.8\jre\lib\javaws.jar;C:\Program Files\Java\jdk-1.8\jre\lib\jce.jar;C:\Program Files\Java\jdk-1.8\jre\lib\jfr.jar;C:\Program Files\Java\jdk-1.8\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk-1.8\jre\lib\jsse.jar;C:\Program Files\Java\jdk-1.8\jre\lib\management-agent.jar;C:\Program Files\Java\jdk-1.8\jre\lib\plugin.jar;C:\Program Files\Java\jdk-1.8\jre\lib\resources.jar;C:\Program Files\Java\jdk-1.8\jre\lib\rt.jar;C:\Users\26636\Desktop\project\java\test\target\classes;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-java\4.10.0\selenium-java-4.10.0.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-api\4.10.0\selenium-api-4.10.0.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-chrome-driver\4.10.0\selenium-chrome-driver-4.10.0.jar;C:\Users\26636\.m2\repository\com\google\auto\service\auto-service-annotations\1.0.1\auto-service-annotations-1.0.1.jar;C:\Users\26636\.m2\repository\com\google\auto\service\auto-service\1.0.1\auto-service-1.0.1.jar;C:\Users\26636\.m2\repository\com\google\auto\auto-common\1.2\auto-common-1.2.jar;C:\Users\26636\.m2\repository\com\google\guava\guava\31.1-jre\guava-31.1-jre.jar;C:\Users\26636\.m2\repository\com\google\guava\failureaccess\1.0.1\failureaccess-1.0.1.jar;C:\Users\26636\.m2\repository\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;C:\Users\26636\.m2\repository\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2.jar;C:\Users\26636\.m2\repository\org\checkerframework\checker-qual\3.12.0\checker-qual-3.12.0.jar;C:\Users\26636\.m2\repository\com\google\errorprone\error_prone_annotations\2.11.0\error_prone_annotations-2.11.0.jar;C:\Users\26636\.m2\repository\com\google\j2objc\j2objc-annotations\1.3\j2objc-annotations-1.3.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-chromium-driver\4.10.0\selenium-chromium-driver-4.10.0.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-json\4.10.0\selenium-json-4.10.0.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-manager\4.10.0\selenium-manager-4.10.0.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-devtools-v112\4.10.0\selenium-devtools-v112-4.10.0.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-devtools-v113\4.10.0\selenium-devtools-v113-4.10.0.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-devtools-v114\4.10.0\selenium-devtools-v114-4.10.0.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-devtools-v85\4.10.0\selenium-devtools-v85-4.10.0.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-edge-driver\4.10.0\selenium-edge-driver-4.10.0.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-firefox-driver\4.10.0\selenium-firefox-driver-4.10.0.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-http\4.10.0\selenium-http-4.10.0.jar;C:\Users\26636\.m2\repository\dev\failsafe\failsafe\3.3.1\failsafe-3.3.1.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-ie-driver\4.10.0\selenium-ie-driver-4.10.0.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-remote-driver\4.10.0\selenium-remote-driver-4.10.0.jar;C:\Users\26636\.m2\repository\io\netty\netty-buffer\4.1.92.Final\netty-buffer-4.1.92.Final.jar;C:\Users\26636\.m2\repository\io\netty\netty-codec-http\4.1.92.Final\netty-codec-http-4.1.92.Final.jar;C:\Users\26636\.m2\repository\io\netty\netty-codec\4.1.92.Final\netty-codec-4.1.92.Final.jar;C:\Users\26636\.m2\repository\io\netty\netty-handler\4.1.92.Final\netty-handler-4.1.92.Final.jar;C:\Users\26636\.m2\repository\io\netty\netty-common\4.1.92.Final\netty-common-4.1.92.Final.jar;C:\Users\26636\.m2\repository\io\netty\netty-transport-classes-epoll\4.1.92.Final\netty-transport-classes-epoll-4.1.92.Final.jar;C:\Users\26636\.m2\repository\io\netty\netty-transport-classes-kqueue\4.1.92.Final\netty-transport-classes-kqueue-4.1.92.Final.jar;C:\Users\26636\.m2\repository\io\netty\netty-transport-native-epoll\4.1.92.Final\netty-transport-native-epoll-4.1.92.Final.jar;C:\Users\26636\.m2\repository\io\netty\netty-transport-native-kqueue\4.1.92.Final\netty-transport-native-kqueue-4.1.92.Final.jar;C:\Users\26636\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.92.Final\netty-transport-native-unix-common-4.1.92.Final.jar;C:\Users\26636\.m2\repository\io\netty\netty-transport\4.1.92.Final\netty-transport-4.1.92.Final.jar;C:\Users\26636\.m2\repository\io\netty\netty-resolver\4.1.92.Final\netty-resolver-4.1.92.Final.jar;C:\Users\26636\.m2\repository\io\opentelemetry\opentelemetry-api\1.26.0\opentelemetry-api-1.26.0.jar;C:\Users\26636\.m2\repository\io\opentelemetry\opentelemetry-context\1.26.0\opentelemetry-context-1.26.0.jar;C:\Users\26636\.m2\repository\io\opentelemetry\opentelemetry-exporter-logging\1.26.0\opentelemetry-exporter-logging-1.26.0.jar;C:\Users\26636\.m2\repository\io\opentelemetry\opentelemetry-sdk-metrics\1.26.0\opentelemetry-sdk-metrics-1.26.0.jar;C:\Users\26636\.m2\repository\io\opentelemetry\opentelemetry-extension-incubator\1.26.0-alpha\opentelemetry-extension-incubator-1.26.0-alpha.jar;C:\Users\26636\.m2\repository\io\opentelemetry\opentelemetry-sdk-logs\1.26.0-alpha\opentelemetry-sdk-logs-1.26.0-alpha.jar;C:\Users\26636\.m2\repository\io\opentelemetry\opentelemetry-api-logs\1.26.0-alpha\opentelemetry-api-logs-1.26.0-alpha.jar;C:\Users\26636\.m2\repository\io\opentelemetry\opentelemetry-api-events\1.26.0-alpha\opentelemetry-api-events-1.26.0-alpha.jar;C:\Users\26636\.m2\repository\io\opentelemetry\opentelemetry-sdk-common\1.26.0\opentelemetry-sdk-common-1.26.0.jar;C:\Users\26636\.m2\repository\io\opentelemetry\opentelemetry-sdk-extension-autoconfigure-spi\1.26.0\opentelemetry-sdk-extension-autoconfigure-spi-1.26.0.jar;C:\Users\26636\.m2\repository\io\opentelemetry\opentelemetry-sdk-extension-autoconfigure\1.26.0-alpha\opentelemetry-sdk-extension-autoconfigure-1.26.0-alpha.jar;C:\Users\26636\.m2\repository\io\opentelemetry\opentelemetry-sdk-trace\1.26.0\opentelemetry-sdk-trace-1.26.0.jar;C:\Users\26636\.m2\repository\io\opentelemetry\opentelemetry-sdk\1.26.0\opentelemetry-sdk-1.26.0.jar;C:\Users\26636\.m2\repository\io\opentelemetry\opentelemetry-semconv\1.26.0-alpha\opentelemetry-semconv-1.26.0-alpha.jar;C:\Users\26636\.m2\repository\net\bytebuddy\byte-buddy\1.14.4\byte-buddy-1.14.4.jar;C:\Users\26636\.m2\repository\org\apache\commons\commons-exec\1.3\commons-exec-1.3.jar;C:\Users\26636\.m2\repository\org\asynchttpclient\async-http-client\2.12.3\async-http-client-2.12.3.jar;C:\Users\26636\.m2\repository\org\asynchttpclient\async-http-client-netty-utils\2.12.3\async-http-client-netty-utils-2.12.3.jar;C:\Users\26636\.m2\repository\io\netty\netty-codec-socks\4.1.60.Final\netty-codec-socks-4.1.60.Final.jar;C:\Users\26636\.m2\repository\io\netty\netty-handler-proxy\4.1.60.Final\netty-handler-proxy-4.1.60.Final.jar;C:\Users\26636\.m2\repository\io\netty\netty-transport-native-epoll\4.1.60.Final\netty-transport-native-epoll-4.1.60.Final-linux-x86_64.jar;C:\Users\26636\.m2\repository\io\netty\netty-transport-native-kqueue\4.1.60.Final\netty-transport-native-kqueue-4.1.60.Final-osx-x86_64.jar;C:\Users\26636\.m2\repository\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;C:\Users\26636\.m2\repository\com\typesafe\netty\netty-reactive-streams\2.0.4\netty-reactive-streams-2.0.4.jar;C:\Users\26636\.m2\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;C:\Users\26636\.m2\repository\com\sun\activation\jakarta.activation\1.2.2\jakarta.activation-1.2.2.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-safari-driver\4.10.0\selenium-safari-driver-4.10.0.jar;C:\Users\26636\.m2\repository\org\seleniumhq\selenium\selenium-support\4.10.0\selenium-support-4.10.0.jar" com.linandsummer.Main
十一月 25, 2024 4:57:52 下午 org.openqa.selenium.remote.service.DriverService$Builder getLogOutput
信息: Driver logs no longer sent to console by default; https://www.selenium.dev/documentation/webdriver/drivers/service/#setting-log-output
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
十一月 25, 2024 4:57:57 下午 org.openqa.selenium.devtools.CdpVersionFinder findNearestMatch
警告: Unable to find CDP implementation matching 131
十一月 25, 2024 4:57:57 下午 org.openqa.selenium.chromium.ChromiumDriver lambda$new$4
警告: Unable to find version of CDP to use for . You may need to include a dependency on a specific version of the CDP using something similar to `org.seleniumhq.selenium:selenium-devtools-v86:4.10.0` where the version ("v86") matches the version of the chromium-based browser you're using and the version number of the artifact is the same as Selenium's.

Process finished with exit code 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-陈林浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值