0

我正在尝试在 selenium hub 中实现一种默认队列。可以指定节点的名称(实际上是它的环境,例如“ubuntu 上的 firefox”或“windows 上的 chrome”)。Selenium 网格本身有一个默认队列,它按照“先进先出”的原则工作。但我想优先处理我交给 selenium 服务器的一些任务。我不可能引入自定义队列(似乎没有 API),这就是为什么我决定将队列的逻辑与 selenium 服务器分开。我只会调用具有特定名称(环境)的特定节点,例如“firefox 重要节点”或类似的东西。

所以,我想知道如何直接告诉 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] %>
  }
}

还有我的司机课:

  ...
  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 浏览器。我该如何控制它?

4

1 回答 1

0

本教程展示了如何为 Selenium Grid 实现自定义 Prioritizer。这允许您定义任何您喜欢的复杂排队逻辑。

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

于 2013-06-26T10:18:43.710 回答