Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Running Chrome WebDriver on a linux server with no display

I'd like to run automated tests using selenium2's chrome webdriver on a linux server.

I've already set up firefox to run on the server by using Xvfb (See http://www.semicomplete.com/blog/geekery/xvfb-firefox.html) and would like to do something similar with chrome. Is this possible?

like image 627
Snukker Avatar asked Aug 11 '11 09:08

Snukker


People also ask

How do I run Chrome headless in Linux?

You can run Google Chrome in headless mode simply by setting the headless property of the chromeOptions object to True. Or, you can use the add_argument() method of the chromeOptions object to add the –headless command-line argument to run Google Chrome in headless mode using the Selenium Chrome web driver.

How do I run Chromedriver in headless mode?

New Selenium IDE Post version 59, Chrome supports headless execution. ChromeOptions class is utilized to modify the default characteristics of the browser. The addArguments method of the ChromeOptions class is used for headless execution and headless is passed as a parameter to that method.

Can you run Selenium headless?

Yes, Selenium supports headless testing. In older versions of Selenium, we used the HTMLUnitDriver mainly, a headless driver providing a Non-GUI implementation of Selenium WebDriver.


2 Answers

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 driver You 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!

like image 101
Hafiz Ismail Avatar answered Oct 06 '22 06:10

Hafiz Ismail


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

like image 25
Stephen Ostermiller Avatar answered Oct 06 '22 06:10

Stephen Ostermiller