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