У меня есть приложение, написанное на Java, которое создает учетную запись электронной почты на определенном веб-сайте. По некоторым причинам мне нужно запускать каждую итерацию программы под другой учетной записью пользователя Windows.
Я использую Selenium Grid (RemoteWebDriver) для подключения к удаленному серверу (Grid) с сервера-концентратора.
Предполагая, что у меня есть несколько учетных записей пользователей Windows, установленных на удаленном сервере Windows (например, "account639", "account729", "account889" и т.д.), И я хочу, чтобы мой концентратор подключался к каждой учетной записи отдельно и выполнял Java-код
Мой вопрос: как указать, какой учетной записи пользователя Windows должен выполняться код на сервере Grid?
Насколько я могу судить, двумя параметрами, которые я могу добавить в RemoteWebDriver, является имя хоста (или IP) удаленного сервера и порта. Я не вижу никакой опции указать, к какой учетной записи пользователя Windows она должна работать.
Поскольку имя хоста (IP) одинаково для всех учетных записей пользователей Windows под удаленным сервером, как я могу сказать, что "концентратор" каждый раз выполняет раздел кода под другой учетной записью пользователя Windows?
Единственная возможность, которую я вижу, - запустить каждый экземпляр Selenium Grid под другим портом и использовать номер порта в качестве способа разграничения между двумя учетными записями пользователей Windows (и убедитесь, что я одновременно зарегистрирован в обеих учетных записях пользователей).
Например, я могу настроить Selenium Grid на "account639", например, прослушивать порт 6399 и "account729" для прослушивания на порту "7299" - таким образом, я знаю, что код выполняется под соответствующей учетной записью Windows.
Это возможно? И есть ли более прямой способ сделать это без использования портов (т.е. Можно ли указать, какую учетную запись пользователя Windows должен подключить концентратор так, как я указываю порты?)
Войдите в систему с каждым пользователем Windows и запустите узел selenium под каждой учетной записью на разных портах (например: 5555, 5556, 5557). Если каждый узел имеет одну и ту же настройку, я имею в виду тот же браузер, те же версии браузера и т.д.... вы можете использовать "applicationName", которое является поддерживаемой, но не документированной дополнительной возможностью. С помощью этой возможности вы можете отличить свои узлы. Например, в вашем nodeConfig:
...
{
"applicationName":"account639",
"platform":"WINDOWS",
"browserName":"chrome",
"maxInstances":5,
"version":"40",
"seleniumProtocol":"WebDriver"
},
...
После этого вы можете настроить RemoteWebDriver для запуска своих тестов на определенном узле, который принадлежит определенной учетной записи пользователя вдов. Например:
DesiredCapabilities dc = new DesiredCapabilities();
dc.setCapability("applicationName", "account639");
...
WebDriver driver = new RemoteWebDriver(new URL(this.getHubUrl()), dc);
Если вы хотите использовать дополнительные возможности, вы можете создать свой собственный пользовательский счетчик возможностей (искать его в Google: "специализированный набор возможностей селевых сетей"), но если вам нужна только одна дополнительная возможность, я рекомендую использовать упомянутый.
Надеюсь это поможет.
Это невозможно с помощью Selenium Grid. Однако вы можете создать службу Windows, которая обертывает селеновую сетку.
После установки службы Windows вы можете выбрать, кому вы хотите, чтобы служба выполнялась как.
Вот статья о том, как запустить службу Windows в качестве учетной записи: https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/sys_srv_logon_user.mspx?mfr=true
Я думаю, вы могли бы выполнить то, что хотите, установив несколько служб Windows на отдельные порты, как разные пользователи.