I'm on EC2 instance. So there is no GUI.
$pip install selenium
$sudo apt-get install firefox xvfb
Then I do this:
$Xvfb :1 -screen 0 1024x768x24 2>&1 >/dev/null &
$DISPLAY=:1 java -jar selenium-server-standalone-2.0b3.jar
05:08:31.227 INFO - Java: Sun Microsystems Inc. 19.0-b09
05:08:31.229 INFO - OS: Linux 2.6.32-305-ec2 i386
05:08:31.233 INFO - v2.0 [b3], with Core v2.0 [b3]
05:08:32.121 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub
05:08:32.122 INFO - Version Jetty/5.1.x
05:08:32.123 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
05:08:32.124 INFO - Started HttpContext[/selenium-server,/selenium-server]
05:08:32.124 INFO - Started HttpContext[/,/]
05:08:32.291 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@1186fab
05:08:32.292 INFO - Started HttpContext[/wd,/wd]
05:08:32.295 INFO - Started SocketListener on 0.0.0.0:4444
05:08:32.295 INFO - Started org.openqa.jetty.jetty.Server@1ffb8dc
Great, everything should work now, right?
When I run my code:
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
browser = webdriver.Firefox()
browser.get("http://www.yahoo.com")
I get this:
Error: cannot open display: :0
The easiest way is probably to use xvfb-run:
xvfb-run does the whole X authority dance for you, give it a try!
You can use PyVirtualDisplay (a Python wrapper for Xvfb) to run headless WebDriver tests.
more info
You can also use xvfbwrapper, which is a similar module (but has no external dependencies):
or better yet, use it as a context manager:
If you use Maven, you can use xvfb-maven-plugin to start xvfb before tests, run them using related
DISPLAY
environment variable, and stop xvfb after all.open a terminal and run this command
xhost +
. This commands needs to be run every time you restart your machine. If everything works fine may be you can add this to startup commandsAlso make sure in your /etc/environment file there is a line
And then, run your tests to see if your issue is resolved.
All please note the comment from sardathrion below before using this.
This is the setup I use:
Before running the tests, execute:
And after the tests:
The
init.d
file I use looks like this: