Я провел серию тестов, используя PHP WebDriver и Selenium. Я запускаю их с phpunit на Chrome. Тесты выполняются на компьютере с Windows, а загруженные страницы — с виртуальной машины Ubuntu.
В большинстве случаев все работает отлично. Тем не менее, время от времени тесты будут впечатляюще давать сбой, когда несколько проваливаются в самом начале. Откроется окно Chrome, введите желаемый URL и … ничего. Он «загружается» около 30 секунд, а затем печатает следующее:
Facebook\WebDriver\Exception\WebDriverCurlException: Curl error thrown for http GET to /session/d86523c4-6b25-4e61-bc2c-bc0cd3e615f4/title
Operation timed out after 30000 milliseconds with 0 bytes received
E:\dev\foldername\vendor\facebook\webdriver\lib\Exception\WebDriverException.php:92
E:\dev\foldername\vendor\facebook\webdriver\lib\Remote\HttpCommandExecutor.php:320
E:\dev\foldername\vendor\facebook\webdriver\lib\Remote\RemoteWebDriver.php:547
E:\dev\foldername\vendor\facebook\webdriver\lib\Remote\RemoteWebDriver.php:227
E:\dev\foldername\vendor\facebook\webdriver\lib\WebDriverExpectedCondition.php:60
E:\dev\foldername\vendor\facebook\webdriver\lib\WebDriverWait.php:60
E:\dev\foldername\tests\FunctionalTestBase.php:44
E:\dev\foldername\tests\ReorderQuestionsTest.php:18
Это также иногда будет публиковать это:
Facebook\WebDriver\Exception\WebDriverCurlException: Curl error thrown for http POST to /session/be8e5886-7d05-4eb5-a798-143fb7ed3b30/url with params: {"url":"http:\/\/app.name.test"}
Operation timed out after 30000 milliseconds with 0 bytes received
E:\dev\foldername\vendor\facebook\webdriver\lib\Exception\WebDriverException.php:92
E:\dev\foldername\vendor\facebook\webdriver\lib\Remote\HttpCommandExecutor.php:320
E:\dev\foldername\vendor\facebook\webdriver\lib\Remote\RemoteWebDriver.php:547
E:\dev\foldername\vendor\facebook\webdriver\lib\Remote\RemoteWebDriver.php:195
E:\dev\foldername\tests\FunctionalTestBase.php:40
E:\dev\foldername\tests\TypeChangeWithRoute2Test.php:18
Использование Phpunit 5.5.4, Php 7.0.10, Selenium server 2.53.1, Chromedriver 2.23, Chrome 53.0.2785.89.
Вещи, которые я пробовал:
Обновление ChromeDriver до версии 2.9 (представляет другую проблему, но не устраняет ее).
Добавление таймаута после вызова $ webDriver-> get ($ this-> url).
Добавление этого:
try{
$this->webDriver->wait(5)->until(Condition::titleIs('Login'));
}catch(TimeOutException $e){
$this->webDriver->get($this->url);
}
Запуск сервера селена с правой кнопкой мыши -> открыть с помощью -> Java вместо команды java -jar
Я нашел упоминание о настройке DBUS_SESSION_BUS_ADDRESS = / dev / null, но я не могу найти, где это добавить.
Моя функция настройки:
$capabilities = Capabilities::chrome();
$this->webDriver = Driver::create('http://localhost:4444/wd/hub', $capabilities);
$this->webDriver->manage()->window()->maximize();
$this->webDriver->get($this->url);
try{
$this->webDriver->wait(2)->until(Condition::titleIs('Login'));
}catch(TimeOutException $e){
$this->webDriver->get($this->url);
}
Моя функция демонтажа:
$this->webDriver->quit();
Я потерян на том, что делать. Я не могу использовать тест, который не проходит случайно.
Я также пытался
try {
$this->webDriver->get($this->url);
} catch (WebDriverCurlException $e) {
$this->tearDown();
$this->setUp();
}
ОБНОВИТЬ:
Ну, у меня та же проблема с Firefox, но не с PhantomJS. Я предполагаю, что что-то не так с Selenium Server 2.53 …
Вы можете установить $ request_timeout_in_ms в качестве 4-го параметра при создании клиента с помощью Driver :: create.
Например.:
Driver::create('http://localhost:4444/wd/hub', $capabilities, 60000, 60000);
установит соединение и время ожидания запроса до 60 секунд.
Других решений пока нет …