Selenium RemoteWebDriver c# - System.InvalidOperationException
Solution 1
Downgrade to 3.3.0 until this issue gets resolved and a new release of Selenium Standalone Server is available (Recommended solution)
Or
- Download the Solution
- Comment this line
-
Build dotnet language bindings
- Open command window in root directory
- Run
go //dotnet:release
- And reference the binaries built in {root}/build/dotnet/dist
Note: This workaround does NOT fix anything! It ignores the piece of selenium grid code that causes failure.
Another note: Be aware that upgrading to Selenium 3.4 may require upgrading webdrivers as well
Solution 2
V3.5.1 Fixes this issue.
Upgrade your Selenium NuGET package using NuGET manager & your selenium-standalone jar.
Related videos on Youtube
obaylis
Developer, primarily using Microsoft stack & Angular with over 15 years experience. Advocate of BDD.
Updated on June 04, 2022Comments
-
obaylis about 2 years
I have a sample UI test project using v3.4.0 of Selenium.WebDriver.
Everything works fine when I run the tests against a local driver but I want to get things working using Selenium Grid 2.
As soon as I try to instantiate a new RemoteWebDriver I get an exception with little detail.
Driver = new RemoteWebDriver(new Uri(GridUrl), Capabilities);
Note: GridUrl is "http://localhost:4444/wd/hub"
Throws a System.InvalidOperationException with StackTrace as follows:
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
Hub configuration
I have v3.4.0 of the hub running locally with the following configuration:
{ "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 }
Hub started with:
java -jar selenium-server-standalone-3.4.0.jar -role hub
This has come up OK and looks to be running.
Node configuration
I have tried a number of nodes (chromedriver.exe, IEDriverServer.exe and geckodrvier.exe). None of these work with the RemoteWebDriver. All of them are in a directory that has been added to my system PATH variable.
Chrome config
{ "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": {} }
Node started with:
java -jar selenium-server-standalone-3.4.0.jar -role node -nodeConfig chromeNodeConfig.json
The other node configs are largely the same except for the different browser names and ports.
Once all nodes are started, the console looks as follows:
I'm not able to get much from the exception. Is it a versioning issue of the drivers I have? I have tried customising my DesiredCapabilities to ensure I'm matching those in the node config. All of that looks fine.
Update
As requested I'm adding a bit more detail as to how I'm trying to launch a browser. None of the browsers work with the RemoteWebDriver whereas they do with the local drivers. Showing the Chrome example - only difference between each is regarding the Capabilities that I'm passing in to the base class constructor.
In my test class
[TestClass] public class PersonTests : PersonTestBase { public PersonTests() : base(DesiredCapabilities.Chrome()) { } [TestCategory("Chrome")] [TestMethod] public void Chrome_ShouldCreatePlacement() { this.ShouldCreatePerson(); } }
In my base class I am doing the following
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 } }
-
obaylis about 7 yearsExcellent. I've downgraded Selenium.WebDriver and Selenium.Support to v3.3.0. This now works. Thanks very much - been searching for a while with no progress!
-
undetected Selenium about 7 years@StephenCavender I am not sure about the C# binding of Selenium Grid 3.4.0 but for my Java bindings it executes perfectly with default settings.