【发布时间】:2015-01-06 23:04:42
【问题描述】:
我正在尝试使用 Selenium 的 javascript 功能在 Behat / Mink 中创建一个自定义场景,但我遇到了一个特殊的问题。我已将所有内容都剥离到最简单的基础上,以尽可能简单地解决问题,但总而言之,在 Selenium 中调用 visit() 时,一些网站运行良好,但其他网站(包括我自己的)返回错误“与远程通信时出错浏览器。它可能已经死了。”以终止场景。
详细说明:
我的 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");
但是这次我得到了完全相同的错误:'与远程浏览器通信时出错。它可能已经死了。诡异的。所以我尝试了许多其他网站,有些工作正常,有些则返回此错误。那些杀死 Selenium 的网站和那些没有杀死 Selenium 的网站之间似乎没有任何明显的相似之处。那么 Selenium 在说什么?
来自返回“它可能已经死亡”错误的站点的输出:
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])
来自不返回错误的站点的输出:
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 的“获取”这一事实之外,没有任何线索。那么 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 的 java webdriver 实现时,我有时会遇到类似的问题。大多数情况下,它的 webdriver 版本与使用的浏览器不兼容。您是否尝试使用其他浏览器运行?并且可能将您的 selnium 库和浏览器都更新到最新版本。
-
少校,你的传奇。我将 Firefox 从 33 更新到 34,瞧,一切正常。