ChromeDriver 可在 IDE 中运行,但不能在 jar 中运行

问题描述 投票:0回答:3

因此,当我尝试使用 jar 文件中的 chromedriver 时,出现异常:

Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/chrome/ChromeDriver
    at SelJarTest.main(SelJarTest.java:13)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.chrome.ChromeDriver
    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)

但是,当我从 IDE (IntelliJ CE) 运行该程序时,它工作得很好。

这是我的 Maven 依赖项:

        <dependencies>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-chrome-driver</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.openqa.selenium.chrome.ChromeDriver</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-remote-driver</artifactId>
            <version>3.0.1</version>
        </dependency>
    </dependencies>

我的代码:

public class SelJarTest
{
    private static final String WEB_DRIVER_PROP = "webdriver.chrome.driver");
    public static void main(String[] args)
    {
          String oldProp = System.getProp(WEB_D_PROP);
          System.setProp(WEB_DRIVER_PROP, "chromedriver" + File.seperator + "chromedriver.exe");
          ChromeDriver cd = new ChromeDriver();

          System.out.println("Enter stuff: ");
          int userin;
          Scanner scan = new Scanner(System.in);
          while((userin = Integer.parseInt(scan.nextLine())) < 9)
          {
              if(userin %2 == 0)
                  cd.navigate().to("https://www.youtube.com");
          }

          scan.close();
          cd.close();
          System.clearProp(WEB_DRIVER_PROP);

          if(oldProp != null)
             System.setProp(WEB_DRIVER_PROP, oldProp);
          System.out.println("Done.");
    }
}

为了更清楚一点,chromedriver.exe 位于名为 chromedriver 的文件夹中,该文件夹与 jar 位于同一目录中:

DIR> chromedriver/chromedriver.exe
     SelJarTest.jar

我在网上找到的任何内容似乎都无法帮助解决此问题。发现与错误类似的是一堆“哦,你需要这样那样的依赖项,或者这样那样的文件。”我想避免使用环境变量,这样如果我将文件放在服务器上供我的同事使用,他们就可以运行该程序。

非常感谢任何帮助。

java maven selenium selenium-chromedriver
3个回答
0
投票

尝试添加以下硒依赖项

<scope>test</scope> 

并使用以下命令来运行测试

mvn 测试


0
投票

我遇到了同样的错误,我通过在源代码中指定驱动程序的绝对路径来解决。然后我将驱动程序文件放在所说的绝对路径中。我猜 jar 文件压缩了驱动程序文件,导致它无效。


-1
投票

我找到了解决困境的方法。我没有创建包含我需要的所有内容的 jar 文件。

我使用 IntelliJ 作为我的 IDE,我应该从具有依赖项的模块创建 Jar 工件。 项目结构 > Artfacts > 添加 > JAR > 来自具有依赖项的模块...

我的依赖最终是:

<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-chrome-driver</artifactId>
        <version>2.26.0</version>
    </dependency>
</dependencies>
© www.soinside.com 2019 - 2024. All rights reserved.