Как обрабатывать всплывающее окно аутентификации с помощью 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 + "/");
Когда я выполняю тест, на странице отображается всплывающее окно проверки подлинности и по-прежнему загружается до нажатия кнопки "Отмена". В тот момент я могу получить доступ к следующей странице, это означает, что успех аутентификации, но все же всегда показывает всплывающее окно аутентификации
Ответы
Ответ 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();
Это отлично работает для меня