HTTP Basic Auth через URL в Firefox не работает? - PullRequest
18 голосов
/ 11 июня 2010

Я знаю, что обычно вы можете войти на сайты, требующие базовой аутентификации HTTP с Selenium, передавая имя пользователя и пароль в URL-адресе, например ::10000

selenium.open("http://myusername:myuserpassword@mydomain.com/mypath");

Я проводил тест Selenium с Firefox 2 или 3, и там по-прежнему появляется диалоговое окно «Требуется аутентификация»?

Обновление: похоже, это не проблема Selenium, а скорее проблема Firefox. Если я введу URL-адрес вручную в FF, я получу диалоговое окно аутентификации, но если я введу URL-адрес в Opera, моя страница отображается без отображения диалогового окна аутентификации.

Ответы [ 8 ]

11 голосов
/ 09 марта 2012

Содействуя ответу Druska, вы можете выполнить ту же настройку с помощью Selenium 2 API:

FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("network.http.phishy-userpass-length", 255);
profile.setPreference("network.automatic-ntlm-auth.trusted-uris","yourDomain");
new FirefoxDriver(profile);

Этот подход проще, и вам не нужно просить каждого разработчика изменять свою конфигурацию Firefox.Я тестировал только с драйвером Firefox.

ОБНОВЛЕНИЕ :

По какой-то причине (возможно, те, которые описаны в https://stackoverflow.com/a/14348701/256245),, вышеупомянутое решение не работает сболее новые версии Firefox. Вот что работает для меня сейчас (протестировано с Firefox 19.0.2):

  1. Установить AutoAuth Плагин Firefox;
  2. Посетить сайтгде требуется аутентификация. Введите свое имя пользователя и пароль и убедитесь, что вы решили сохранить учетные данные;
  3. Сохранить установочный файл AutoAuth на жестком диске: на странице плагина щелкните правой кнопкой мыши на «Добавить в Firefox» и«Сохранить ссылку как»;
  4. Создание экземпляра веб-драйвера Firefox следующим образом:

    FirefoxProfile firefoxProfile = new ProfilesIni().getProfile("default");
    File pluginAutoAuth = new File("src/test/resources/autoauth-2.1-fx+fn.xpi");
    firefoxProfile.addExtension(pluginAutoAuth);
    return new FirefoxDriver(firefoxProfile);
    

Убедитесь, что экземпляр файла pluginAutoAuth указан с правильным путем, в котором вы сохранилиустановка плагина. Если вам неудобно использовать профиль по умолчанию, вы можете использовать Firefox Profile Manager и создать его для своих тестов.

Ссылка на это новое решение: http://watirmelon.com/2012/06/27/automatic-firefox-authentication-when-using-selenium-webdriver-with-autoauth/

10 голосов
/ 30 июля 2010

У меня есть решение для Firefox и Internet Explorer.

Для Firefox вам нужно перейти к about: config и создать целое число network.http.phishy-userpass-length с длиной 255. Это говорит Firefox не открывать окно аутентификации, если имя пользователя и пароль меньше 255 символов.Теперь вы можете использовать http://user:pass@domain.com для аутентификации.

Для Internet Explorer вы должны отредактировать реестр.В ключе HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_HTTP_USERNAME_PASSWORD_DISABLE создайте значения DWORD iexplore.exe и explorer.exe и убедитесь, что файл explorer.exe *1016* уверених значения: 0 .

Мне также пришлось переопределить аутентификацию NTLM.Чтобы NTLM проходил аутентификацию с использованием синтаксиса базовой аутентификации HTTP в Firefox, просто укажите используемые домены в строке конфигурации Firefox network.automatic-ntlm-auth.trusted-uris (сопровождает первый параметр конфигурации).Это будет работать в IE только с редактированием реестра.

7 голосов
/ 04 марта 2013

Добавьте косую черту после корня контекста:

Вместо: selenium.open("http://myusername:myuserpassword@mydomain.com/mypath");

используйте: selenium.open("http://myusername:myuserpassword@mydomain.com/mypath/");

Это делает все различия мира добавлениемкосая черта в конце корня контекста.Без косой черты открывается всплывающее окно, с косой чертой оно аутентифицируется должным образом.

Обратите внимание, что это не ошибка селена или что-то еще, а вещь Firefox.Вы также можете использовать командную строку, чтобы убедиться в этом:

 C:\Program Files\Mozilla Firefox>firefox http://myusername:myuserpassword@mydomain.com/mypath/

Для меня это работает даже без настроек сети Uris:

FirefoxProfile profile = new FirefoxProfile();
//profile.setPreference("network.automatic-ntlm-auth.trusted-uris", "mydomain.com");
//profile.setPreference("network.negotiate-auth.trusteduris", "mydomain.com");

WebDriver driver = new FirefoxDriver(profile);

driver.navigate().to("http://myusername:myuserpassword@mydomain.com/mypath/");

версииFirefox 19.0,селен-ява 2.31.0

5 голосов
/ 14 ноября 2011

Если вы используете драйвер FireFox ... Вы можете создать профиль FireFox, сохранить имя пользователя / пароль в менеджере паролей и использовать надстройку для автоматического входа в систему. Помните, что если вы создаете драйвер FireFox или Chrome в Selenium, по умолчанию он использует анонимный профиль. Так что ни одно из ваших обычных расширений / дополнений / и т.д. не будет использовано. Поэтому лучше не создавать профиль, который можно распространять и сохранять в системе контроля версий.

1) В Windows из меню «Пуск / Пуск» введите «firefox.exe -p», чтобы вызвать Диспетчер профилей, создать собственный и сохранить его в месте, где находится остальной код.

