我使用Facebook的PHP WebDriver和Selenium进行了一系列测试。我在Chrome上用phpunit运行它们。测试在Windows机器上运行,加载的页面来自Ubuntu VM。
大多数时候,一切都很好。但是,每隔一段时间,测试就会出现错误,并且在开始时会有几次失败。 Chrome窗口打开,输入所需的网址并且......没有。它“加载”约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);
}
右键单击启动selenium服务器 - >打开with-> 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有问题......
答案 0 :(得分:0)
使用Driver :: create创建客户端时,可以将$ request_timeout_in_ms设置为第4个参数。 E.g:
Driver::create('http://localhost:4444/wd/hub', $capabilities, 60000, 60000);
将连接和请求超时设置为60秒。