【问题标题】:Getting WebDriver working with Firefox让 WebDriver 与 Firefox 一起工作
【发布时间】:2016-12-13 17:02:55
【问题描述】:

在 Vagrant 中使用 Laravel 5+。

我使用硒运行:

java -jar vendor/se/selenium-server-standalone/bin/selenium-server-standalone.jar -Dwebdriver.firefox.bin="/usr/bin/firefox"

使用无头显示器:

sudo Xvfb :10 -ac

但是当我运行 codeception 时:

 ./vendor/bin/codecept run selenium --steps

我收到以下错误:

[Facebook\WebDriver\Exception\UnknownServerException] 45000 毫秒后无法连接到端口 7055 上的主机 127.0.0.1。火狐控制台输出: 错误:GDK_BACKEND 与可用显示不匹配

我对我应该使用的服务器和端口感到困惑。 目前我通过http://localhost:8000访问网站 然而那是在流浪之外。

我观察到$url = 'http://localhost:4444/wd/hub',里面api\vendor\facebook\webdriver\lib\Remote\RemoteWebDriver.php

作为错误输出:

127.0.0.1 在端口 7055 上。

【问题讨论】:

  • 我最终试图让验收测试工作,这样我就可以测试我的角度元素

标签: selenium webdriver codeception


【解决方案1】:

切换到 chrome 网络驱动程序,不那么复杂,更兼容并且对我来说很好。

  1. 下载 chrome webdriver 或 composer 要求
  2. 设置环境

    nohup sudo Xvfb :10 -ac &

    导出 DISPLAY=:10

    java -jar vendor/se/selenium-server-standalone/bin/selenium-server-standalone.jar -Dwebdriver.chrome.bin="/usr/bin/google-chrome" -Dwebdriver.chrome.driver="供应商/bin/chromedriver”

【讨论】:

  • 为什么这是公认的答案? “使用 chrome”绝对不是“让 WebDriver 与 Firefox 一起工作”的有效答案
  • “为什么这是公认的答案??”不是答案,当您找到更好的解决方案时,发布它。
  • 您的回答对某些人来说是一种可能的解决方法,但绝不是对所提出问题的回答。如果有人需要让 Firefox 正常工作,那么如何解释如何使用 Chrome 来解决这个问题?不应奖励发布不相关变通办法的人。仅仅因为您使用与您所要求的无关的东西解决了自己的问题,并不能使其成为正确的答案。毕竟这是一个问答网站。
【解决方案2】:

实际上,当您运行selenium-server-standalone.jar 时,您应该从系统下载最新的geckodriver from here 并设置属性Dwebdriver.gecko.driver 以及下载的geckodriver 路径:

java -jar vendor/se/selenium-server-standalone/bin/selenium-server-standalone.jar -Dwebdriver.firefox.bin="/usr/bin/firefox" -Dwebdriver.gecko.driver = "path/to/downloaded geckodriver 

注意:就像其他浏览器供应商提供给Selenium 的其他驱动程序一样,Mozilla 发布了一个可执行文件geckodriver,它将与最新的 firefox 浏览器一起运行。更多信息请follow this link

现在您需要在 api\vendor\facebook\webdriver\lib\Remote\RemoteWebDriver.php 内的 RemoteWebDriver 初始化期间将 marionette 的功能设置为 true 为:

$capabilities->setCapability('marionette', true);

完整示例代码:

$host = 'http://localhost:4444/wd/hub';
$capabilities = DesiredCapabilities::firefox();
$capabilities->setCapability('marionette', true);
$driver = RemoteWebDriver::create($host, $capabilities, 5000);

【讨论】:

  • 为什么要使用壁虎驱动?
  • 这应该在哪一行? $capabilities->setCapability('marionette', true);
  • 因为最新的firefox浏览器Mozilla发布了一个可执行的geckodriver,没有这个可执行文件你不能用最新的浏览器运行..:)
  • 如果你不想使用 geckodriver,你需要降级你的 firefox 版本...:)
  • 这个能力->setCapability('marionette', true);行告诉 webdriver 找到 geckodriver 可执行文件来运行 firefox 浏览器..:)
猜你喜欢
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 1970-01-01
  • 2016-10-06
  • 2011-11-30
  • 2014-02-19
相关资源
最近更新 更多