Selenium 'dies' 使用 Behat / Mink 访问某些网站时

Selenium 'dies' when visiting some websites using Behat / Mink

我正在尝试使用 Selenium 的 javascript 功能在 Behat / Mink 中创建一个自定义场景,但我遇到了一个特殊的障碍。我已经将所有内容剥离到最基本的部分,以尽可能简单地解决问题,但总而言之,在 Selenium 中调用 visit() 时,一些网站运行良好但其他网站(包括我自己的)return 错误 "Error communicating with the remote browser. It may have died." 终止场景。

详细:

我的 behat.yml 文件如下所示:

default:
  paths:
   features: features
   bootstrap: %behat.paths.features%/bootstrap
extensions:
  Behat\MinkExtension\Extension:
    base_url: http://www.foo.bar
    goutte: ~
    selenium2:
      browser: 'firefox'

在我的 FeatureContext.php 文件中,我有以下自定义函数:

public function iAmLoggedIn()
{
    $session = $this->getSession();
    $session->visit("http://www.foo.bar");
{

现在,当我在 Behat 中运行使用自定义函数的场景时,出现以下错误:

PHP Fatal error:  Uncaught exception 'WebDriver\Exception\UnknownError' with message 'Error communicating with the remote browser. It may have died.
Build info: version: '2.44.0', revision: '76d78cf', time: '2014-10-23 20:02:37'
Driver info: driver.version: EventFiringWebDriver' in /var/www/behat/vendor/instaclick/php-webdriver/lib/WebDriver/Exception.php:157
Stack trace:
#0 /var/www/behat/vendor/instaclick/php-webdriver/lib/WebDriver/AbstractWebDriver.php(140):     WebDriver\Exception::factory(13, 'Error communica...')
#1 /var/www/behat/vendor/instaclick/php-webdriver/lib/WebDriver/Session.php(151): WebDriver\AbstractWebDriver->curl('DELETE', '')
#2 /var/www/behat/vendor/behat/mink-selenium2-driver/src/Behat/Mink/Driver/Selenium2Driver.php(292): WebDriver\Session->close()
#3 /var/www/behat/vendor/behat/mink/src/Behat/Mink/Session.php(70): Behat\Mink\Driver\Selenium2Dri in /var/www/behat/vendor/behat/mink-selenium2-driver/src/Behat/Mink/Driver/Selenium2Driver.php on line 294

但奇怪的是:认为这可能是我网站的问题 (www.foo.bar) 我通过编辑函数上的行尝试了另一个网站:

$session->visit("http://www.bbc.co.uk");

这次没有错误,场景继续正常。好老的英国广播公司。为了确保我也尝试了 Goole:

$session->visit("http://www.google.com");

但是这次我得到了完全相同的错误:'Error communicating with the remote browser. It may have died.'。诡异的。所以我尝试了一些其他网站,一些工作正常,其他人 return 这个错误。那些杀死 Selenium 的网站和那些没有杀死 Selenium 的网站之间似乎没有任何明显的相似之处。那么 Selenium 在说什么?

来自 return 出现 'It may have died' 错误的站点的输出:

11:41:41.428 INFO - Executing: [new session: Capabilities [{platform=ANY, browserVersion=8, browserName=firefox, deviceType=tablet, selenium-version=2.31.0, name=Behat test, browser=firefox, deviceOrientation=portrait, max-duration=300, version=8}]])
11:41:41.430 INFO - Creating a new session for Capabilities [{platform=ANY, browserVersion=8, browserName=firefox, deviceType=tablet, selenium-version=2.31.0, name=Behat test, browser=firefox, deviceOrientation=portrait, max-duration=300, version=8}]
11:41:44.024 INFO - Done: [new session: Capabilities [{platform=ANY, browserVersion=8, browserName=firefox, deviceType=tablet, selenium-version=2.31.0, name=Behat test, browser=firefox, deviceOrientation=portrait, max-duration=300, version=8}]]
11:41:44.031 INFO - Executing: [get: http://www.foo.bar//])
11:41:50.478 INFO - Executing: [delete all cookies])
11:41:50.494 INFO - Executing: [delete session: cee7cfa5-bc53-4804-a9a4-f6b52b0f48df])

来自没有 return 错误的站点的输出:

11:19:19.930 INFO - Executing: [new session: Capabilities [{platform=ANY, browserVersion=8, browserName=firefox, deviceType=tablet, selenium-version=2.31.0, name=Behat test, browser=firefox, deviceOrientation=portrait, max-duration=300, version=8}]])
11:19:19.936 INFO - Creating a new session for Capabilities [{platform=ANY, browserVersion=8, browserName=firefox, deviceType=tablet, selenium-version=2.31.0, name=Behat test, browser=firefox, deviceOrientation=portrait, max-duration=300, version=8}]
11:19:24.607 INFO - Done: [new session: Capabilities [{platform=ANY, browserVersion=8, browserName=firefox, deviceType=tablet, selenium-version=2.31.0, name=Behat test, browser=firefox, deviceOrientation=portrait, max-duration=300, version=8}]]
11:19:24.614 INFO - Executing: [get: http://www.bbc.co.uk/])
11:19:43.454 INFO - Done: [get: http://www.bbc.co.uk/]
11:19:43.463 INFO - Executing: [delete all cookies])
11:19:46.263 INFO - Done: [delete all cookies]
11:19:49.935 INFO - Executing: [delete all cookies])
11:19:49.955 INFO - Done: [delete all cookies]
11:19:50.389 INFO - Executing: [delete session: a092aa77-ad26-4f6f-8fc1-f290b688d7fa])
11:19:50.488 INFO - Done: [delete session: a092aa77-ad26-4f6f-8fc1-f290b688d7fa]

除了 Selenium 完成 bbc.co.uk 而不是 foo.bar 的 'get' 之外,没有任何线索。那么 foo.bar 的访问日志呢?他们看起来很正常:

10.179.?.? - - [06/Jan/2015:10:52:57 +0000] "GET / HTTP/1.1" 401 486 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0"
10.179.?.? - tester [06/Jan/2015:10:52:57 +0000] "GET / HTTP/1.1" 200 33141 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0"
10.179.?.? - tester [06/Jan/2015:10:53:00 +0000] "GET /css/page_specific_css/index.css HTTP/1.1" 200 10234 "http://www.foo.bar/" "Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0"
10.179..?.? - tester [06/Jan/2015:10:53:00 +0000] "GET /library/jquery-tools.min.js HTTP/1.1" 200 5920 "http://www.foo.bar/" "Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0"

10.179.?.?作为 CI 服务器的 IP,因此它与服务器通信正常并检索所有资产。所以我不确定这是 Selenium 问题还是 Behat / Mink 问题,但我不知所措。似乎没有任何合乎逻辑的原因可以说明为什么某些网站有效而其他网站无效。任何帮助将不胜感激。

当我的 selenium 库和浏览器版本不兼容时,我会遇到这个问题。在这种情况下,最好将您的浏览器和 selenium 库都更新到最新版本。