Selenium Error: не указано отображение
Я установил selenium-server-standalone-2.42.2.jar в виртуальном ящике debian
и установлен Firefox 29.0
и пытается запустить следующий script с 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), чтобы ввести это в командную оболочку
export PATH=:0;
Результат: у меня такая же ошибка.
2) Я установил vnc4server и получил debian-vm: 1 как приложение, затем установил export PATH=debian-vm:1
запустил его с помощью realvnc, а в средстве просмотра (которое работает) у меня возникла та же проблема.
Ответы
Ответ 1
Вы получаете эту ошибку, потому что вы не установили переменную 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
а затем вы сможете выполнить свои тесты.
Ответ 2
Конечно, сценарий - это путь, однако повторение всех возможных значений DISPLAY не так хорошо, как использование правильного значения DISPLAY. Также нет необходимости в xvfb, по крайней мере, в debian/ubuntu. Селен можно запускать локально или удаленно с использованием текущей переменной сеанса 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