Selenium RemoteWebDriver c# - System.InvalidOperationException
Selenium RemoteWebDriver c# - System.InvalidOperationException
我有一个示例 UI 测试项目,使用 Selenium.WebDriver 的 v3.4.0。
当我 运行 针对本地驱动程序进行测试时,一切正常,但我想使用 Selenium Grid 2 让事情正常进行。
当我尝试实例化一个新的 RemoteWebDriver 时,我得到了一个没有细节的异常。
Driver = new RemoteWebDriver(new Uri(GridUrl), Capabilities);
注意:GridUrl 是“http://localhost:4444/wd/hub”
使用 StackTrace 抛出 System.InvalidOperationException,如下所示:
at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
at OpenQA.Selenium.Remote.RemoteWebDriver.StartSession(ICapabilities desiredCapabilities)
at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities)
at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(Uri remoteAddress, ICapabilities desiredCapabilities)
at xxxx.Ui.Tests.SeleniumTests.TestInitialize() in C:\Users\xxxx\Documents\Visual Studio 2015\Projects\xxxx.Ui.Tests\xxxx.Tests\PersonTests.cs:line 38
集线器配置
我在本地安装了集线器 v3.4.0 运行ning,配置如下:
{
"port": 4444,
"newSessionWaitTimeout": -1,
"servlets" : [],
"withoutServlets": [],
"custom": {},
"capabilityMatcher":"org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
"throwOnCapabilityNotPresent": true,
"cleanUpCycle": 5000,
"role": "hub",
"debug": false,
"browserTimeout": 0,
"timeout": 1800
}
集线器开始于:
java -jar selenium-server-standalone-3.4.0.jar -role hub
一切正常,看起来 运行ning。
节点配置
我尝试了很多节点(chromedriver.exe、IEDriverServer.exe 和 geckodrvier.exe)。 None 这些与 RemoteWebDriver 一起工作。它们都在已添加到我的系统 PATH 变量的目录中。
Chrome 配置
{
"capabilities":
[
{
"browserName": "chrome",
"maxInstances": 5,
"seleniumProtocol": "WebDriver"
}
],
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"maxSession": 5,
"port": 5556,
"register": true,
"registerCycle": 5000,
"hub": "http://localhost:4444",
"nodeStatusCheckTimeout": 5000,
"nodePolling": 5000,
"role": "node",
"unregisterIfStillDownAfter": 60000,
"downPollingLimit": 2,
"debug": false,
"servlets" : [],
"withoutServlets": [],
"custom": {}
}
节点开始于:
java -jar selenium-server-standalone-3.4.0.jar -role node -nodeConfig chromeNodeConfig.json
除了浏览器名称和端口不同外,其他节点配置基本相同。
所有节点启动后,控制台如下所示:
我无法从异常中获得太多信息。这是我拥有的驱动程序的版本控制问题吗?我已尝试自定义我的 DesiredCapabilities 以确保我与节点配置中的那些相匹配。所有这些看起来都很好。
更新
根据要求,我将添加更多有关我如何尝试启动浏览器的详细信息。 None 的浏览器使用 RemoteWebDriver,而它们使用本地驱动程序。显示 Chrome 示例 - 每个示例之间的唯一区别在于我传递给基础 class 构造函数的功能。
在我的测试中class
[TestClass]
public class PersonTests : PersonTestBase
{
public PersonTests()
: base(DesiredCapabilities.Chrome())
{
}
[TestCategory("Chrome")]
[TestMethod]
public void Chrome_ShouldCreatePlacement()
{
this.ShouldCreatePerson();
}
}
在我的基地class我正在做以下事情
public abstract class PersonTestBase
{
protected IWebDriver Driver;
protected ICapabilities Capabilities;
protected string TargetUrl;
protected string GridUrl;
protected PersonTests(ICapabilities capabilities)
{
this.Capabilities = capabilities;
}
[TestInitialize]
public void TestInitialize()
{
TargetUrl = "http://urlOfMyWebsite";
GridUrl = "http://localhost:4444/wd/hub"
Driver = new RemoteWebDriver(new Uri(GridUrl), Capabilities);
}
[TestCleanup]
public void TestCleanup()
{
Driver.Quit();
}
protected void ShouldCreatePerson()
{
Driver.Navigate().GoToUrl(TargetUrl);
//rest of test code ommitted
}
}
降级到 3.3.0,直到 this issue 得到解决并且新版本的 Selenium 独立服务器可用(推荐的解决方案)
或
- 下载Solution
- 评论this line
- Build dotnet language bindings
- 在根目录
中打开命令window
- 运行
go //dotnet:release
- 并引用 {root} 中内置的二进制文件/build/dotnet/dist
注意:此解决方法不能解决任何问题!它忽略了导致失败的那段硒网格代码。
另一个注意事项:请注意,升级到 Selenium 3.4 可能还需要升级网络驱动程序
按照 Stephen 的建议降级到 3.3.0 可能会导致已知 issue。请尝试降级到 v3.3.1。
您可以从这里获取 v3.3.1:
http://selenium-release.storage.googleapis.com/index.html?path=3.3/
V3.5.1 修复了这个问题。
使用 NuGET 管理器和您的 selenium 独立 jar 升级您的 Selenium NuGET 包。
我有一个示例 UI 测试项目,使用 Selenium.WebDriver 的 v3.4.0。
当我 运行 针对本地驱动程序进行测试时,一切正常,但我想使用 Selenium Grid 2 让事情正常进行。
当我尝试实例化一个新的 RemoteWebDriver 时,我得到了一个没有细节的异常。
Driver = new RemoteWebDriver(new Uri(GridUrl), Capabilities);
注意:GridUrl 是“http://localhost:4444/wd/hub”
使用 StackTrace 抛出 System.InvalidOperationException,如下所示:
at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
at OpenQA.Selenium.Remote.RemoteWebDriver.StartSession(ICapabilities desiredCapabilities)
at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities)
at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(Uri remoteAddress, ICapabilities desiredCapabilities)
at xxxx.Ui.Tests.SeleniumTests.TestInitialize() in C:\Users\xxxx\Documents\Visual Studio 2015\Projects\xxxx.Ui.Tests\xxxx.Tests\PersonTests.cs:line 38
集线器配置
我在本地安装了集线器 v3.4.0 运行ning,配置如下:
{
"port": 4444,
"newSessionWaitTimeout": -1,
"servlets" : [],
"withoutServlets": [],
"custom": {},
"capabilityMatcher":"org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
"throwOnCapabilityNotPresent": true,
"cleanUpCycle": 5000,
"role": "hub",
"debug": false,
"browserTimeout": 0,
"timeout": 1800
}
集线器开始于:
java -jar selenium-server-standalone-3.4.0.jar -role hub
一切正常,看起来 运行ning。
节点配置
我尝试了很多节点(chromedriver.exe、IEDriverServer.exe 和 geckodrvier.exe)。 None 这些与 RemoteWebDriver 一起工作。它们都在已添加到我的系统 PATH 变量的目录中。
Chrome 配置
{
"capabilities":
[
{
"browserName": "chrome",
"maxInstances": 5,
"seleniumProtocol": "WebDriver"
}
],
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"maxSession": 5,
"port": 5556,
"register": true,
"registerCycle": 5000,
"hub": "http://localhost:4444",
"nodeStatusCheckTimeout": 5000,
"nodePolling": 5000,
"role": "node",
"unregisterIfStillDownAfter": 60000,
"downPollingLimit": 2,
"debug": false,
"servlets" : [],
"withoutServlets": [],
"custom": {}
}
节点开始于:
java -jar selenium-server-standalone-3.4.0.jar -role node -nodeConfig chromeNodeConfig.json
除了浏览器名称和端口不同外,其他节点配置基本相同。
所有节点启动后,控制台如下所示:
我无法从异常中获得太多信息。这是我拥有的驱动程序的版本控制问题吗?我已尝试自定义我的 DesiredCapabilities 以确保我与节点配置中的那些相匹配。所有这些看起来都很好。
更新
根据要求,我将添加更多有关我如何尝试启动浏览器的详细信息。 None 的浏览器使用 RemoteWebDriver,而它们使用本地驱动程序。显示 Chrome 示例 - 每个示例之间的唯一区别在于我传递给基础 class 构造函数的功能。
在我的测试中class
[TestClass]
public class PersonTests : PersonTestBase
{
public PersonTests()
: base(DesiredCapabilities.Chrome())
{
}
[TestCategory("Chrome")]
[TestMethod]
public void Chrome_ShouldCreatePlacement()
{
this.ShouldCreatePerson();
}
}
在我的基地class我正在做以下事情
public abstract class PersonTestBase
{
protected IWebDriver Driver;
protected ICapabilities Capabilities;
protected string TargetUrl;
protected string GridUrl;
protected PersonTests(ICapabilities capabilities)
{
this.Capabilities = capabilities;
}
[TestInitialize]
public void TestInitialize()
{
TargetUrl = "http://urlOfMyWebsite";
GridUrl = "http://localhost:4444/wd/hub"
Driver = new RemoteWebDriver(new Uri(GridUrl), Capabilities);
}
[TestCleanup]
public void TestCleanup()
{
Driver.Quit();
}
protected void ShouldCreatePerson()
{
Driver.Navigate().GoToUrl(TargetUrl);
//rest of test code ommitted
}
}
降级到 3.3.0,直到 this issue 得到解决并且新版本的 Selenium 独立服务器可用(推荐的解决方案)
或
- 下载Solution
- 评论this line
- Build dotnet language bindings
- 在根目录 中打开命令window
- 运行
go //dotnet:release
- 并引用 {root} 中内置的二进制文件/build/dotnet/dist
注意:此解决方法不能解决任何问题!它忽略了导致失败的那段硒网格代码。
另一个注意事项:请注意,升级到 Selenium 3.4 可能还需要升级网络驱动程序
按照 Stephen 的建议降级到 3.3.0 可能会导致已知 issue。请尝试降级到 v3.3.1。
您可以从这里获取 v3.3.1: http://selenium-release.storage.googleapis.com/index.html?path=3.3/
V3.5.1 修复了这个问题。
使用 NuGET 管理器和您的 selenium 独立 jar 升级您的 Selenium NuGET 包。