Подтвердить что ты не робот

Как обрабатывать всплывающее окно аутентификации с помощью Selenium WebDriver с помощью Java

Я пытаюсь обработать всплывающее окно с использованием кода ниже:

FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("network.http.phishy-userpass-length", 255);
profile.setPreference("network.automatic-ntlm-auth.trusted-uris", "x.x.x.x");
driver = new FirefoxDriver(profile);
baseUrl="http://" + login + ":" + password + "@" + url;
driver.get(baseUrl + "/");

Когда я выполняю тест, на странице отображается всплывающее окно проверки подлинности и по-прежнему загружается до нажатия кнопки "Отмена". В тот момент я могу получить доступ к следующей странице, это означает, что успех аутентификации, но все же всегда показывает всплывающее окно аутентификации

4b9b3361

Ответ 1

Метод оповещения, authenticateUsing() позволяет пропустить Http Basic Authentication.

WebDriverWait wait = new WebDriverWait(driver, 10);      
Alert alert = wait.until(ExpectedConditions.alertIsPresent());     
alert.authenticateUsing(new UserAndPassword(username, password));

В Selenium 3.4 он все еще находится в бета-версии

В настоящее время реализация выполняется только для InternetExplorerDriver

Ответ 2

Не используйте профиль firefox и попробуйте выполнить код ниже:

driver.get("http://UserName:[email protected]");

Если вы реализуете его в браузере IE, есть определенные вещи, которые вам нужно сделать.

Если ваш сервер аутентификации требует имя пользователя с доменом, например "domainuser", вам нужно добавить двойную косую черту / к URL:

//localdomain\user:[email protected]

Ответ 3

Я сталкивался с этой проблемой несколько раз в своем приложении.

Мы можем справиться с этим с помощью ниже двух подходов.

  • Передайте имя пользователя и пароль в самом URL-адресе

  • Вы можете создать AutoIT Script и вызвать Script, прежде чем открывать URL-адрес.

Пожалуйста, ознакомьтесь с приведенной ниже статьей, в которой я упомянул оба пути:
Обратиться к окну аутентификации/входа в Selenium Webdriver

Ответ 4

Это должно работать для Firefox, используя плагин AutoAuth:

FirefoxProfile firefoxProfile = new ProfilesIni().getProfile("default");
File ffPluginAutoAuth = new File("D:\\autoauth-2.1-fx+fn.xpi");
firefoxProfile.addExtension(ffPluginAutoAuth);
driver = new FirefoxDriver(firefoxProfile);

Ответ 5

Если вам нужно иметь дело с аутентификацией прокси-сервера NTLM, хорошей альтернативой является использование локального прокси с помощью CNTLM.

Учетные данные и домен настроены в /etc/cntlm.conf.

Впоследствии вы можете просто использовать собственный прокси-сервер, который обрабатывает все материалы NTLM.

DesiredCapabilities capabilities = DesiredCapabilities.chrome();

Proxy proxy = new Proxy();
proxy.setHttpProxy("localhost:3128");
capabilities.setCapability(CapabilityType.PROXY, proxy);

driver = new ChromeDriver(capabilities);

Ответ 6

Попробуйте следующее решение и сообщите мне в случае возникновения каких-либо проблем:

driver.get('https://example.com/')
driver.switchTo().alert().sendKeys("username" + Keys.TAB + "password");
driver.switchTo().alert().accept();

Это отлично работает для меня