java - Intellij 中 Selenium 和 ChromeDriver 的问题
问题描述
我已经添加了 selenium jar 文件,一切似乎都很好。当我运行程序时,我得到
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/collect/ImmutableMap
at org.openqa.selenium.remote.service.DriverService$Builder.<init>(DriverService.java:259)
at org.openqa.selenium.chrome.ChromeDriverService$Builder.<init>(ChromeDriverService.java:101)
at org.openqa.selenium.chrome.ChromeDriverService.createDefaultService(ChromeDriverService.java:94)
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:123)
at sneakerbot.Main.main(Main.java:20)
Caused by: java.lang.ClassNotFoundException: com.google.common.collect.ImmutableMap
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 5 more
请帮我。我被困住并且不熟悉使用硒。我在 Mac 上,我很确定一切都是最新的。
解决方案
这是在 Java 中使用 Selenium 的最简单的代码(在 Intellyj 中工作)。看看火狐驱动路径“geckodriver”。
首先,您需要创建一个新的 maven 项目并将这个 pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>eus.ehu.selenium.tutorial</groupId>
<artifactId>TestingIzapide</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
接下来使用以下代码创建一个 Java 类:
import static org.junit.Assert.assertEquals;
import java.util.concurrent.TimeUnit;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import java.util.logging.Logger;
public class GoogleSearchTest {
private WebDriver driver;
private static final Logger LOGGER = Logger.getLogger(GoogleSearchTest.class.getName());
@Before
public void setUp() {
System.setProperty("webdriver.gecko.driver", "./src/test/resources/firefoxdriver/geckodriver.exe");
driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.get("https://www.google.com");
}
@Test
public void testGooglePage() {
String searchWord="Hello world";
WebElement searchBox = driver.findElement(By.name("q"));
searchBox.clear();
searchBox.sendKeys(searchWord);
searchBox.submit();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
LOGGER.info("Alert: TITLE: "+ driver.getTitle());
assertEquals("Google", driver.getTitle());
LOGGER.info("Alert: TITLE: "+ driver.getTitle());
}
}
希望这段代码有助于开始一个新项目。如果您是 Selenium 的新手并且熟悉 python,我建议您使用 Python,但这是个人选择...
干杯
推荐阅读
- loops - 仅返回数组中的非零元素
- docker - nginx 响应 HTTPS 但不响应 HTTP
- amazon-web-services - 使用适用于 Java 的 AWS 开发工具包生成预签名 URL
- javascript - 尝试解析仅允许数字的脚本在 Internet Explorer 11 中不起作用
- javascript - 将 for 循环转换为 forEach 循环时重新分配变量值的问题
- javascript - 你能阻止 3D 触摸但不能点击并按住保存吗?
- amazon-web-services - 当我从邮递员发送消息时如何接收参数
- android - 用于管理 Play 控制台上的测试人员的 GSuite 组
- c++ - 矢量 emplace_back 要求和 unique_ptr 成员
- elasticsearch - 如何将 InfluxDB 与 Elasticsresearch 同步?