命名selenium网格节点。产生特定节点

时间:2013-06-18 13:25:38

标签: ruby selenium-webdriver watir-webdriver selenium-grid selenium-server

我正在尝试在selenium hub中实现一种默认队列。 有可能指定节点的名称(实际上是它的环境,如“ubuntu上的firefox”或“windows上的chrome”)。 Selenium网格本身有一个默认队列,它按照'先入先出'原则工作。但我想优先考虑一些给予selenium服务器的任务。我没有可能引入自定义队列(似乎没有API),这就是我决定将队列的逻辑与selenium服务器分开的原因。我只会调用一个具有特定名称(环境)的特定节点,例如“firefox important node”或者像这样的smth。

所以,我想知道如何直接告诉selenium将哪个节点用于我的任务? 一般来说,我是否以正确的方式思考?

以下是我的配置: hubConfig.json.erb

{
  "host": null,
  "port": <%= node[:selenium][:server][:port] %>,
  "newSessionWaitTimeout": -1,
  "servlets" : [],
  "prioritizer": null,
  "capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
  "throwOnCapabilityNotPresent": true,
  "nodePolling": <%= node[:selenium][:server][:node_polling] %>,
  "cleanUpCycle": <%= node[:selenium][:server][:cleanup_cycle] %>,
  "timeout": <%= node[:selenium][:server][:timeout] %>,
  "browserTimeout": 0,
  "maxSession": <%= node[:selenium][:server][:max_session] %>
}

nodeConfig.json.erb

{
  "capabilities": [
    {
      "browserName": "firefox",
      "maxInstances": 5,
      "seleniumProtocol": "WebDriver"
    }, {
      "browserName": "chrome",
      "maxInstances": 5,
      "seleniumProtocol": "WebDriver"
    }, {
      "browserName": "phantomjs",
      "maxInstances": 5,
      "seleniumProtocol": "WebDriver"
    }
  ],
  "configuration": {
    "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
    "maxSession": <%= node[:selenium][:node][:max_session] %>,
    "port": <%= node[:selenium][:node][:port] %>,
    "host": "<%= node[:fqdn] %>",
    "register": true,
    "registerCycle": <%= node[:selenium][:node][:register_cycle] %>,
    "hubPort": <%= node[:selenium][:server][:port] %>
  }
}

我的Driver类:

  ...
  def remote_driver
    @browser = Watir::Browser.new(:remote,
      :url                  => "http://myhub.com:4444/wd/hub",
      :http_client          => client,
      :desired_capabilities => capabilities
    )
  end

  def capabilities
    Selenium::WebDriver::Remote::Capabilities.send(
      "firefox",
      :javascript_enabled    => true,
      :css_selectors_enabled => true,
      :takes_screenshot      => true
    )
  end

  def client
    client = Selenium::WebDriver::Remote::Http::Default.new
    client.timeout = 360
    client
  end
  ...

我仍然不知道如何将指定节点用于我的任务。 如果我尝试启动驱动程序添加:name => "firefox important node"并使用

扩展nodeConfig.json.erb的配置
environments:
   - name:    "firefox important node"
     browser: "*firefox"
   - name:    "Firefox36 on Linux"
     browser: "*firefox"

selenium只是在随机节点上启动随机firefox浏览器。我该如何控制它?

1 个答案:

答案 0 :(得分:0)

本教程介绍如何为Selenium Grid实现自定义优先级。这允许您定义任何您喜欢的复杂排队逻辑。

http://selenium.polteq.com/en/use-custom-prioritizer-for-selenium-grid-hub/