使用php,selenium和chromedriver的WebdriverCurlException

时间:2016-09-08 12:19:40

标签: php selenium curl selenium-chromedriver selenium-firefoxdriver

我使用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有问题......

1 个答案:

答案 0 :(得分:0)

使用Driver :: create创建客户端时,可以将$ request_timeout_in_ms设置为第4个参数。 E.g:

Driver::create('http://localhost:4444/wd/hub', $capabilities, 60000, 60000);

将连接和请求超时设置为60秒。