セレンハブに一種のデフォルトキューを実装しようとしています。ノードの名前を指定する可能性があります (実際にはその環境、「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 ブラウザーを起動するだけです。どうすれば制御できますか?