Как выполнить базовую аутентификацию для FirefoxDriver, ChromeDriver и IEdriver в Selenium WebDriver? - PullRequest
39 голосов
/ 15 апреля 2011

Я использую Selenium-Firefox-драйвер и Selenium-Chrome-Driver версия 2.0a5 ( API веб-драйверов ), и я пытаюсьпротестировать веб-приложение с базовой аутентификацией (появляется всплывающее окно для аутентификации пользователя, когда я нажимаю на какую-либо страницу, оно не является частью 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:password@hostname");  

, но, похоже, он не работает для меня.У кого-нибудь есть рабочее решение для этих браузеров?

Ответы [ 7 ]

10 голосов
/ 06 октября 2012

Я получил его для работы с веб-драйвером Firefox следующим образом:

profile.SetPreference("network.automatic-ntlm-auth.trusted-uris", "google.com");
driver = new FirefoxDriver(profile);

driver.Navigate().GoToUrl("http://user:pwd@google.com");
6 голосов
/ 19 апреля 2011

Правда, BASIC HTTP-аутентификация в настоящее время не поддерживается, но теперь она работает для FF и Chrome.

Код, который я написал в вопросах, работает для этих драйверов.Я просто попытался использовать FF3.6 в качестве браузера Firefox по умолчанию (установленного в папке Firefox) вместо FF4 (пока не поддерживается).Для IE я могу попытаться отключить аутентификацию через реестр Windows.

Эта страница http://code.google.com/p/selenium/issues/detail?id=34 может помочь.

3 голосов
/ 26 апреля 2013

Добавьте этот новый профиль 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
  • Теперь введите " Proxy " в поле поиска
  • Убедитесь, что " signon.autologin.proxy " установлено " true " (по умолчанию это "ложь")

Загрузка профиля по умолчанию / пользовательского Chrome для запуска тестов с использованием Selenium WebDriver


  1. Скачать chromedriver.exe
  2. Извлеките папку chromedriver_win_26.0.1383.0.zip и найдите файл .exe в C: / folder

Добавьте этот скрипт в свой код 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 работают с двоичным файлом.

2 голосов
/ 03 мая 2015

Для большей переносимости это может быть обработано заглушкой API и с использованием Alert .

Пример Java-кода ( sample ):

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

Связанный:

2 голосов
/ 19 ноября 2013

Если вы хотите включить http auth в Internet Explorer, вам нужно отредактировать реестр и добавить это (создать ключи, если их нет):

  1. in 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
1 голос
/ 11 августа 2013

Мне не удалось использовать базовую аутентификацию с Selenium 2 и Chrome (из-за ошибки в Chrome), поэтому я создал расширение для Chrome, которое автоматически отправляет учетные данные базовой аутентификации (см. https://chrome.google.com/webstore/detail/basic-authentication-auto/dgpgkkfheijbcgjklcbnokoleebmeokn).

1 голос
/ 15 апреля 2011

Существует решение для выполнения аутентификации с помощью 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-аутентификация в настоящее время не поддерживается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...