Selenium错误:未指定显示

时间:2014-07-09 12:00:50

标签: firefox testing selenium

我在debian虚拟框中安装了selenium-server-standalone-2.42.2.jar

并安装了Firefox 29.0

并尝试使用phpunit运行以下脚本,phpunit是目录中唯一的文件:

<?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());
    }
}

我收到以下错误:

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

这是什么意思?

我已经多了几个线程,显然我必须做以下尝试:

1)在命令shell中输入

export PATH=:0;

结果:我得到了同样的错误。

2)我已经安装了vnc4server并将debian-vm:1作为应用程序然后设置export PATH=debian-vm:1使用realvnc运行它并且在查看器中(可以工作)我遇到了同样的问题。

4 个答案:

答案 0 :(得分:14)

您收到此错误,因为您尚未设置DISPLAY变量。以下是如何在无头机器上进行测试的指南。

您必须先安装Xvfb和浏览器:

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

然后启动Xvfb:

Xvfb &

设置DISPLAY并启动Selenium:

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

然后您就可以运行测试了。

答案 1 :(得分:4)

当然,编写脚本是可行的方法,但是迭代所有可能的DISPLAY值并不如使用正确的DISPLAY值那么好。至少在debian / ubuntu中也不需要xvfb。只要正确,Selenium可以使用当前的DISPLAY会话变量在本地或远程运行。请参阅http://thinkinginsoftware.blogspot.com/2015/02/setting-display-variable-to-avoid-no.html中的帖子,但简而言之:

# 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

答案 2 :(得分:2)

以下不是正确的变量:

$ export PATH =:0;

这定义了在哪里找到可执行文件,例如在/ bin,/ usr / local / bin中。 您正在使用X11变体,在这种情况下,:0表示DISPLAY localhost:0。 因此,您可能打算执行以下操作:

$ export DISPLAY =:0

但是正如其他人指出的那样,在该DISPLAY地址上实际上需要有一个Xserver(虚拟或其他)。您不能只是弥补一个价值,并希望它会起作用。

要查找用户有权连接到的DISPLAY列表,可以使用以下命令,然后根据以下内容设置DISPLAY变量(host:displayNumber,如果在本地主机上,则为:displayNumber):

$ xauth列表

答案 3 :(得分:0)

如今,无头设置就像将选项传递给硒浏览器驱动程序一样容易。某些操作系统似乎也支持读取环境变量MOZ_HEADLESS,因此在运行测试之前,请尝试:

export MOZ_HEADLESS=1

然后使用您正在使用的phpunit-selenium lib执行此操作:

Firefox

$this->setDesiredCapabilities(['moz:firefoxOptions'=> ['args' => ['-headless']]]);

Chrome

$this->setDesiredCapabilities(['chromeOptions'=>['args'=>['headless']]]);

有关更多硒选择,请参见php-webdriver Wiki。