如何解决带有 Java 模块的 Selenium
我有一个使用 selenium 的非常简单的代码(来自 https://www.selenium.dev/documentation/en/ 的示例):
package core;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.webdriverwait;
import java.time.Duration;
public class Main {
private static final String pathChromeDriver = "chromedriver.exe";
public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver",pathChromeDriver);
WebDriver driver = new ChromeDriver();
webdriverwait wait = new webdriverwait(driver,Duration.ofSeconds(10));
try {
driver.get("https://google.com/ncr");
driver.findElement(By.name("q")).sendKeys("cheese" + Keys.ENTER);
WebElement firstResult = wait.until(ExpectedConditions
.presenceOfElementLocated(By.cssSelector("h3")));
System.out.println(firstResult.getAttribute("textContent"));
} finally {
driver.quit();
}
}
}
而且它工作正常(除了“main”没有终止,但问题不在于那个)。
现在我正在尝试使项目模块化,因此添加 module-info.java
:
module test {
requires org.seleniumhq.selenium.api;
requires org.seleniumhq.selenium.chrome_driver;
requires org.seleniumhq.selenium.support;
}
不确定它是否重要,但我正在使用 java 16 和 maven,dependencies
用于 selenium(版本 4.0.0-alpha-5 ):
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
<version>${selenium.version}</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-support</artifactId>
<version>${selenium.version}</version>
</dependency>
现在执行失败并出现异常:
Exception in thread "main" java.lang.IllegalAccessError: superinterface check Failed: class org.openqa.selenium.remote.RemoteWebDriver (in module org.seleniumhq.selenium.remote_driver) cannot access class org.openqa.selenium.internal.FindsByXPath (in module org.seleniumhq.selenium.api) because module org.seleniumhq.selenium.api does not export org.openqa.selenium.internal to module org.seleniumhq.selenium.remote_driver
at java.base/java.lang.classLoader.defineClass1(Native Method)
at java.base/java.lang.classLoader.defineClass(ClassLoader.java:1010)
at java.base/java.lang.classLoader.defineClass(ClassLoader.java:1088)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:182)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:814)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassInModuleOrNull(BuiltinClassLoader.java:735)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:660)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:634)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182)
at java.base/java.lang.classLoader.loadClass(ClassLoader.java:519)
at java.base/java.lang.classLoader.defineClass1(Native Method)
at java.base/java.lang.classLoader.defineClass(ClassLoader.java:1010)
at java.base/java.lang.classLoader.defineClass(ClassLoader.java:1088)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:182)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:814)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassInModuleOrNull(BuiltinClassLoader.java:735)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:660)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:634)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182)
at java.base/java.lang.classLoader.loadClass(ClassLoader.java:519)
at java.base/java.lang.classLoader.defineClass1(Native Method)
at java.base/java.lang.classLoader.defineClass(ClassLoader.java:1010)
at java.base/java.lang.classLoader.defineClass(ClassLoader.java:1088)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:182)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:814)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassInModuleOrNull(BuiltinClassLoader.java:735)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:660)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:634)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182)
at java.base/java.lang.classLoader.loadClass(ClassLoader.java:519)
at test/core.Main.main(Main.java:19)
我该如何解决?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。