Как выполнить базовую проверку подлинности для FirefoxDriver, ChromeDriver и IEdriver в Selenium WebDriver?
Я использую драйвер Selenium-Firefox и Selenium-Chrome-Driver версии 2.0a5 (API веб-драйверов), и я пытаюсь протестировать веб-приложение, имеющее BASIC-аутентификацию (есть всплывающее окно, которое позволяет аутентифицировать пользователя, когда я удаляю любую страницу, всплывающее окно не является частью HTML).
Теперь мне нужна стратегия аутентификации пользователя в Firefox, Chrome и IE (скоро я импортирую драйвер IE).
Я читал в нескольких статьях, что я могу настроить профиль Firefox, например, что-то вроде:
FirefoxProfile ffProfile = new FirefoxProfile();
ffProfile.setPreference("network.http.phishy-userpass-length", 255);
WebDriver driver = new FirefoxDriver(ffProfile);
driver.get("http://username:[email protected]");
но, похоже, это не работает для меня. У кого-нибудь есть рабочее решение для этих браузеров?
Ответы
Ответ 1
Правда, BASIC HTTP-аутентификация в настоящее время не поддерживается, но теперь я получил ее сейчас для FF и для Chrome.
Код, который я написал в вопросах, работает для этих драйверов. Я просто попытался использовать FF3.6 в качестве браузера Firefox по умолчанию (установленного в папке Firefox) вместо FF4 (пока не поддерживается). Для IE я могу попытаться отключить проверку подлинности через реестр Windows.
Эта страница http://code.google.com/p/selenium/issues/detail?id=34 может помочь.
Ответ 2
Я получил его для работы с веб-браузером Firefox следующим образом:
profile.SetPreference("network.automatic-ntlm-auth.trusted-uris", "google.com");
driver = new FirefoxDriver(profile);
driver.Navigate().GoToUrl("http://user:[email protected]");
Ответ 3
Добавьте этот новый профиль Firefox в свой код
ProfilesIni profile = new ProfilesIni();
FirefoxProfile myprofile = profile.getProfile("myProjectProfile"); //replace "myProjectProfile" with your profile"
WebDriver driver = new FirefoxDriver(myprofile);
Настройки конфигурации Firefox
Это работает отлично, не запрашивая аутентификацию при выполнении следующих настроек.
- Введите " about: config" на свой URL-адрес FF
- Теперь введите " Прокси" в поле поиска
- Убедитесь, что " signon.autologin.proxy" установлен " true" (по умолчанию
это "ложь" )
Загрузить по умолчанию/Пользовательский профиль Chrome для запуска тестов с использованием Selenium WebDriver
- Загрузите chromedriver.exe
- Извлеките папку chromedriver_win_26.0.1383.0.zip и найдите файл .exe в папке C:/
Добавьте этот Script в свой код 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 работают с двоичным кодом.
Ответ 4
Если вы хотите включить HTTP-аутентификатор в Internet Explorer, вам необходимо отредактировать реестр и добавить его (создать ключи, если они отсутствуют):
-
в HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
, создайте DWORD iexplore.exe
со значением 0
-
в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
, создайте DWORD iexplore.exe
со значением 0
-
Закрыть и снова открыть Internet Explorer
Если у вас есть x64 IE, путь немного отличается:
-
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
Ответ 5
Для большей переносимости это можно обработать с помощью заглушки API и с помощью Alert.
Пример кода 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 at GitHub
по теме:
Ответ 6
Существует решение для проверки подлинности с 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 для анонимного доступа.
Итак, я думаю, что ответ заключается в том, что BASIC HTTP-аутентификация в настоящее время не поддерживается.
Ответ 7
Я не смог использовать базовую аутентификацию с Selenium 2 и Chrome (из-за ошибки с Chrome), поэтому я создал расширение для Chrome, которое автоматически отправляет основные учетные данные аутентификации (см. https://chrome.google.com/webstore/detail/basic-authentication-auto/dgpgkkfheijbcgjklcbnokoleebmeokn).