Как выполнить базовую аутентификацию для FirefoxDriver, ChromeDriver и IEdriver в Selenium WebDriver?
Я использую Selenium-Firefox-драйвер и Селен-Хром-Драйвера версия 2.0a5 (API веб-драйвера), и я пытаюсь проверить веб-приложение, которое имеет базовую аутентификацию (есть всплывающее окно, которое подходит для аутентификации пользователя, когда я нажимаю любую страницу, всплывающее окно не является частью HTML).
теперь мне нужна стратегия аутентификации пользователя в Firefox, Chrome и IE (я собираюсь импортировать драйвер IE в ближайшее время).
I читал в нескольких статьях, что я могу создать профиль Firefox например..что-то вроде:
FirefoxProfile ffProfile = new FirefoxProfile();
ffProfile.setPreference("network.http.phishy-userpass-length", 255);
WebDriver driver = new FirefoxDriver(ffProfile);
driver.get("http://username:password@hostname");
но это, кажется, не работает для меня. У кого-нибудь есть рабочее решение для этих браузеров?
7 ответов
Я получил его для работы с Firefox webdriver следующим образом:
profile.SetPreference("network.automatic-ntlm-auth.trusted-uris", "google.com");
driver = new FirefoxDriver(profile);
driver.Navigate().GoToUrl("http://user:pwd@google.com");
True, базовая http-аутентификация в настоящее время не поддерживается, но я получил ее работу для FF и для Chrome.
код, который я написал в вопросы работы для водителей. Я просто попробовал использовать FF3.6 как браузер Firefox по умолчанию (установлен в папке Firefox) вместо FF4 (пока не поддерживается). Для IE я могу попытаться отключить аутентификацию через реестр Windows.
эта страница http://code.google.com/p/selenium/issues/detail?id=34 май помощь.
добавьте этот новый профиль Firefox в свой код
ProfilesIni profile = new ProfilesIni();
FirefoxProfile myprofile = profile.getProfile("myProjectProfile"); //replace "myProjectProfile" with your profile"
WebDriver driver = new FirefoxDriver(myprofile);
настройки конфигурации Firefox
это прекрасно работает без запроса аутентификации при выполнении следующих настроек..
- типа "about: config " на вашем FF url
- теперь типа "Прокси" в поле поиска
- убедитесь, что "вход в систему.автовход.прокси" указан "правда" (по умолчанию это "ложь")
загрузить по умолчанию / пользовательский профиль Chrome для запуска тестов с помощью Selenium Вебдрайвера
- скачать chromedriver.exe
- извлечь chromedriver_win_26.0.1383.0.zip папка и найдите .exe файл в папку c:/
добавьте этот скрипт в свой JAVA-код
DesiredCapabilities capability = DesiredCapabilities.chrome();
System.setProperty("webdriver.chrome.driver", "C:/chromedriver.exe");
capability.setCapability("chrome.switches", Arrays.asList("–disable-extensions"));
capability.setCapability("chrome.binary", "C:/Users/user_name/AppData/Local/Google/Chrome/Application/chrome.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("user-data-dir=C:/Users/user_name/AppData/Local/Google/Chrome/User Data/Default");
driver = new ChromeDriver(capability);
Примечание: IE не нуждается в настройке профиля для запуска тестов, потому что они запуск на сервере пользователя в то время как Firefox и Chrome работает с двоичным кодом.
если вы хотите включить http auth в Internet explorer, вам нужно отредактировать реестр и добавить это (создать ключи, если их нет):
на
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
, создайте DWORDiexplore.exe
стоимостью0
на
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
, создать DWORDiexplore.exe
стоимостью0
закройте и снова откройте Internet explorer
если у вас есть x64 IE, путь немного отличается :
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
для большей переносимости это может быть обработано stub API и с помощью предупреждение.
пример кода Java (пример):
import org.openqa.selenium.Alert;
import org.openqa.selenium.security.Credentials;
public void authenticateUsing(Credentials credentials) {
private final Alert alert;
alert.authenticateUsing(credentials);
}
см. также:auth_tests.py
или отправив ключи вручную как:
SendKeys("user");
SendKeys("{TAB}");
SendKeys("password");
SendKeys("~"); // Enter
см. Также следующий запрос: #453 Portable BASIC Auth на GitHub
по теме:
существует решение для выполнения аутентификации с помощью Selenium 1.x, вручную установив заголовки HTTP вhttp://mogotest.com/blog/2010/06/23/how-to-perform-basic-auth-in-selenium но я не думаю, что это можно перенести на Selenium 2, так как у вас нет доступа к заголовкам.
по информации здесь "базовая поддержка аутентификации для Selenium 2" была добавлена в Selenium 2 Beta 2, но просматривая исходный код, я могу видеть только он реализован как способ защиты удаленных серверов Selenium от анонимного доступа.
поэтому я думаю, что ответ заключается в том, что базовая аутентификация HTTP в настоящее время не поддерживается.
Я не смог использовать базовую аутентификацию с Selenium 2 и Chrome (из - за ошибки с Chrome), поэтому я создал расширение для Chrome, которое автоматически отправляет базовые учетные данные аутентификации (см. https://chrome.google.com/webstore/detail/basic-authentication-auto/dgpgkkfheijbcgjklcbnokoleebmeokn).