如果等待插槽空闲,则网格集线器http客户端超时

Leo*_*cci 3 webdriver selenium-grid selenium-webdriver

有没有办法查询我的网格集线器(2.6.0),看看是否有可用于特定所需功能的插槽?

例:

网格中心网页在

HTTP://本地主机:4444 /格/控制台

正确显示1个请求应等待插槽空闲,以便测试可在当前测试完成后继续:


Grid Hub 2.6.0

WebDriverRemoteProxy在http://192.168.3.15:5523/wd/hub上收听

测试会话在300秒后超时.

最多支持1个并发测试

1个请求等待插槽免费.

  • {platform = ANY,javascriptEnabled = true,cssSelectorsEnabled = true,browserName = firefox,nativeEvents = false,rotate = false,takesScreenshot = true,version =}

查看配置


但是中心而不是返回它应该保留的某种json通知并等待它什么都不返回,客户端连接可能只是超时(取决于你正在使用的http客户端库).

我正在使用ruby绑定,但我可以使用普通卷曲重现错误,请按照以下步骤操作:

步骤1.服务器中心和节点设置:

我的Hub设置(在ubuntu服务器上)

java -jar selenium-server-standalone.jar -role hub
Run Code Online (Sandbox Code Playgroud)

我的节点设置(在Windows XP机器上):

java -jar selenium-server-standalone.jar -role webdriver -hub $HUBURL -port 5522 -maxSession 1 -browser "maxInstances=1,browserName=firefox"
Run Code Online (Sandbox Code Playgroud)

注意maxSession和maxInstances有意放在1以轻松重现该问题.

步骤2.运行一些长时间测试以占用第一个也是唯一可用的插槽

(为了举例)

步骤3.使用此curl请求模拟另一个测试的运行:

curl -L --max-redirs 20 -v -i -H "Accept: application/json" -X POST http://localhost:4444/wd/hub/session -d '{"desiredCapabilities":{"javascriptEnabled":false,"version":"","rotatable":false,"takesScreenshot":true,"cssSelectorsEnabled":true,"browserName":"firefox","nativeEvents":false,"platform":"ANY"}}'
Run Code Online (Sandbox Code Playgroud)

结果:

连接处于保持状态,没有服务器消息指示正在发生的事情,json消息告诉您正在等待插槽是免费的应该这样做.在一些http库中,这将简单地超时,因为它目前在ruby gem'selenium-webdriver'<= 2.6.0上

所以我需要一种方法来查询是否有空闲的插槽(对于特定的所需能力),以避免客户端超时错误.

我检查了JsonWireProtocol,但找不到请求该信息的路径. JsonWireProtocol

小智 5

显然ruby客户端不能等待,并将在低级别超时.

幸运的是,你可以让Grid2在一段时间后抛出RuntimeException:

更改新会话的最长等待时间

启动网格集线器时,可以以ms为单位传递该参数:-newSessionWaitTimeout 25000

java -jar selenium-server-standalone.jar -role hub -newSessionWaitTimeout 25000
Run Code Online (Sandbox Code Playgroud)

使用你提供的curl params,你会看到现在,25秒后你会得到:

{
  "status":13,
  "value":{
     "message":"java.lang.RuntimeException: Request timed out waiting 
      for a node to become available."...
}
Run Code Online (Sandbox Code Playgroud)

这是你可以在红宝石方面工作和处理的东西.

  • 我为Selenium提交了[bug](https://github.com/SeleniumHQ/selenium/issues/3022).(这应该是完全可以实现的,因为当客户端超时时它会将帖子终止到"/ wd/hub/session",并且网格肯定可以检测到断开连接.) (2认同)