0

セレンハブに一種のデフォルトキューを実装しようとしています。ノードの名前を指定する可能性があります (実際にはその環境、「ubuntu の firefox」や「windows の chrome」など)。Selenium グリッド自体にはデフォルトのキューがあり、「先入れ先出し」の原則に従って動作します。しかし、セレンサーバーに与えられたタスクのいくつかを優先したいと思います. カスタム キューを導入する可能性はありません (そのための API はないようです)。そのため、キューのロジックをセレン サーバーから分離することにしました。特定の名前 (環境) を持つ特定のノードのみを呼び出します。たとえば、「firefox important node」などです。

それで、自分のタスクに使用するノードをセレンに直接伝える方法を知りたいですか? そして、一般的に、私は正しい方法で考えていますか?

ここに私の設定があります: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 のカスタム プライオリタイザーを実装する方法を示します。これにより、任意の複雑なキュー ロジックを定義できます。

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

于 2013-06-26T10:18:43.710 に答える