com.google.gson.stream.MalformedJsonException:使用 JsonReader.setLenient(true) 在将 Selenium Grid 节点注册到

Posted

技术标签:

【中文标题】com.google.gson.stream.MalformedJsonException:使用 JsonReader.setLenient(true) 在将 Selenium Grid 节点注册到 Hub 时接受格式错误的 JSON【英文标题】:com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON while registering Selenium Grid Node to Hub 【发布时间】:2017-12-29 00:47:57 【问题描述】:

我安装了 selenium-server-standalone-3.4.0.jar 并在我的机器 A 上运行以下命令(作为 hube):

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

运行成功。

然后,在我的机器 B(作为节点)上运行以下命令:

java -jar selenium-server-standalone-3.4.0.jar -role node -hub http://192.168.1.27:4444/grid/register

以下日志产生。如您所见,首先它已注册,然后表示它未注册。怎么可能?

> 11:35:29.561 INFO - Selenium build info: version: '3.4.0', revision: 'unknown'
> 11:35:29.562 INFO - Launching a Selenium Grid node
> 11:35:30.353 WARN - error getting the parameters from the hub. The node may end up with wrong timeouts.com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 12 path $
> 2017-07-23 11:35:30.417:INFO::main: Logging initialized @1343ms to org.seleniumhq.jetty9.util.log.StdErrLog
> 11:35:30.568 INFO - Driver provider org.openqa.selenium.ie.InternetExplorerDriver registration is skipped:
 registration capabilities Capabilities [ensureCleanSession=true, browserName=internet explorer, version=, platform=WINDOWS] does not match the current platform LINUX
> 11:35:30.568 INFO - Driver provider org.openqa.selenium.edge.EdgeDriver registration is skipped:
 registration capabilities Capabilities [browserName=MicrosoftEdge, version=, platform=WINDOWS] does not match the current platform LINUX
> 11:35:30.572 INFO - Driver class not found: com.opera.core.systems.OperaDriver
> 11:35:30.572 INFO - Driver provider com.opera.core.systems.OperaDriver registration is skipped:
Unable to create new instances on this machine.
> 11:35:30.573 INFO - Driver class not found: com.opera.core.systems.OperaDriver
> 11:35:30.575 INFO - Driver provider com.opera.core.systems.OperaDriver is not registered
> 11:35:30.585 INFO - Driver provider org.openqa.selenium.safari.SafariDriver registration is skipped:
 registration capabilities Capabilities [browserName=safari, version=, platform=MAC] does not match the current platform LINUX
> 2017-07-23 11:35:30.729:INFO:osjs.Server:main: jetty-9.4.3.v20170317
> 2017-07-23 11:35:30.828:INFO:osjsh.ContextHandler:main: Started o.s.j.s.ServletContextHandler@70be0a2b/,null,AVAILABLE
> 2017-07-23 11:35:30.899:INFO:osjs.AbstractConnector:main: Started ServerConnector@29176cc1HTTP/1.1,[http/1.1]0.0.0.0:5555
> 2017-07-23 11:35:30.900:INFO:osjs.Server:main: Started @1827ms

> 11:35:30.900 INFO - Selenium Grid node is up and ready to register to the hub

> 11:35:31.017 INFO - Starting auto registration thread. Will try to register every 5000 ms.

> 11:35:31.017 INFO - Registering the node to the hub: http://192.168.1.27:4444/grid/register

> 11:35:31.062 INFO - The node is registered to the hub and ready to use

> 11:35:36.095 INFO - Couldn't register this node: The hub is down or not responding: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 12 path $

> 11:35:41.123 INFO - Couldn't register this node: The hub is down or not responding: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 12 path $

> 11:35:46.135 INFO - Couldn't register this node: The hub is down or not responding: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 12 path $

【问题讨论】:

