如何从类路径加载 ChromeDriver 二进制文件?

Kid*_*rla 7 java webdriver classpath selenium-chromedriver

许多资料来源都提到从类路径加载 ChromeDriver 二进制文件,但我还没有弄清楚如果二进制文件不在类路径根目录中如何执行此操作。

要指定二进制文件的路径,您似乎必须设置系统属性“webdriver.chrome.driver”。首先我尝试:

System.setProperty("webdriver.chrome.driver", "drivers/Chrome/chromedriver.exe");
Run Code Online (Sandbox Code Playgroud)

但我得到了一个错误,它似乎正在寻找该位置的驱动程序"C:\<working directory of my application process>\drivers\Chrome\chromedriver.exe"。这里的工作目录实际上是我的源代码存放的目录。

然后我尝试:

System.setProperty("webdriver.chrome.driver", "/drivers/Chrome/chromedriver.exe");
Run Code Online (Sandbox Code Playgroud)

然而同样的事情发生了——这次它正在寻找"C:\drivers\Chrome\chromedriver.exe"

使用“webdriver.chrome.driver”属性或任何其他配置方式时,如何让 ChromeDriver 在类路径上查找 ChromeDriver 二进制文件?

Kid*_*rla 5

最终,我发现它ChromeDriver不支持对其二进制文件进行类路径相对访问。但是,您可以将类路径相对字符串转换为系统路径,然后直接加载它,绕过系统属性。

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());
Run Code Online (Sandbox Code Playgroud)