Как обрабатывать базовую аутентификацию с помощью транспортира?
Я пытаюсь протранграфа написать несколько тестов в приложении angular. Я должен войти на страницу через базовую аутентификацию в google chrome, но я понятия не имею, как это сделать.
![Authentication box]()
Я уже пробовал baseUrl: 'https://username:[email protected]'
и capabilities: {
'browserName': 'chrome',
'chromeOptions' : {
args: ['--login-user=foo', '--login-password=bar']
}
}
Но никто, если бы это сработало для меня. Кто-нибудь знает, как это сделать? Мне немного тяжело.
Ответы
Ответ 1
Короткий ответ: нет простого способа сделать это на хроме, потому что они не поддерживают изменение заголовков запросов - см. https://code.google.com/p/selenium/issues/detail?id=141 (заголовок говорит заголовки ответов, но если вы его читаете, то для всех заголовков).
Говоря, есть способы сделать это, хотя и трудно.
1) Найдите chrome extension/plugin, который позволяет вам изменять заголовок. Простой поиск вызывает многие из них: https://chrome.google.com/webstore/search/modify%20header. Вам нужно будет добавить плагин к webdriver: см. Можно ли добавить плагин к хромированному при тестировании транспортира?.
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"}
Вот проект node, который может вам помочь, https://github.com/zzo/browsermob-node, но вам все равно нужно настроить свой прокси-сервер самостоятельно,
Оба способа для хрома сложны, но вы получите то, что хотите. (или вы можете придерживаться firefox и следовать за Робертом).
Ответ 2
Фактически вы можете просто установить URL как http://username:[email protected]. Chrome справится с этим!
Ответ 3
Это потому, что Firefox не доверяет любому сайту по умолчанию с отправкой информации о auth windows. Даже если вы измените его в настройках вручную, это не повлияет на транспортир, так как он откроет Firefox с изолированной конфигурацией каждый раз, когда вы запускаете тесты от конца до конца.
Вам нужно будет запрограммировать настройку профиля Firefox и установить его настройки таким образом, чтобы он доверял локальному хосту (или другому сайту, в зависимости от того, откуда загружаются страницы)
Сначала проверьте этот пример. Он показывает, как вы можете настроить профиль и как настроить параметры.
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)
Это должно исправить:)
Ответ 4
Начиная с версии 59 Chrome больше не поддерживает URL-адреса со встроенными учетными данными.
Чтобы обойти это, я написал модуль Node authenticator-browser-extension
Node, который может быть полезен, если вы используете Protractor, WebDriver.io или аналогичные тестовые прогоны.
Чтобы использовать модуль, установите его из npm:
npm install --save-dev authenticator-browser-extension
И импортировать в protractor.conf.js
:
const { Authenticator } = require('authenticator-browser-extension');
exports.config = {
capabilities: {
browserName: 'chrome',
chromeOptions: {
extensions: [
Authenticator.for('username', 'password').asBase64()
]
}
},
}
Совет для профессионалов: не забывайте не связывать свои учетные данные с кодом, попробуйте вместо этого использовать переменные env.
Надеюсь это поможет!
январь
Ответ 5
Решение hankduan browsermob-proxy работало для меня в Chrome, но в последних версиях браузера используется вещь, называемая littleproxy, которая не поддерживает заголовки auth. Таким образом, я должен был сделать browsermob-proxy -port 9090 --use-littleproxy false
, который заработал.
Ответ 6
Вы можете использовать диспетчер учетных данных Windows, чтобы во время каждой попытки входа в него постоянно отображалось это всплывающее окно.
Добавьте свои учетные данные в категорию "Generic", перезапустите браузер (включая запущенные приложения).
Некоторое объяснение, которое я имею в настоящее время: это всплывающее окно не является "браузером", оно "посередине", между проверкой учетных данных браузера и домена. Таким образом, функции браузера (сохранение пароля, автозаполнение) не работают полностью. По той же причине Protractor/Selenium и т.д. Не имеют полного контроля над этим всплывающим окном - это по дизайну аутентификации домена.
Как не совсем уверен, что это единственная причина, есть некоторые другие намеки:
- вам также может потребоваться добавить ваш сайт в список надежных сайтов IE (IE, а не Chrome) (Chrome захватывает информацию оттуда);
- проверить "Автоматический вход с текущим именем пользователя и паролем" в IE (не в Chrome) - может не работать, если учетные данные, которые вы используете для сайта, отличаются от тех, которые вы используете для входа в систему.
Ответ 7
У меня есть проблема с входом через всплывающее окно, и странно, что это прекрасно работает с использованием веб-драйвера selenium, но без использования транспортира, мое приложение - HTTPS, все еще пытающееся выяснить это, если у кого-то из вас есть какие-либо предложения, которые будут очень полезны.
Для веб-драйвера селена: authenticateUsing (новый UserAndPassword ("abc", "xyz"));
Кроме того, транспортир поддерживает это, но по некоторым причинам это не работает: const login = browser.driver.switchTo(). alert(). authenticateAs ("abc", "xyz");
Я пробовал опцию "authenticator-browser-extension", "npm install --save-dev authenticator-browser-extension", но у меня это не сработало, так как мое приложение HTTPS, это может быть причиной?
Ответ 8
У меня есть проблема с входом через всплывающее окно, и странно, что это прекрасно работает с использованием веб-драйвера selenium, но без использования транспортира, мое приложение - HTTPS, все еще пытающееся выяснить это, если у кого-то из вас есть какие-либо предложения, которые будут очень полезны.
Для веб-драйвера селена: authenticateUsing (новый UserAndPassword ("abc", "xyz"));
Кроме того, транспортир поддерживает это, но по некоторым причинам это не работает: const login = browser.driver.switchTo(). alert(). authenticateAs ("abc", "xyz");
Я пробовал опцию "authenticator-browser-extension", "npm install --save-dev authenticator-browser-extension", но у меня это не сработало, так как мое приложение HTTPS, это может быть причиной?