Selenium RemoteWebDriver С# - System.InvalidOperationException

У меня есть образец тестового проекта UI, использующий v3.4.0 Selenium.WebDriver.

Все работает нормально, когда я запускаю тесты с локальным драйвером, но я хочу, чтобы все работало с использованием Selenium Grid 2.

Как только я пытаюсь создать экземпляр нового RemoteWebDriver, я получаю исключение с небольшими подробностями.

Driver = new RemoteWebDriver(new Uri(GridUrl), Capabilities);     

Примечание: GridUrl - " http://localhost:4444/wd/hub"

Выдает исключение System.InvalidOperationException с помощью StackTrace следующим образом:

   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 концентратора, работающего локально со следующей конфигурацией:

{
  "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

Это подтвердилось и выглядит запущенным. рабочая консольная консоль

Node конфигурация

Я пробовал несколько узлов (chromedriver.exe, IEDriverServer.exe и geckodrvier.exe). Ни одна из них не работает с 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": {}
}

Node началось с:

java -jar selenium-server-standalone-3.4.0.jar -role node -nodeConfig chromeNodeConfig.json

Другие конфигурации node в основном одинаковы, за исключением разных имен и портов браузера.

После запуска всех узлов консоль выглядит следующим образом: консоль с запущенными узлами

Я не могу получить много от исключения. Это проблема с версией драйверов, которые у меня есть? Я попробовал настроить мои DesiredCapabilities, чтобы убедиться, что я сопоставлен с конфигурацией node. Все это выглядит нормально.


Обновление

В соответствии с запросом я добавляю немного более подробную информацию о том, как я пытаюсь запустить браузер. Ни один из браузеров не работает с RemoteWebDriver, тогда как с локальными драйверами. Отображение примера Chrome - только разница между ними относится к возможностям, которые я передаю в конструктор базового класса.

В моем тестовом классе

[TestClass]
public class PersonTests : PersonTestBase
{
    public PersonTests() 
        : base(DesiredCapabilities.Chrome())
    {
    }

    [TestCategory("Chrome")]
    [TestMethod]
    public void Chrome_ShouldCreatePlacement()
    {
        this.ShouldCreatePerson();
    }        
}

В моем базовом классе я делаю следующее

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
    }
}

Ответ 1

Снизьте до 3.3.0 до тех пор, пока эта проблема не будет решена и не будет доступна новая версия автономного сервера Selenium (рекомендуемое решение)

или

Примечание. Это обходное решение делает НЕ исправление чего-либо! Он игнорирует фрагмент селенового кода селена, который вызывает сбой.

Еще одно примечание: имейте в виду, что для обновления до Selenium 3.4 может потребоваться также обновление веб-дисков

Ответ 2

V3.5.1 Устраняет эту проблему.

Обновите свой пакет Selenium NuGET с помощью менеджера NuGET и вашего отдельного банкета с селеном.