我正在尝试为 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/