2) Не спрашивать при запуске проверяется

3) Загрузить дополнение AutoAuth https://addons.mozilla.org/en-US/firefox/addon/autoauth/

4) Посетите сайт, на котором требуется базовая аутентификация HTTP, и сохраните учетные данные

В следующий раз, когда вы зайдете на сайт, AutoAuth войдет в систему без запроса на аутентификацию.

Если у вас NTLM, вы можете изменить параметр конфигурации, включив в него имена хостов: network.automatic-ntlm-auth.trusted-uris

2 голосов
/ 11 июня 2010

Вы можете попытаться манипулировать заголовками напрямую, как это:

Сначала при запуске вы должны включить Selenium ti манипулировать заголовками:

selenium.start("addCustomRequestHeader=true");

Затем вы должны использовать базовую кодировку и манипулирование заголовками, например:

    String authHeader = "";
    try {
    BASE64Encoder coder = new BASE64Encoder();
    authHeader = coder.encode("developers:Str492ight".getBytes());
    }
    catch (Exception e)
    {
    e.printStackTrace();
    }
    setUpSelenium();
    startSelenium();
    selenium.addCustomRequestHeader("Authorization", "Basic " + authHeader);
    selenium.open("/");
    selenium.waitForPageToLoad("10000");

Пробел после Basic необходим. Вот так выглядит базовый HTTP-заголовок аутентификации ..

Более того, вы можете использовать некоторые Http Watchers, чтобы узнать, содержит ли запрос ваш запрос на аутентификацию.

Либо используйте Wireshark, либо лучше Fiddler или Charles Proxy.

Надеюсь, это помогло. Gergely.

0 голосов
/ 25 марта 2014

Что ж, вы можете использовать сценарий Sikuli для обработки этого всплывающего окна Аутентификации Firefox как в Windows, так и в среде Linux.

  • Загрузка и настройка Sikuli в Windows / Linux (необходимо установить зависимости)
  • Используйте следующий скрипт Sikuli для обработки всплывающих окон: где Authentilcat1.png - это всплывающее изображение, и оно будет обрабатывать 100 всплывающих окон

for i in range (100): while exists(Pattern("Authentlcatl.png").similar(0.99)): print("Found Authentication Popup") wait(2) type("admin" + Key.TAB) type("admin" + Key.ENTER)

  • Используйте следующий код для запуска и завершения сценария Sikuli из кода Java:

Для запуска сценария Sikuli :

String[] lincmd = { "bash", "-c", "sudo java -jar Sikuli-X/Sikuli-IDE/sikuli-script.jar Sikuli-X/Sikuli-IDE/new1.sikuli/" };
* * 1 022 java.lang.Runtime.getRuntime () Exec (lincmd);.

Завершение сценария Сикули :

String[] lincmd = { "bash", "-c", "sudo kill $(ps aux | grep '[s]ikuli' | awk '{print $2}')" };

java.lang.Runtime.getRuntime () Exec (lincmd);.

  • После запуска сценария Sikuli из кода Java, сценарий Sikuli будет запускаться как отдельный процесс отдельно, и, наконец, в коде Java, завершающем сценарий Sikuli.

  • Таким образом, всякий раз, когда на экране появляется всплывающее окно, скрипт Sikuli будет обрабатывать.

0 голосов
/ 16 января 2013

Firefox 17 Обработка «имя пользователя: пароль» (RFC1738) по умолчанию запрещена в Firefox (она работала ранее).Тем не менее, я обнаружил, что его можно включить:

FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("network.negotiate-auth.trusteduris", hostname);
driver = new FirefoxDriver(profile);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
selenium = new WebDriverBackedSelenium(driver, "http:// + username + ":"
    + password + "@"
    + hostname + ":" + port + baseUrl);

Работает на Selenium 2.28.0, Firefox 17;используется для входа в DigestAuth.

0 голосов
/ 11 августа 2010

Как уже упоминалось, решение addCustomRequestHeader может работать только в режиме внедрения прокси. Но когда я попытался реализовать это, я столкнулся с другими проблемами, связанными с этим режимом внедрения прокси.

Мне не ясно, работает ли вообще прокси-инъекция при использовании клиента Java. Каждый раз, когда я вызывал open (), я получал странную ошибку, в которой говорилось: «this.onXhrStateChange.bind не является функцией». Единственное решение, которое я нашел, подразумевало, что вам нужно добавить дополнительный параметр со значением «true» в метод open (), но клиентский API Java принимает только один параметр.

Поэтому мне пришлось согласиться с решениями по настройке браузера, описанными выше, которые мне не очень удобны, поскольку они зависят от готовности поставщика их поддерживать.

Перенос ваших тестов на Selenium 2 (пока еще альфа-версия) может быть более перспективным, но в моем случае это будет невозможно, пока Selenium Grid не поддержит Selenium 2.

Надеюсь, что кто-нибудь может помочь, Себастьен

...