Как выполнить базовую аутентификацию для 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 Вебдрайвера


  1. скачать chromedriver.exe
  2. извлечь 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, вам нужно отредактировать реестр и добавить это (создать ключи, если их нет):

  1. на HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE, создайте DWORD iexplore.exe стоимостью 0

  2. на HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE, создать DWORD iexplore.exe стоимостью 0

  3. закройте и снова откройте 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).