18

Я знаю, что обычно вы можете войти на сайты, которые требуют HTTP базовую аутентификацию с селеном, передавая имя пользователя и пароль в URL, например:HTTP Basic Auth через URL в Firefox не работает?

selenium.open("http://myusername:[email protected]/mypath"); 

Я был запущен тест Selenium с Firefox 2 или 3 и там я все еще получаю диалоговое окно «Требуется проверка подлинности»?

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

ответ

1

Вы могли бы попытаться манипулировать заголовки прямо так:

Во-первых, когда вы начинаете, вы должны включить Селен ти манипулируют заголовки:

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, чтобы узнать, содержит ли запрос ваш запрос auth.

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

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

+0

Привет, Гергелий, спасибо за подсказку. Я пробовал это, к сожалению, окно авторизации все еще появляется. Я попытался захватить заголовки HTTP Firebug и TamperData. Как с моим первоначальным запросом по URL http: // myusername: [email protected]/mypath Я не вижу никакого запроса. Только после ввода имени пользователя/пароля в окне auth запрос отправляется, а заголовок HTTP содержит атрибут Basic auth. – Peter

+0

Черт ... Я могу только думать о том, что осталось, смотрит в журнал сервера сам, если он был получен или отклонен ... Прошу прощения, у меня нет идей :( – Hannibal

+0

Peter , Вы можете добавлять заголовки запроса только в том случае, если используете сервер Selenium в качестве прокси. Я написал статью об этом: http://mogotest.com/blog/2010/06/23/how -to-perform-basic-auth-in-selenium Надеюсь, это поможет вам. – nirvdrum

10

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

Для Firefox, вам необходимо войти в о: конфигурациях и создать целое число network.http.phishy-UserPass длину с длиной 255. Это говорит Firefox не всплывать в окне аутентификации, если имя пользователя и пароль составляет менее 255 символов. Теперь вы можете использовать http://user:[email protected] для аутентификации.

Для Internet Explorer вы должны отредактировать реестр. В ключевом HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_HTTP_USERNAME_PASSWORD_DISABLE, создайте DWORD значения iexplore.exe и explorer.exe и убедитесь, что их значения .

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

+0

также может следовать следующим образом: http://aleetesting.blogspot.com/2011/10/selenium-webdriver-tips.html – MacGyver

+0

указать более одного домена в сети .automatic-ntlm-auth.trusted-uris string? (xxx; xxx;)? – iGallina

+0

Вам нужно больше очков. – rebelliard

0

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

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

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

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

Надеюсь, что может помочь любому, Sebastien

+0

addCustomRequestHeader не требует режима ввода прокси. Это требует, чтобы браузер использовал сервер Selenium в качестве прокси. В этом разница между «* iexploreproxy» и «* piexplore». Если вы решили создать свою собственную пусковую установку, вы даже можете использовать пусковую установку HTA против прокси-сервера Selenium в IE, например. Я настоятельно рекомендую вам избегать инъекции прокси. – nirvdrum

+0

Спасибо nirvdrum. Тогда я могу дать addCustomRequestHeader попробовать. На самом деле я получил идею из вашего блога, но я пытался реализовать ее на Java. Будучи относительно новым для Selenium, я запутался между прокси-инъекцией и использованием selenium rc в качестве прокси-сервера. –

5

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

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

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

3) Скачать AutoAuth надстройку https://addons.mozilla.org/en-US/firefox/addon/autoauth/

4) Посетите сайт, который требует HTTP Basic Authentication и сохранить учетные данные,

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

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

11

Содействие Druska's ответ, вы можете сделать такую ​​же конфигурацию, используя Селен 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.

UPDATE:

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

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

    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/

0

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.

7

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

вместо: selenium.open("http://myusername:[email protected]/mypath");

использование: selenium.open("http://myusername:[email protected]/mypath/");

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

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

C:\Program Files\Mozilla Firefox>firefox http://myusername:[email protected]/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:[email protected]/mypath/"); 


версия
Firefox 19,0,
селена -java 2.31.0

+2

Жаль, что я мог бы дать вам больше бонусов за упоминание о том, что требуется косая черта ... потрясающая. Я бил головой о стену ... –

+1

Ничего себе. я борюсь со дня. Это просто решена моя проблема с одним /. Спасибо – bhasker

+0

Помогает мне тоже. Невероятно. Я использую chromedriver. –

0

Ну, вы можете использовать скрипт Sikuli для обработки этой аутентификации Firefox p opup в 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/" }; 

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

Чтобы Прекратить Sikuli Script:.

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

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

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

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