http://selenium-release.storage.googleapis.com/index.html?path=3.3/

я есть пример тестового проекта пользовательского интерфейса с использованием v3.4.0 Selenium.WebDriver.

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

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

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

Примечание: GridUrl is "HTTP: // локальный: 4444 / WD / ступица"

Создает исключение 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

Это подошло хорошо и, похоже, работает.

Конфигурация узла

Я пробовал несколько узлов (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": {}
}

Узел начался с:

java -jar selenium-server-standalone-3.4.0.jar -role узел -nodeConfig chromeNodeConfig.json

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

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

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

Обновить

По запросу я добавляю немного больше информации о том, как я пытаюсь запустить браузер. Ни один из браузеров не работает с 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
    }
}

Ответы на вопрос(3)

Ваш ответ на вопрос