Is it possible to hide the browser in Selenium RC?

I am using Selenium RC to automate some browser operations but I want the browser to be invisible. Is this possible? How? What about Selenium Grid? Can I hide the Selenium RC window also?


There are a few options:

  • You could use Selenium Grid so that the browser is opened on a completely different machine (or virtual machine) that you can then connect to via VNC or Remote Desktop Connection if you wanted to see the browser. Also, another option: if you run a Jenkins foreground process on that remote server, it can execute your test project on the desktop.

  • You can run Selenium 'headless' on Linux in XVFB. I've never tried doing this and doubt it's really worth the effort. http://www.alittlemadness.com/2008/03/05/running-selenium-headless/

  • You can wrap Selenium RC in a Windows service. http://support.microsoft.com/kb/137890 . Except that permissions constraints on later versions of windows will probably prevent Selenium from accessing the desktop like Windows 2000 used to allow us to do.

  • Another option would be to use something like WebDriver HTMLUnitDriver, which doesn't launch a 'real' browser. http://code.google.com/p/webdriver/ . Also there is a PhantomJS option as well as a 'headless Chrome' that you could use.

  • Of course there's also the option of using a service like SauceLabs, where you can get your tests to be run in the cloud. After your tests have completed you can watch a video of them running.


On Linux, you can run WebDriver in a headless (virtual) display to hide the browser. This can be done with Xvfb (X virtual framebuffer).

You can control Xvfb directly from Python code using xvfbwrapper: https://github.com/cgoldberg/xvfbwrapper

Python code for running headless would look like this:

from selenium import webdriver
from xvfbwrapper import Xvfb

display = Xvfb()
display.start()

# now Firefox will run in a virtual display. 
# you will not see the browser.
driver = webdriver.Firefox()
driver.get('http://www.google.com')

print(driver.title)
driver.quit()

display.stop()

Install dependencies on Debian/Ubuntu:

$ sudo apt-get install xvfb
$ pip install xvfbwrapper

I easily managed to hide the browser window.

Just install PhantomJS. Then, change this line:

driver = webdriver.Firefox()

to:

driver = webdriver.PhantomJS()

The rest of your code won't need to be changed and no browser will open. For debugging purposes, use driver.save_screenshot('screen.png') at different steps of your code.