Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Selenium Error: no display specified

I've installed selenium-server-standalone-2.42.2.jar in a debian virtual box

and installed Firefox 29.0

and trying to run the following script with phpunit which is the only file in the directory:

<?php
class TestLogin extends PHPUnit_Extensions_Selenium2TestCase{

    public function setUp()
    {
            $this->setHost('localhost');
            $this->setPort(4444);
            $this->setBrowser('firefox');
            $this->setBrowserUrl('http://debian-vm/phpUnitTutorial');
    }

    public function testHasLoginForm()
    {
            $this->url('index.php');

            $username = $this->byName('username');
            $password = $this->byName('password');

            $this->assertEquals('', $username->value());
            $this->assertEquals('', $password->value());
    }
}

I get the following error:

1) TestLogin::testHasLoginForm
PHPUnit_Extensions_Selenium2TestCase_WebDriverException: Unable to connect to host
127.0.0.1 on port 7055 after 45000 ms. Firefox console output:
Error: no display specified
Error: no display specified

What does this mean?

I've red several threads and apparently I had to do the following which I tried:

1)to type this in the command shell

export PATH=:0;

Result: I got the same error.

2) I've installed vnc4server and getting debian-vm:1 as a application I then set export PATH=debian-vm:1 run it with realvnc and in the viewer (which works) I got the same problem.

like image 298
Alfonso Fernandez-Ocampo Avatar asked Jul 09 '14 12:07

Alfonso Fernandez-Ocampo


2 Answers

You receive this error, because you have not set the DISPLAY variable. Here is a guide how to perform the test on a headless machine.

You have to install Xvfb and a browser first:

apt-get install xvfb
apt-get install firefox-mozilla-build

then start Xvfb:

Xvfb &

set DISPLAY and start Selenium:

export DISPLAY=localhost:0.0
java -jar selenium-server-standalone-2.44.0.jar

and then you will be able to run your tests.

like image 151
VolenD Avatar answered Sep 20 '22 19:09

VolenD


Certainly scripting is the way to go, however iterating through all possible DISPLAY values is not as good as using the right DISPLAY value. Also there is no need for xvfb at least in debian/ubuntu. Selenium can be run locally or remotely using a current DISPLAY session variable as long as it is correct. See my post in http://thinkinginsoftware.blogspot.com/2015/02/setting-display-variable-to-avoid-no.html but in short:

# Check current DISPLAY value
$ echo $DISPLAY
:0
# If xclock fails as below the variable is incorrect
$ xclock
No protocol specified
No protocol specified
Error: Can't open display: :0
# Find the correct value for the current user session
$ xauth list|grep `uname -n`
uselenium/unix:10  MIT-MAGIC-COOKIE-1  48531d0fefcd0a9bde13c4b2f5790a72
# Export with correct value
$ export DISPLAY=:10
# Now xclock runs
$ xclock
like image 45
Nestor Urquiza Avatar answered Sep 19 '22 19:09

Nestor Urquiza