1.0、java-整合selenium实现自动化测试、以及启动报错解决
【我这边用的是IDEA整合,创建 springboot 或者 maven 项目都可以嗷~】
第一步:创建一个maven项目或者springboot项目都可以,在pom.xml中导入selenium相关依赖,这个依赖其实有一点问题,继续往下看我会详细解释:
<!--selenium-java-->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.0.0</version>
</dependency>
<!-- selenium-api与 selenium-java 版本要一致 -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
<version>4.0.0</version>
</dependency>
第二步:查看一下自己浏览器版本号,【注意】这一步非常重要
方式一:在浏览器输入地址:chrome://version 进行查看
方式二:点击浏览器设置,查看浏览器版本号
第三步:进入selenium官网
安装浏览器驱动 | Selenium 如下图:安装驱动,找到自己使用的浏览器(Edge、火狐、IE、谷歌 等),点击下载进入。
进去找到和自己浏览器版本号一样的版本点击下载然后解压,【注意版本号一定要和自己浏览器的版本一样才可以,不然到时候会报错】
我的版本解压后的文件是edgedriver_win64,点进去会看到有一个msedgedriver.exe文件。
我是将edgedriver_win64直接放在D盘下。这个文件的位置可以自己随意放置,只要清楚放在哪就可以。
第四步:我找了一份QQ自动测试代码来测一测,创建一个SeleniumTest.java文件如下:
package com.hkl.test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
public class SeleniumTest {
public static WebDriver driver;
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.edge.driver", "D:\\edgedriver_win64\\msedgedriver.exe");
driver = new EdgeDriver();
//跳转到qq注册界面
driver.get("https://ssl.zc.qq.com/v3/index-chs.html");
driver.manage().window().maximize();
Thread.sleep(2000);
//输入昵称
driver.findElement(By.id("nickname")).sendKeys("123456");
//输入密码
driver.findElement(By.id("password")).sendKeys("1234567588xxx");
//输入手机号
driver.findElement(By.id("phone")).sendKeys("456789125476");
//输入验证码
driver.findElement(By.id("code")).sendKeys("1234");
//同意条款
driver.findElement(By.className("checkbox")).click();
Thread.sleep(2000);
//提交注册
driver.findElement(By.id("get_acc")).click();
}
}
解释一下:主函数中用System.setProperty是设置一下之前自己msedgedriver.exe安装的位置。
第五步:启动SeleniumTest.java主函数,发现报错了Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/internal/FindsById
说是找不到这个包,如下所示:
讲实话这里一开始,我觉得就是导入的selenium版本太高或者太低导致包导进来不全,
从而导致启动后找不到某些包某些类。
但是在我改了好几个版本之后才发现问题没那么简单,
不管我改成较新的版本还是降低版本,启动之后总是会找不到各种包。
后来查了很多资料,才发现虽然我们导入的是4.0.0版本的selenium
但是却发现实际导入的是3.x版本的selenium如下图所示:
原因是springboot的pom坐标配置覆盖了自己写的pom坐标,所以才会出现包 org/openqa/selenium/internal/FindsById 找不到的情况。
知道问题所在,接下来就是让自己的坐标覆盖默认的坐标!改动如下:
<properties>
<java.version>1.8</java.version>
<selenium.version>4.0.0</selenium.version>
</properties>
<dependencies>
<!--selenium-java-->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>${selenium.version}</version>
</dependency>
<!-- 与 selenium-java 版本要一致 -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
<version>${selenium.version}</version>
</dependency>
改动的地方为上述代码的:第3行、第11行、第17行
改动后可以检查一下,确实!实际导入的包都是4.0.0了!
第六步:改动后程序正常运行!
【注意】该问题只有在selenium与springboot一起使用时才会出现嗷~!