java - 从 jar 读取资源未按预期工作

标签 java selenium jar resources packaging

我正在尝试为 Selenium 测试创建一个可执行 jar。代码需要做的部分事情是设置一个系统属性来告诉 Selenium 在哪里可以找到驱动程序可执行文件(我正在使用 chromedriver)。文件结构如下:

src
   com
      mycompany
           SeleniumTest.java
   chromeDriver
      windows
         chromedriver.exe

代码如下:

private static String WINDOWS_DRIVER = "/chromeDriver/windows/chromedriver.exe";
System.setProperty("webdriver.chrome.driver",
                    SeleniumTest.class.getResource(WINDOWS_DRIVER).getFile());

当在 eclipse 中执行时,此代码工作正常。但是,当我导出到可运行的 jar 文件(从 eclipse)时,出现以下错误:

Exception in thread "main" java.lang.IllegalStateException: The driver executable 
    does not exist: F:\temp\file:\F:\temp\seleniumTest.jar!\chromeDriver\windows\chromedriver.exe
at com.google.common.base.Preconditions.checkState(Preconditions.java:177)
    at org.openqa.selenium.remote.service.DriverService.checkExecutable(DriverService.java:117)
    at org.openqa.selenium.remote.service.DriverService.findExecutable(DriverService.java:112)
    at org.openqa.selenium.chrome.ChromeDriverService.createDefaultService(ChromeDriverService.java:75)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:139)

然而,seleniumTest.jar 存在于 F:\temp 中,错误消息指定的 jar 内的路径也是如此。

关于错误的任何想法或尝试建议?我尝试将斜杠更改为反斜杠,并且(只是作为测试)对路径进行硬编码(例如,将系统属性设置为 F:\temp\seleniumTest.jar!\chromeDriver\windows\chromedriver.exe),但两者都不起作用。

最佳答案

系统属性应该包含文件系统文件的路径,可以在其中找到并执行驱动程序。

驱动程序不是文件。这是你的 jar 文件的一个条目。无法执行捆绑在 jar 文件中的可执行文件。

如果你真的想将驱动程序捆绑到你的jar文件中并执行它,那么你必须从这个类路径资源中读取字节,将它们写入临时可执行文件,然后告诉selenium这个临时可执行文件在哪里位于。

关于java - 从 jar 读取资源未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23960849/

相关文章:

java - 在 Eclipse 中获取 Xively 数据流

java - 在java中加入来自同一对象的2个流

php - 使用 PHP-Webdriver 在 Selenium 2 中的框架之间切换

java - 如何远程调用 RESTful web 服务

java - Switch 语句用于根据用户输入确定字母等级(十进制)

javascript - 使用 nightwatch.js 断言 webelements 列表的文本值

node.js - 使用 Node.js 进行测试自动化

java - 将 Android 项目转换为 JAR 文件

java - SNMP4J.jar - java.lang.ClassNotFoundException

java - Tomcat:热部署新 jar