您的具体测试步骤是什么?你想启动 Selenium Grid Hub & Node 吗?集线器和节点在同一台机器还是不同的机器上? 同一网络上有两台不同的电脑。一个是设置中心(它定期运行)。在第二台电脑上,我尝试设置节点但无法注册到集线器并生成上面的日志。 那么你到底卡在哪里了?能正常启动Hub吗?您可以更新用于启动 Hub 的命令吗?日志消息是否指示正确的 Hub 启动?谢谢 @DebanjanB hub 我开始成功了。问题出在节点上。它无法连接。尝试启动节点后生成日志。 如果您尝试启动 Selenium Grid Hub & Node,您的两个命令都需要更改。谢谢 【参考方案1】:

我是新手,但这里对我有用。我从同一台机器运行集线器和节点,从窗口批处理文件运行集线器和节点。我首先运行集线器并确保打开窗口,然后运行网格。自从我开始这样做后,我就没有出现连接问题

【讨论】:

【参考方案2】:

我能够通过将 chrome 的版本更新到最新 (60) 并将 chromedriver 的版本更新到最新来解决这个问题。

当我更新集线器端的 chromedriver 版本时,它终于开始工作了。

当我有时间时,我会切换到seleniumGridExtra,它应该会自动管理版本。

我的工作日志: 2017 年 8 月 3 日上午 10:11:03 仍在尝试让 selenium 在集线器/节点设置上运行。它在 17 小时前停止。

更新所有涉及的文件。

Latest chrome firefox and IE drivers.
Latest selenium version
Update chrome
rebooted machine
Updated chromeDriver on the hub..which seems silly.
  Suddenly working fine.
  Lessons learned: 
    Switch to selenium grid extras. They handle the version dependencies.

【讨论】:

【参考方案3】:

这是您问题的答案:

假设您的要求是在默认端口 4444 上运行 Selenium Grid Hub 和在默认端口 5555 上运行 Selenium Grid Node 我们需要配置并启动它们如下:

    启动 Selenium Grid Hub:

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

    以下日志确认您的 Selenium Grid Hub 运行正常:

    2017-07-24 15:31:46.139:INFO:osjs.Server:main: Started @2757ms
    15:31:46.140 INFO - Nodes should register to http://192.168.0.107:4444/grid/register/
    15:31:46.140 INFO - Selenium Grid hub is up and running
    

    通过 URL 访问 Selenium Grid 控制台:

    http://localhost:4444/grid/console
    

    启动 Selenium 网格节点:

    java -jar selenium-server-standalone-3.4.0.jar -role node -hub http://<IP_GRID_HUB>:4444/grid/register
    

    我用过localhost所以我用了:

    java -jar selenium-server-standalone-3.4.0.jar -role node -hub http://localhost:4444/grid/register
    

    以下日志确认您的 Selenium Grid 节点运行正常:

    15:35:44.939 INFO - Selenium Grid node is up and ready to register to the hub
    15:35:44.958 INFO - Starting auto registration thread. Will try to register every 5000 ms.
    15:35:44.958 INFO - Registering the node to the hub: http://localhost:4444/grid/register
    15:35:45.231 INFO - The node is registered to the hub and ready to use
    

    通过控制台 URL 访问 Selenium Grid Console 可以看到注册的 Node:

    http://localhost:4444/grid/console
    

如果这能回答您的问题,请告诉我。

【讨论】:

谢谢,我已经这样做了。但问题是: 11:35:31.062 INFO - 节点已注册到集线器并准备使用 11:35:36.095 信息 - 无法注册此节点:集线器已关闭或没有响应:com.google.gson .stream.MalformedJsonException:使用 JsonReader.setLenient(true) 在第 1 行第 12 列路径 $ 处接受格式错误的 JSON,如您所见,它已连接,但随后突然出现错误,当检查集线器时,它看起来未连接。 您能否考虑按照我的回答启动 Selenium Grid Hub?谢谢 当他们在同一台机器上工作时,他们是好的。但是,在实际场景中,它们是独立的机器。 如果端口44445555在各自的机器上打开并且没有ACL (Access Control List),一旦你提供真实的Hub IP代替&lt;IP_GRID_HUB&gt;,它肯定会工作。考虑重新启动HubNode 一次。谢谢

以上是关于com.google.gson.stream.MalformedJsonException:使用 JsonReader.setLenient(true) 在将 Selenium Grid 节点注册到 的主要内容,如果未能解决你的问题,请参考以下文章