我在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运行它并且在查看器中(可以工作)我遇到了同样的问题。
答案 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执行此操作:
$this->setDesiredCapabilities(['moz:firefoxOptions'=> ['args' => ['-headless']]]);
$this->setDesiredCapabilities(['chromeOptions'=>['args'=>['headless']]]);
有关更多硒选择,请参见php-webdriver Wiki。