chromedriver 不在 Java 中实例化



我使用以下代码尝试创建一个使用Selenium的Java程序(在Eclipse Neon中)。我尝试了一大堆不同的反斜杠和正斜杠组合,例如"C://Users/talai/..."和"C:\Users\talai"等,但没有任何效果。

下面是我的代码:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Action;
import org.openqa.selenium.interactions.Actions;
import java.awt.Dimension;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.Keys;
import org.openqa.selenium.Point;
public class Run {
public static void main(String[] args) throws InterruptedException {
for(int d=0; d<20; d++)//run program d<___ times
{
//One "Play" session = 5m 15s
//One "Collect" session = ???
System.out.println("Session " +d+ " of 300 starting...");
System.setProperty("webdriver.chrome.driver", "C://Users/talai/Desktop/code/ChipCollector/chromedriver.exe");
WebDriver driver = new ChromeDriver();

这是输出:

Session 0 of 300 starting...
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/base/Function
at myVegas.Run.main(Run.java:44)
Caused by: java.lang.ClassNotFoundException: com.google.common.base.Function
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more

几句话:

  • 根据最佳做法,您不应该在没有任何适当的用例和适当硬件可用性的情况下一次打开20ChromeDriverChrome 浏览器实例。因此,您需要删除for()循环,如下所示:

    for(int d=0; d<20; d++)
    
  • Java中的系统路径通过双反斜杠(\)或单正斜杠(/)表示。两者的工作方式相同。

  • 您看到的错误说明了一切:

    Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/base/Function
    at myVegas.Run.main(Run.java:44)
    Caused by: java.lang.ClassNotFoundException: com.google.common.base.Function
    

该错误意味着java.lang.NoClassDefFoundError是由java.lang.ClassNotFoundException引发的。


什么是NoClassDefFoundError

Java 中的NoClassDefFoundError发生在Java Virtual Machine无法在运行时找到在编译时可用的特定类时。例如,如果我们解析了来自类的方法调用或访问类的任何静态成员,并且该类在运行时不可用,那么JVM将抛出NoClassDefFoundError

这清楚地表明Selenium正在尝试在运行时从导入org.openqa.selenium.chrome.ChromeDriver解析ChromeDriver类;该类不再可用。


出了什么问题:

从上述几点可以清楚地看出,相关的ClassMethods是从Run Time期间不可用的一个源Compile Time解决的。

如果存在多个源来解析ClassesMethods为:

  • 在您的项目空间中存在来自selenium-java-3.9.1 的 selenium-server-standalone-3.9.1JARJAR
  • 存在硒服务器独立-3.9.1JARMaven相关的JARs
  • 存在硒服务器独立-3.9.1JARGradle相关的JARs

溶液:

以下是解决NoClassDefFoundError的几个步骤:

  • 使用 Selenium-server-standalone-3.9.1JARselenium-java-3.9.1中的JAR
  • 如果使用构建工具(例如MavenGradle),请从Java 构建路径中删除所有外部 JARMavenGradle将下载并解析所有必需的依赖项。
  • 如果在 Java项目中使用Selenium JAR,则仅在Java 构建路径中添加所需的外部 JAR,并删除未使用的JAR
  • 使用Maven时,请使用<artifactId>selenium-java</artifactId><artifactId>selenium-server</artifactId>.避免同时使用两者。
  • pom.xml中删除不需要的其他<dependency>
  • 定期清理 IDE 中的项目工作区,以便使用所需的依赖项生成项目。
  • 使用CCleaner工具定期清除操作系统琐事。
  • 当你执行一个Maven项目时,总是做maven cleanmaven install然后maven test
  • 如果您的 Web 浏览器
  • 基本版本太旧,请通过Revo 卸载程序卸载 Web 浏览器,并安装最新 GA 发布的Web 浏览器版本。

您的 JRE 找不到类。它找不到类 com.google.common.base.Function,因为您没有将其添加到类路径中。

只需根据适合的版本在项目类路径中简单添加适当的硒独立。它应该这样做。

希望它有帮助。

最新更新