Webdriver:ChromeDriver:从框架Jar文件中访问



我正在Java中使用selenium Web驱动程序开发一个框架。我有两个特立独行的项目。一个用于框架,另一个用于测试项目。

为了启动ChromeDriver,我需要用ChromeDriver.exe文件的路径设置系统属性。我在框架项目的/src/main/java中的DriverFactory.java中做这件事。现在,如果我将exe文件放在src/main/resources/drivers中,Java会抱怨找不到该文件。代码为:

private static String chromeDriverLocation = "drivers/chromedriver.exe";
File cDriver = new File(DriverFactory.class.getResource(chromeDriverLocation).getFile());
// Is it executable
  if (!cDriver.canExecute()) {
     cDriver.setExecutable(true);
  }
  System.setProperty("webdriver.chrome.driver", DriverFactory.class.getResource(chromeDriverLocation).getFile());

我试着把这个文件放在测试项目的src/main/resources/drivers中,并修改了如下代码:

private static String chromeDriverLocation = System.getProperty("user.dir")+ "\classes\drivers\chromedriver.exe";
System.setProperty("webdriver.chrome.driver", chromeDriverLocation);

尽管上面的代码在通过Jenkins(Maven)执行时可以在本地工作,但我不确定这是否是最好的方式。有人能提出其他实现这一目标的好方法吗?

作为一个选项,您可以将chromedriver.exe文件放置到添加到PATH的目录中。在这种情况下,运行ChromeDriver就像创建一个new ChromeDriver()实例一样简单,而不需要处理系统属性。

如果您仍然想将chromedriver.exe存储在参考资料下,您可以将其作为steam,保存到文件中并设置"webdriver.chrome.driver"属性:

InputStream in = getClass().getResourceAsStream("chromedriver.exe");
OutputStream out = new FileOutputStream("chromedriver.exe");
IOUtils.copy(in, out);

最新更新