2014-12-01 5 views
16

Я пробовал транспортир, чтобы написать несколько тестов в не угловом приложении. Мне нужно войти на страницу через базовую аутентификацию в google chrome, но я понятия не имею, как это сделать.Как обрабатывать базовую аутентификацию с помощью транспортира?

Authentication box

Я уже пытался baseUrl: 'https://username:[email protected]' и capabilities: { 'browserName': 'chrome', 'chromeOptions' : { args: ['--login-user=foo', '--login-password=bar'] } }

Но никто, если они работали на меня. Кто-нибудь знает, как это сделать? Мне тяжело.

+0

Имейте в виду, что вы можете [отключить базовую аутентификацию для известных IP-адресов] (http://stackoverflow.com/questions/3649852/allow-ip-address-without-authentication) (т. Е. Ваш CI-сервер). – fracz

ответ

6

Короткий ответ нет простого способа сделать это на хрому, потому что они не поддерживают изменение заголовков запросов - см. https://code.google.com/p/selenium/issues/detail?id=141 (заголовок содержит заголовки ответов, но если вы его прочитали, то для всех заголовков).

Это, как говорится, есть способы сделать это, хотя и трудно.

1) Найдите расширение/плагин chrome, которое позволяет вам изменять заголовок. Простой поиск вызывает многие из них: https://chrome.google.com/webstore/search/modify%20header. Вам нужно добавить плагин в webdriver: см. Is it possible to add a plugin to chromedriver under a protractor test?.

2) Вы можете использовать browserermob-proxy (https://github.com/lightbody/browsermob-proxy); таким образом вы маршрутизируете свой трафик через прокси-сервер, который будет добавлять заголовки для вас. Из документов:

POST /proxy/[port]/auth/basic/[domain] - Sets automatic basic authentication for the specified domain 
Payload data should be json encoded username and password name/value pairs (ex: {"username": "myUsername", "password": "myPassword"} 

Там в проект узел, который может помочь вам, https://github.com/zzo/browsermob-node, но вам все равно нужно будет настроить прокси-сервер самостоятельно.

Оба способа для хрома сложны, но вы получите то, что хотите. (или вы можете придерживаться firefox и следовать за ответом Роберта)

+0

Большое спасибо за ваш ответ. Это привело меня к решению (наконец)! – andrepm

4

Это связано с тем, что Firefox не доверяет ни одному сайту по умолчанию с отправкой информации о состоянии Windows. Даже если вы измените его в конфигурациях вручную, это не повлияет на транспортир, потому что он открывает Firefox с изолированной конфигурацией каждый раз, когда вы запускаете тесты конца до конца.

Вам нужно программно настроить профиль Firefox и установить свои предпочтения таким образом, что он будет доверять Localhost (или какой-либо другой веб-сайт, в зависимости где страницы загружаются из)

Сначала проверьте этот пример. Он показывает, как вы можете настроить профиль и как настроить параметры.

https://github.com/juliemr/protractor-demo/tree/master/howtos/setFirefoxProfile

Что она делает это, что он изменяет домашнюю страницу для каждой новой вкладки. Таким же образом (с помощью метода firefoxProfile.setPreference) вы можете изменить настройки, отвечающие за доверяющие веб-сайты. Они называются «network.automatic-ntlm-auth.trusted-uris» и «network.negotiate-auth.delegation-uris». Вам нужно установить их на «localhost». (Опять же, если они в другом месте, это, очевидно, что URL)

Это должно исправить :)

+0

Спасибо за полный ответ. Но я ищу решение для chrome :( – andrepm

+0

О, извините. У меня была такая же проблема сегодня с Firefox, и я думал, что у вас такая же проблема, и я вернусь к вам, когда буду В любом случае, я не уверен, почему это происходит в хроме. Надеюсь, вы найдете ответ :) – Robert

26

Фактически вы можете просто установить URL-адрес как http://username:[email protected]. Chrome справится с этим!

+1

wow, это должен быть ответ – artdias90

+1

Как бы вы передали имя пользователя с доменом? Я пробовал этот подход, но он терпит неудачу, когда у пользователя есть шаблон http: // domain \ user: [email protected] – aplon

+0

Я пробовал всю комбинацию имени пользователя и пароля, это не помогло мне –

0

Решение для браузера hankduan для браузера-прокси работало для меня в Chrome, но в последних версиях браузера используется вещь, называемая littleproxy, которая не поддерживает заголовки auth. Таким образом, я должен был сделать browsermob-proxy -port 9090 --use-littleproxy false, который заставил все работать.

0

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

Добавить учетные данные в категории «Generic» там, перезагрузка браузера (в том числе фоновых приложений работает).

Некоторое объяснение, которое я имею в настоящее время: это всплывающее окно не является «браузером», оно «посередине», между браузером и верификацией учетных данных домена. Таким образом, функции браузера (сохранение пароля, автозаполнение) не работают полностью. По той же причине Protractor/Selenium и т. Д. Не имеют полного контроля над этим всплывающим окном - это по дизайну аутентификации домена.

Как не совсем точно, если это единственная причина, есть некоторые другие советы: - вам также может потребоваться добавить ваш сайт в список надежных сайтов IE (IE, а не Chrome) (Chrome захватывает информацию оттуда) ; - проверка «Автоматический вход с текущим именем пользователя и паролем» в IE (не в Chrome) - может не работать, если учетные данные, которые вы используете для сайта, отличаются от тех, которые вы используете для входа в систему.

Смежные вопросы