Как выполнить базовую проверку подлинности для FirefoxDriver, ChromeDriver и IEdriver в Selenium WebDriver?
Я использую Selenium-Firefox-драйвер и Selenium-Chrome-Driver версии 2.0a5 ( API веб-драйверов ), и я пытаюсь протестировать веб-приложение, имеющее BASIC-аутентификацию (есть всплывающее окно, которое позволяет аутентифицировать пользователя, когда Я ударил любую страницу, всплывающее окно не является частью HTML).
Теперь мне нужна страtagsя аутентификации пользователя в Firefox, Chrome и IE (скоро я импортирую драйвер IE).
Я читал в нескольких статьях, что я могу установить профиль Firefox, например, что-то вроде:
- Поддержка браузера для URL-адресов, начинающихся с двойной косой черты
- Как указать язык вашей веб-страницы, чтобы Google Chrome не предлагал его перевести
- Safari не устанавливает Cookie, но IE / FF делает
- Не удалось загрузить ресурс в Chrome
- Граница IE6 / IE7 css для выбранного элемента
FirefoxProfile ffProfile = new FirefoxProfile(); ffProfile.setPreference("network.http.phishy-userpass-length", 255); WebDriver driver = new FirefoxDriver(ffProfile); driver.get("http://username:[email protected]");
но это не работает для меня. У кого-нибудь есть рабочее решение для этих браузеров?
- Тот же шрифт, кроме его веса, выглядит по-разному в разных браузерах
- Что делать с хром отправки дополнительных запросов?
- Поддержка браузера .SVG
- Force IE8 В режим совместимости IE7
- Как отключить подсветку выделения текста?
- Как отключить представление совместимости в IE WebBrowserControl в приложении WinForms?
- Поддержка браузера для CSS-сетки
- Почему это не так: побывал в стиле css?
Я получил его для работы с веб-браузером Firefox следующим образом:
profile.SetPreference("network.automatic-ntlm-auth.trusted-uris", "google.com"); driver = new FirefoxDriver(profile); driver.Navigate().GoToUrl("http://user:[email protected]");
Правда, BASIC 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 » на свой URL-адрес FF
- Теперь введите « Прокси » в поле поиска
- Убедитесь, что « signon.autologin.proxy » установлен « true » (по умолчанию «false»)
Загрузить по умолчанию / Пользовательский профиль Chrome для запуска тестов с использованием Selenium WebDriver
- Загрузить 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-аутентификатор в 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
Для большей переносимости это можно обрабатывать с помощью заглушки 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
Связанный:
- Как отправить заголовки базовой аутентификации в Selenium? в QA SE
Существует решение для проверки подлинности с Selenium 1.x путем ручной настройки заголовков HTTP по адресу http://mogotest.com/blog/2010/06/23/how-to-perform-basic-auth-in-selenium, но я не думайте, что это можно передать Selenium 2, так как у вас нет доступа к заголовкам.
Согласно информации, приведенной здесь, в «Selenium 2 Beta 2» была добавлена поддержка базовой аутентификации для Selenium 2, но, просматривая исходный код, я вижу только, что она реализована как способ защиты удаленных серверов Selenium от анонимного доступа.
Поэтому я думаю, что ответ заключается в том, что BASIC HTTP-аутентификация в настоящее время не поддерживается.
Я не смог использовать базовую аутентификацию с Selenium 2 и Chrome (из-за ошибки с Chrome), поэтому я создал расширение для Chrome, которое автоматически отправляет основные учетные данные аутентификации (см. https://chrome.google.com/webstore/ detail / basic-authentication-auto / dgpgkkfheijbcgjklcbnokoleebmeokn ).