如何从类路径加载 ChromeDriver 二进制文件?
How do I load the ChromeDriver binary from the classpath?
许多来源提到从类路径加载 ChromeDriver 二进制文件,但我还没有弄清楚如果二进制文件不在类路径根目录中该怎么做。
要指定二进制文件的路径,您似乎必须设置一个系统 属性 "webdriver.chrome.driver"。首先我尝试了:
System.setProperty("webdriver.chrome.driver", "drivers/Chrome/chromedriver.exe");
但是我得到了一个错误,它似乎在寻找 "C:\<working directory of my application process>\drivers\Chrome\chromedriver.exe"
位置的驱动程序。这里的工作目录其实就是我的源码所在的目录。
然后我尝试了:
System.setProperty("webdriver.chrome.driver", "/drivers/Chrome/chromedriver.exe");
然而同样的事情发生了 - 这次它正在寻找 "C:\drivers\Chrome\chromedriver.exe"
。
如何让 ChromeDriver 在使用 "webdriver.chrome.driver" 属性 或任何其他配置方式时在类路径中查找 ChromeDriver 二进制文件?
在我看来,它应该适用于以下完整路径:
System.SetProperty("webdriver.chrome.driver", @"D:/drivers/Chrome/chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("http://www.google.com");
希望对您有所帮助!
最终,我发现 ChromeDriver
不支持对其二进制文件的类路径相对访问。不过可以将classpath-relative字符串转成系统路径然后直接加载,绕过系统属性.
URL url = this.getClass().getClassLoader().getResource(classpathRelativeLocation);
File file = new File(url.getFile()); // Strangely, URL.getFile does not return a File
ChromeDriverService.Builder bldr = (new ChromeDriverService.Builder())
.usingDriverExecutable(file)
.usingAnyFreePort();
ChromeDriver driver = new ChromeDriver(bldr.build());
如果你有驱动程序,即。 chromedriver.exe
在你的类路径上,你可以使用类加载器加载资源,然后获取它的路径。同样可以作为第二个参数传递给 setProperty。例如我将文件 chromedriver.exe
放在 Java 构建路径源 文件夹 /src/main/resources
中
然后我可以使用下面的代码从类路径中选择驱动程序
public class App
{
private static final String CHROME_DRIVER_PATH=App.class.getClassLoader().getResource("chromedriver.exe").getPath();
public static void main( String[] args ) throws InterruptedException
{
System.setProperty("webdriver.chrome.driver", CHROME_DRIVER_PATH);
WebDriver driver=new ChromeDriver();
Thread.sleep(2000);
driver.close();
}
}
许多来源提到从类路径加载 ChromeDriver 二进制文件,但我还没有弄清楚如果二进制文件不在类路径根目录中该怎么做。
要指定二进制文件的路径,您似乎必须设置一个系统 属性 "webdriver.chrome.driver"。首先我尝试了:
System.setProperty("webdriver.chrome.driver", "drivers/Chrome/chromedriver.exe");
但是我得到了一个错误,它似乎在寻找 "C:\<working directory of my application process>\drivers\Chrome\chromedriver.exe"
位置的驱动程序。这里的工作目录其实就是我的源码所在的目录。
然后我尝试了:
System.setProperty("webdriver.chrome.driver", "/drivers/Chrome/chromedriver.exe");
然而同样的事情发生了 - 这次它正在寻找 "C:\drivers\Chrome\chromedriver.exe"
。
如何让 ChromeDriver 在使用 "webdriver.chrome.driver" 属性 或任何其他配置方式时在类路径中查找 ChromeDriver 二进制文件?
在我看来,它应该适用于以下完整路径:
System.SetProperty("webdriver.chrome.driver", @"D:/drivers/Chrome/chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("http://www.google.com");
希望对您有所帮助!
最终,我发现 ChromeDriver
不支持对其二进制文件的类路径相对访问。不过可以将classpath-relative字符串转成系统路径然后直接加载,绕过系统属性.
URL url = this.getClass().getClassLoader().getResource(classpathRelativeLocation);
File file = new File(url.getFile()); // Strangely, URL.getFile does not return a File
ChromeDriverService.Builder bldr = (new ChromeDriverService.Builder())
.usingDriverExecutable(file)
.usingAnyFreePort();
ChromeDriver driver = new ChromeDriver(bldr.build());
如果你有驱动程序,即。 chromedriver.exe
在你的类路径上,你可以使用类加载器加载资源,然后获取它的路径。同样可以作为第二个参数传递给 setProperty。例如我将文件 chromedriver.exe
放在 Java 构建路径源 文件夹 /src/main/resources
然后我可以使用下面的代码从类路径中选择驱动程序
public class App
{
private static final String CHROME_DRIVER_PATH=App.class.getClassLoader().getResource("chromedriver.exe").getPath();
public static void main( String[] args ) throws InterruptedException
{
System.setProperty("webdriver.chrome.driver", CHROME_DRIVER_PATH);
WebDriver driver=new ChromeDriver();
Thread.sleep(2000);
driver.close();
}
}