Selenium Grid - 指定 IE 版本时找不到功能
Selenium Grid - Cannot Find Capabilities When Specifying IE Version
我 运行 在使用 Selenium Grid 并尝试使用特定版本的 IE 注册节点然后为该浏览器的实例调用 Grid Hub 时遇到了一个问题。我的设置:
- 带有 C# 绑定的 Selenium 3.0.1
- 一个 class 库定义我的页面 objects/framework 和一个 class 库与我的 NUnit 3.5 测试
- 一个虚拟机 运行ning Server 2008 托管数据库和我的 Selenium Grid Hub,从 "java -jar C:\Selenium\selenium-server-standalone-3.0.1.jar -role hub -maxSession 20"
开始
- 一个 VM 运行ning Windows 7 与 IE9 和我的 webdriver 节点
我开始我的节点(为了便于阅读,我添加了换行符,它是 bat 文件中的一行):
java -Dwebdriver.ie.driver=C:\Selenium\IEDriverServer.exe -Dwebdriver.chrome.driver=C:\Selenium\chromedriver.exe -jar C:\Selenium\selenium-server-standalone-3.0.1.jar -role webdriver -hub http://10.10.1.20:4444/grid/register -port 5566 -maxSession 20
-browser "browserName=internet explorer,version=9,maxInstances=1,platform=ANY,seleniumProtocol=WebDriver"
-browser "browserName=chrome,maxInstances=5"
-browser "browserName=firefox,maxInstances=5"
我调用 RemoteWebDriver 的代码是:
caps = new DesiredCapabilities();
caps.SetCapability("browserName", "internet explorer");
caps.SetCapability("version", "9");
WebDriver = new RemoteWebDriver(new System.Uri("http://10.10.1.20:4444/wd/hub"), caps);
当我 运行 这段代码时,当代码创建新的 RemoteWebDriver 集线器时 returns:
INFO - Got a request to create a new session: Capabilities [{browserName=internet explorer, version=9}]
Visual Studio 然后显示返回以下错误:
System.InvalidOperationException : Error forwarding the new session cannot find : Capabilities [{browserName=internet explorer, version=9}] TearDown : System.NullReferenceException : Object reference not set to an instance of an object.
我尝试将节点和我的代码设置为使用“9.0”而不是“9”,并将浏览器名称设置为 "iexplore" 而不是 "internet explorer",就像我在网上找到的一些帖子一样建议,没有成功。我花了两个小时研究 Google 和 Selenium 文档,但似乎没有人枚举各种浏览器的 "version" 功能的预期格式,所以我什至不能确定我使用的是正确的值。如果我从节点启动批处理中删除版本标志并在我的 C# 代码中删除对版本的 setCapability 调用,浏览器将正常启动。但是,我将有一个包含多个 IE 变体的网格用于测试,并且需要能够指定我想要的 IE 版本。任何人都可以帮助我以正确的方式为特定版本的 IE 启动节点,将该节点注册到集线器,并使用 RemoteWebDriver 调用它吗?
我找到了解决方案 - 虽然我无法使用命令行参数获取特定版本的 IE 实例,但我可以使用基于 JSON 的配置来获取。我现在使用以下命令启动我的 Selenium 网格节点:
java -Dwebdriver.ie.driver=C:\SeleniumGrid\IEDriverServer.exe -Dwebdriver.chrome.driver=C:\SeleniumGrid\chromedriver.exe -jar C:\SeleniumGrid\selenium-server-standalone-3.0.1.jar -role webdriver -nodeConfig "C:\SeleniumGrid\NodeIE9.json"
我的 NodeIE9.json 文件包含以下内容:
{
"capabilities":
[
{
"browserName": "firefox",
"maxInstances": 5,
"seleniumProtocol": "WebDriver"
},
{
"browserName": "chrome",
"maxInstances": 5,
"seleniumProtocol": "WebDriver"
},
{
"browserName": "internet explorer",
"version": "9",
"maxInstances": 1,
"seleniumProtocol": "WebDriver"
}
],
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"maxSession": 11,
"port": 5555,
"register": true,
"registerCycle": 5000,
"hub": "http://10.10.1.20:4444",
"nodeStatusCheckTimeout": 5000,
"nodePolling": 5000,
"role": "node",
"unregisterIfStillDownAfter": 60000,
"downPollingLimit": 2,
"debug": false,
"servlets" : [],
"withoutServlets": [],
"custom": {}
}
我在某处看到一个建议,提到 "version" 属性 需要是一个字符串而不是 JSON 中的一个整数,所以可能是通过命令行传入的参数被错误地解释了吗?无论哪种方式,这都非常有效,无论如何我更喜欢使用 JSON 配置节点而不是命令行参数。更干净了。
我 运行 在使用 Selenium Grid 并尝试使用特定版本的 IE 注册节点然后为该浏览器的实例调用 Grid Hub 时遇到了一个问题。我的设置:
- 带有 C# 绑定的 Selenium 3.0.1
- 一个 class 库定义我的页面 objects/framework 和一个 class 库与我的 NUnit 3.5 测试
- 一个虚拟机 运行ning Server 2008 托管数据库和我的 Selenium Grid Hub,从 "java -jar C:\Selenium\selenium-server-standalone-3.0.1.jar -role hub -maxSession 20" 开始
- 一个 VM 运行ning Windows 7 与 IE9 和我的 webdriver 节点
我开始我的节点(为了便于阅读,我添加了换行符,它是 bat 文件中的一行):
java -Dwebdriver.ie.driver=C:\Selenium\IEDriverServer.exe -Dwebdriver.chrome.driver=C:\Selenium\chromedriver.exe -jar C:\Selenium\selenium-server-standalone-3.0.1.jar -role webdriver -hub http://10.10.1.20:4444/grid/register -port 5566 -maxSession 20
-browser "browserName=internet explorer,version=9,maxInstances=1,platform=ANY,seleniumProtocol=WebDriver"
-browser "browserName=chrome,maxInstances=5"
-browser "browserName=firefox,maxInstances=5"
我调用 RemoteWebDriver 的代码是:
caps = new DesiredCapabilities();
caps.SetCapability("browserName", "internet explorer");
caps.SetCapability("version", "9");
WebDriver = new RemoteWebDriver(new System.Uri("http://10.10.1.20:4444/wd/hub"), caps);
当我 运行 这段代码时,当代码创建新的 RemoteWebDriver 集线器时 returns:
INFO - Got a request to create a new session: Capabilities [{browserName=internet explorer, version=9}]
Visual Studio 然后显示返回以下错误:
System.InvalidOperationException : Error forwarding the new session cannot find : Capabilities [{browserName=internet explorer, version=9}] TearDown : System.NullReferenceException : Object reference not set to an instance of an object.
我尝试将节点和我的代码设置为使用“9.0”而不是“9”,并将浏览器名称设置为 "iexplore" 而不是 "internet explorer",就像我在网上找到的一些帖子一样建议,没有成功。我花了两个小时研究 Google 和 Selenium 文档,但似乎没有人枚举各种浏览器的 "version" 功能的预期格式,所以我什至不能确定我使用的是正确的值。如果我从节点启动批处理中删除版本标志并在我的 C# 代码中删除对版本的 setCapability 调用,浏览器将正常启动。但是,我将有一个包含多个 IE 变体的网格用于测试,并且需要能够指定我想要的 IE 版本。任何人都可以帮助我以正确的方式为特定版本的 IE 启动节点,将该节点注册到集线器,并使用 RemoteWebDriver 调用它吗?
我找到了解决方案 - 虽然我无法使用命令行参数获取特定版本的 IE 实例,但我可以使用基于 JSON 的配置来获取。我现在使用以下命令启动我的 Selenium 网格节点:
java -Dwebdriver.ie.driver=C:\SeleniumGrid\IEDriverServer.exe -Dwebdriver.chrome.driver=C:\SeleniumGrid\chromedriver.exe -jar C:\SeleniumGrid\selenium-server-standalone-3.0.1.jar -role webdriver -nodeConfig "C:\SeleniumGrid\NodeIE9.json"
我的 NodeIE9.json 文件包含以下内容:
{
"capabilities":
[
{
"browserName": "firefox",
"maxInstances": 5,
"seleniumProtocol": "WebDriver"
},
{
"browserName": "chrome",
"maxInstances": 5,
"seleniumProtocol": "WebDriver"
},
{
"browserName": "internet explorer",
"version": "9",
"maxInstances": 1,
"seleniumProtocol": "WebDriver"
}
],
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"maxSession": 11,
"port": 5555,
"register": true,
"registerCycle": 5000,
"hub": "http://10.10.1.20:4444",
"nodeStatusCheckTimeout": 5000,
"nodePolling": 5000,
"role": "node",
"unregisterIfStillDownAfter": 60000,
"downPollingLimit": 2,
"debug": false,
"servlets" : [],
"withoutServlets": [],
"custom": {}
}
我在某处看到一个建议,提到 "version" 属性 需要是一个字符串而不是 JSON 中的一个整数,所以可能是通过命令行传入的参数被错误地解释了吗?无论哪种方式,这都非常有效,无论如何我更喜欢使用 JSON 配置节点而不是命令行参数。更干净了。