【问题标题】:Error running PhantomJS with Selenium RemoteWebDriver使用 Selenium RemoteWebDriver 运行 PhantomJS 时出错
【发布时间】:2013-09-13 07:40:00
【问题描述】:

我使用它的默认启动命令启动一个 selenium 网格集线器,

java -jar selenium-server-standalone-2.33.0.jar -role hub

我在同一台机器上以 webdriver 模式启动 PhantomJS,例如,

phantomjs --webdriver=8080 --webdriver-selenium-grid-hub=http://127.0.0.1:4444

当 PhantomJS 启动时,我只收到“所有 'OK'”消息,

[INFO  - 2013-09-09T18:10:38.849Z] GhostDriver - Main - running on port 8080
[INFO  - 2013-09-09T18:10:38.850Z] GhostDriver - Main - registering to Selenium HUB 'http://127.0.0.1:4444' using '127.0.0.1:8080'
[INFO  - 2013-09-09T18:11:47.164Z] HUB Register - register - Registered with grid hub: http://127.0.0.1:4444/ (ok)

但如果我尝试使用那个浏览器,

driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub',
                          desired_capabilities=DesiredCapabilities.PHANTOMJS)

查看 PhantomJS 可执行文件的输出,

[INFO  - 2013-09-09T18:17:12.531Z] Session [0c5c9500-197c-11e3-8eed-b3b7a73965aa] - _decorateNewWindow - page.settings: {"XSSAuditingEnabled":false,"javascriptCanCloseWindows":true,"javascriptCanOpenWindows":true,"javascriptEnabled":true,"loadImages":true,"localToRemoteUrlAccessEnabled":false,"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.2 Safari/534.34","webSecurityEnabled":true}
[INFO  - 2013-09-09T18:17:12.531Z] Session [0c5c9500-197c-11e3-8eed-b3b7a73965aa] - page.customHeaders:  - {}
[INFO  - 2013-09-09T18:17:12.531Z] Session [0c5c9500-197c-11e3-8eed-b3b7a73965aa] - CONSTRUCTOR - Desired Capabilities: {"platform":"ANY","javascriptEnabled":true,"browserName":"phantomjs","version":""}
[INFO  - 2013-09-09T18:17:12.531Z] Session [0c5c9500-197c-11e3-8eed-b3b7a73965aa] - CONSTRUCTOR - Negotiated Capabilities: {"browserName":"phantomjs","version":"1.9.2","driverName":"ghostdriver","driverVersion":"1.0.4","platform":"mac-10.7 (Lion)-32bit","javascriptEnabled":true,"takesScreenshot":true,"handlesAlerts":false,"databaseEnabled":false,"locationContextEnabled":false,"applicationCacheEnabled":false,"browserConnectionEnabled":false,"cssSelectorsEnabled":true,"webStorageEnabled":false,"rotatable":false,"acceptSslCerts":false,"nativeEvents":true,"proxy":{"proxyType":"direct"}}
[INFO  - 2013-09-09T18:17:12.531Z] SessionManagerReqHand - _postNewSessionCommand - New Session Created: 0c5c9500-197c-11e3-8eed-b3b7a73965aa

一切似乎都很好,但是代码崩溃了:/我得到一个巨大的错误堆栈跟踪,主要是,

selenium.common.exceptions.WebDriverException: Message: u'Error forwarding the new session new session request for webdriver should contain a location header with the session.'

如果你检查网格集线器的输出,

INFO: Trying to create a new session on test slot {seleniumProtocol=WebDriver, browserName=phantomjs, maxInstances=1}
INFO: Available nodes: [host :http://127.0.0.1:8080 time out : 300000]

似乎也有问题。似乎,无论出于何种原因,网格集线器都没有从 PhantomJS 可执行文件中获取任何信息,即使它似乎它正在正确处理事情。

为了测试,我还在同一台机器上运行了一个常规的 selenium 节点,使用命令

java -jar selenium-server-standalone-2.33.0.jar -role node

如果我启动一个 Firefox RemoteWebDriver 会话(在 Python 中),使用

driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub',
                          desired_capabilities=DesiredCapabilities.FIREFOX)

一切都好。

看起来一切都设置正确,我将事情保持为“香草”并尽可能接近文档所说的内容,但在这里无法越过栅栏。

在 Java 中尝试时也会发生完全相同的错误

WebDriver driver = new RemoteWebDriver(DesiredCapabilities.phantomjs());

两个都连接的网格控制台的屏幕截图,PhantomJS 在那里运行良好,

左边是默认的 selenium 节点,右边是 PhantomJS(10.0.0.222 是我笔记本电脑的工作 IP 地址)。

我的 PhantomJS 版本是 1.9.2,而 selenium 显然是 2.33.0。

【问题讨论】:

  • 当你在浏览器上打开http://127.0.0.1:4444时,你看到你的phantomjs节点连接了吗?
  • 是的“WebDriver phantomjs”。但是当我进入配置选项卡时,phantomjs 的主机为“null”。截图:i.imgur.com/K2UxCqY.png

标签: python selenium selenium-webdriver phantomjs selenium-grid


【解决方案1】:

原来这是phantomjs 1.9.2版本中的一个bug特性。他们更新到最新的 ghostdriver (v1.4) 库,我想就是它被引入的地方。 Ghostdriver 遵守新的 Selenium 协议,使用帖子来创建会话,而不是使用位置标头。 Selenium 现在从帖子正文中的 json 中获取位置等。事实证明,您看到的错误和我一直看到的错误是因为您使用的是旧的 selenium jar,它使用旧样式的会话创建协议和新版本的 selenium。现在,您的问题的答案是 回到 phantomjs 1.9.1 将您的 selenium jar 更新到 2.35.0(请参阅下面的链接)。为了重现您的错误,我使用 ruby​​ 和 python selenium webdrivers 以及作为 hub 运行的 2.33.0 selenium jar 和作为 ghostdriver worker 运行的 phantomjs 1.9.2 进行了测试。

这是 github 问题中描述的相同错误:

https://github.com/ariya/phantomjs/issues/11610

我相信这与这个特定的提交有关。您可以看到“位置”的标题已被删除。

https://github.com/detro/ghostdriver/commit/60bf3c90aa825cc3db4fa899b6a67bb7f109d55d

以下是上述提交所针对的问题的描述: https://github.com/detro/ghostdriver/issues/247

从那里你可以看到这是一个让事情与 selenium-webdrivers 最新协议一起工作的修复: “新规格:https://code.google.com/p/selenium/wiki/JsonWireProtocol#/session Selenium 的变化:https://code.google.com/p/selenium/source/detail?r=8c3c65772d57"

看起来也像更新到最新的 selenium-webdriver-standalone jar 将允许您使用 1.9.2。我已经确认我的 ruby​​ webdriver 现在可以与 2.35.0 jar 和 phantomjs 1.9.2 成功连接。

您可以在这里获取最新的 jar:

https://code.google.com/p/selenium/downloads/detail?name=selenium-server-standalone-2.35.0.jar&can=2&q=

【讨论】:

  • 我已经用 phantomjs 1.9.2 + selenium 2.35.0 和 phantomjs 1.9.1 + selenium 2.33.0 进行了测试,但我仍然得到这个错误。我使用 phantomjs 的 i686 版本,因为我有一个 x86 ubuntu。您还有其他想法吗?
  • 有趣的是,如果我在同一台机器上运行量角器、selenium 独立服务器 2.35.0 和 phantomjs 1.9.2,它可以工作,但是如果我在远程机器上运行量角器,selenium 会挂在“正在尝试”在测试槽上创建一个新会话”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多