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