Running Chrome WebDriver on a linux server with no display Running Chrome WebDriver on a linux server with no display google-chrome google-chrome

Running Chrome WebDriver on a linux server with no display


I was facing the same challenge of setting a linux box with selenium + chromedriver,and here's my notes:

Pre-reqs:

  1. Install JRE to run the selenium jar

  2. Install the selenium server

    grab the jar file from https://code.google.com/p/selenium/downloads/list)

  3. Install xvfb (you've seem to have already achieved this part)

  4. Install google-chrome for your linux distribution

  5. Download the chrome driverYou can grab it from here: https://sites.google.com/a/chromium.org/chromedriver/downloads

  6. Install other selenium dependencies that you might need (but the above is the minimum to get chromedriver to work)

To run:

  1. Run xvfb

Xvfb :1 -screen 5 1024x768x8 &

export DISPLAY=:1.5

  1. Run the selenium server jar with ChromeDriver options.It'll look something like this:

java -jar selenium-server-standalone-2.30.0.jar -Dwebdriver.chrome.bin=/path/to/google-chrome -Dwebdriver.chrome.driver=/path/to/chromedriver

  1. The selenium server log should output something similar to this:

Mar 19, 2013 10:07:27 AM org.openqa.grid.selenium.GridLauncher main INFO: Launching a standalone server

Setting system property webdriver.chrome.bin to {location of google-chrome}

Setting system property webdriver.chrome.driver to {location of chromedriver}

10:07:34.258 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub

10:07:34.259 INFO - Version Jetty/5.1.x 10:07:34.259 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver] ...

Reference: http://www.yann.com/en/use-xvfb-selenium-and-chrome-to-drive-a-web-browser-in-php-23/08/2012.html

Cheers!


According to SetEnvironmentProperty to ChromeDriver programatically you can do the following:

service = new ChromeDriverService.Builder()    .usingChromeDriverExecutable(new File("/path/to/chromedriver"))    .usingAnyFreePort()    .withEnvironment(ImmutableMap.of("DISPLAY",":20"))    .build();

Here is the documentation for withEnvironment


I haven't been able to find a way to do this programmatically for the ChromeDriver like you can with the FirefoxBinary.

I've submitted a improvement request which has a patch attached to allow this. You can see it here: http://code.google.com/p/selenium/issues/detail?id=2673

Edit:You can see below response from Stephen on how to use this now the change has been merged.: https://stackoverflow.com/a/16619608/998442