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

时间:2011-09-19 16:41:59

标签: webdriver selenium-webdriver selenium-grid

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

实施例

网格中心网页在

http://localhost:4444/grid/console

正确显示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.服务器中心和节点设置:

My Hub设置(在ubuntu服务器上)

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

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

java -jar selenium-server-standalone.jar -role webdriver -hub $HUBURL -port 5522 -maxSession 1 -browser "maxInstances=1,browserName=firefox"

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

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

(为了举例)

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

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"}}'

结果:

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

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

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

1 个答案:

答案 0 :(得分:5)

显然ruby客户端不能等待,并且会在低级别超时。

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

Changing Maximum Wait Time for New Session

启动网格中心时,您可以以毫秒为单位传递该参数: -newSessionWaitTimeout 25000

java -jar selenium-server-standalone.jar -role hub -newSessionWaitTimeout 25000

使用你提供的卷曲参数,你会看到现在,25秒后你会得到:

{
  "status":13,
  "value":{
     "message":"java.lang.RuntimeException: Request timed out waiting 
      for a node to become available."...
}

你可以在红宝石方面工作和处理。