【问题标题】:How can I include ChromeDriver in a JAR?如何在 JAR 中包含 ChromeDriver?
【发布时间】:2014-03-06 04:31:56
【问题描述】:

我正在编写一个网络自动化程序,到目前为止,它使用 Selenium 的 FirefoxDriver 运行良好。但是,如果没有安装 Firefox,我想让它使用 Chrome。我下载了 ChromeDriver,将它放在我的 Eclipse 项目中的一个文件夹中,然后运行它。在我添加System.setProperty("webdriver.chrome.driver", "Drivers/chromedriver.exe"); 之后,它运行良好。但是,当我尝试导出它时(使用 Eclipse 的标准导出)。我相信它崩溃了,因为它找不到 ChromeDriver(我认为这是因为使用 FirefoxDriver 导出它可以正常工作)。

我尝试将 .JAR 更改为 .ZIP 以查看内部,我看到 driver 文件夹已被剥离,只需将 chromedriver.exe 放在顶级 JAR 中。我尝试将属性更改为System.setProperty("webdriver.chrome.driver", "chromedriver.exe");,但仍然崩溃。

有谁知道为什么导出的 JAR 无法找到 chromeDriver,尽管我已经验证它在 JAR 中?

谢谢, 丹尼尔

【问题讨论】:

  • 这似乎有点傻,但你有“Chromedriver.exe”,但它被列为小写“chromedriver.exe”。你试过把它改成小写吗?
  • 简单的错字,现已修正。 (在我的实际代码中,它到处都是小写)
  • 澄清一下,这并不能解决您的实际问题吗?
  • 不,同样的错误仍然存​​在。我只是说我在这里修正了错字。

标签: java eclipse google-chrome selenium jar


【解决方案1】:

你必须在运行它之前解压它。 在 src/resources/drivers/chromedriver.exe 下复制您的驱动程序

现在,每当您运行此代码时,它都会在您放置 Runnable jar 并复制您可以访问的驱动程序的位置创建一个新文件夹“Driver”。

ClassLoader classLoader = getClass().getClassLoader();
                URL resource = classLoader.getResource("resources/drivers/chromedriver.exe");
                File f = new File("Driver");
                if (!f.exists()) {
                    f.mkdirs();
                }
                File chromeDriver = new File("Driver" + File.separator + "chromedriver.exe");
                if (!chromeDriver.exists()) {
                    chromeDriver.createNewFile();
                    org.apache.commons.io.FileUtils.copyURLToFile(resource, chromeDriver);
                }
                System.setProperty("webdriver.chrome.driver", chromeDriver.getAbsolutePath());
                driver = new ChromeDriver();

【讨论】:

    【解决方案2】:

    在没有 chromedriver 的情况下将您的代码导出为 jar。 创建一个文件夹 ChromeDriver。将您的 chromedriver.exe 放在此文件夹中。 将 ChromeDriver 文件夹与您的 jar 一起放置。

    另外不要忘记将代码中的System属性设置为

    System.setProperty("webdriver.chrome.driver", "ChromeDriver/chromedriver.exe"); 
    

    如果这对你有用,请告诉我。

    【讨论】:

    • 虽然我看不出这不起作用的原因,但我真的希望能够让用户只需要下载一种类型的文件。这种方法应该可以工作,尽管jar 将不再是自给自足的。
    • 这行得通。虽然它没有直接回答问题,但它是一种更优雅的方法。维护 webdriver 二进制文件应该是使用它的环境的责任,因为 JAR 可以在不同的环境/平台中执行。您可以简单地将 JAR 和 chromedriver.exe 打包到 ZIP 中。
    【解决方案3】:

    它在 Jar 中但无法执行(与尝试从 zip 文件运行 .exe 相同),您必须在运行前解压它

    【讨论】:

    • 好的,我该怎么做呢?
    • 谢谢!那行得通!我在将chromedriver 放置在哪里以便找到它时遇到了一个小问题,但是当我将它放在src 文件夹中时,这个问题得到了解决。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多