selenium 2 chrome driver
Add WebDriverManager to your project:
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.1.0</version>
</dependency>
This library downloads the latest version of the WebDriver binary you need and export the proper Java system variable (webdriver.chrome.driver
, webdriver.gecko.driver
, webdriver.opera.driver
, webdriver.edge.driver
, webdriver.ie.driver
), simply using one of the following sentences respectively:
WebDriverManager.chromedriver().setup();
WebDriverManager.firefoxdriver().setup();
WebDriverManager.operadriver().setup();
WebDriverManager.edgedriver().setup();
WebDriverManager.iedriver().setup();
More info on https://bonigarcia.dev/webdrivermanager/
I am not sure about Maven but this how I set the property webdriver.chrome.driver
System.setProperty("webdriver.chrome.driver", "C:\\pathto\\my\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("http://www.google.com");
You could have a go at using the driver binary downloader maven plugin to download the driver binaries for you (https://github.com/Ardesco/selenium-standalone-server-plugin):
<plugin>
<groupId>com.lazerycode.selenium</groupId>
<artifactId>driver-binary-downloader-maven-plugin</artifactId>
<version>1.0.7</version>
<configuration>
<rootStandaloneServerDirectory>${project.basedir}/src/test/resources/selenium_standalone_binaries</rootStandaloneServerDirectory>
<downloadedZipFileDirectory>${project.basedir}/src/test/resources/selenium_standalone_zips</downloadedZipFileDirectory>
</configuration>
<executions>
<execution>
<goals>
<goal>selenium</goal>
</goals>
</execution>
</executions>
</plugin>
This will download the binaries and set a maven property that you can use in your surefire/failsafe configuration like this:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.7.2</version>
<configuration>
<systemProperties>
<!--Set properties passed in by the driver binary downloader-->
<phantomjs.binary.path>${phantomjs.binary.path}</phantomjs.binary.path>
<webdriver.chrome.driver>${webdriver.chrome.driver}</webdriver.chrome.driver>
<webdriver.ie.driver>${webdriver.ie.driver}</webdriver.ie.driver>
<webdriver.opera.driver>${webdriver.opera.driver}</webdriver.opera.driver>
</systemProperties>
<includes>
<include>**/*WebDriver.java</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
When you instantiate a new driver object the system property pointing to the driver binary location will now be set and it will just work.
Setting the webdriver.chrome.driver
system property via maven can be done by the following (and tested working):
Add
systemPropertyVariables
configuration to themaven-surefire-plugin
in yourpom.xml
. This is (typically) becausesurefire
is the caller for tests and where system properties will be set.<plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.7.1</version> <configuration> <systemPropertyVariables> <webdriver.chrome.driver>${webdriver.chrome}</webdriver.chrome.driver> </systemPropertyVariables> </configuration> </plugin>
Now define
${webdriver.chrome}
somewhere. A good start is a<properties>
section in yourpom.xml
<properties> <webdriver.chrome>/home/gede/bin/chromedriver</webdriver.chrome> </properties>
Potentially this could be done better via the use of <profiles>
like in Simon Martinelli's example