SSO(Single sign on) при работе в Selenium WebDriver

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

Ну тогда вы хотя бы название SSO-решения приведите. Их вон сколько

Вдруг у кого-то есть опыт.
AutoIT может не подойти, из-за того что такие вещи как правило защищают от подобного.
Если вам не смогут помочь те кто отвечает за SSO, возможно придётся смотреть в сторону аппаратной эмуляции HID-устройств.

Спасибо за помощь, буду ковырять

Не можете снять скриншот auth поп апа ?)

Это Basic auth :smiley:

1 Like

Скорее всего при переходе на основной адрес происходит переадресация на другой домен.
И логин/пароль из url уже не помогают.
Делаем так - сначала заходим на адрес куда перенаправляют, а затем на основной

driver.get("https://login:password@адрес_переадресации.рф");
driver.get("https://login:password@основной_адрес.рф")

не совсем понятно - ето native pop up или html ? похоже что native - для етого How to Handle Authentication alert of browser in selenium webdriver? - Stack Overflow

Неожиданно, мне утверждали обратное, спасибо!
Обнаружилась другая проблема: на компе, где этот тест должен работать, запись “https://login:password@domain.com” не работает (в смысле вообще не воспринимается подобная запись), стоит хром 41 версии, использую вебдрайвер 2.53.1
Сделал скрипт через autoIT, на моем ноуте этот скрипт победил аутентификацию, на компе же со старой версией хрома и вебдрайвера не работает.
Скрипт просто вставляет логин и пароль в нужное место.

это native

Похожий вопрос уже был недавно - Как запускать тесты с прокси у которого есть логин и пароль

еще нашел способ через BrowserMob Proxy
http://internetka.in.ua/selenium-basic-authorization/

Возможно у вас в логине/пароле есть символы которые нужно закодировать (URLEncode)
т.е., если пароль pa$$word то в URL мы ставим pa%24%24word

Есть множество сайтов где это можно сделать онлайн, например - URL Encode and Decode Online Tool | SAMLTool.com

Как я понимаю, проблема не в этом, в некоторых версиях хрома такая запись просто не поддерживается. Браузер просто воспринимает это как url и пишет, что адрес https://login:password@domain.com не найден. Сейчас пытаюсь сделать через BrowserMob Proxy.

Ну насколько мне известно, это было сделано в 59-м хроме
https://www.chromestatus.com/feature/5669008342777856
А теперь обратно вернули )

Только что проверил в 41-й версии Chrome - работает basic auth через url
Попробуйте через прокси снять лог, большая вероятность что проблема в url

тогда в той ссилке, что я вставил есть решение

1.Создаете экстеншн для хрома.

var config = {
mode: “fixed_servers”,
rules: {
singleProxy: {
scheme: “http”,
host: “proxy ip”,
port: parseInt(proxy port)
},
bypassList: [“URL”]
}
};

chrome.proxy.settings.set({value: config, scope: “regular”}, function () {
});

function callbackFn(details) {
return {
authCredentials: {

        username: "login",
        password: "password"
    }
};

}

chrome.webRequest.onAuthRequired.addListener(
callbackFn,
{urls: ["<all_urls>"]},
[‘blocking’]
);

  1. Упаковка через хром
  2. Кладете в папку к тестам.
  3. На сервере или на локали разворачиваете прокси.
  4. Читаете его и прокидываете в хром при создании драйвера.

Код экстеншна взят на просторах интернета. Проверен. Тесты на протяжении полугода работают так. Все ок.

3 Likes

Спасибо большое всем за помощь!
Но все равно не вышло пока пройти авторизацию.
На данный момент: окошко не появляется, переадресации нет, переходит на нужный сайт, но страница не загружается. Была одна ошибка со слешем внутри логина, поправил.

В результате долгих мучений попробовал снова через AutoIT и все заработало. Если вдруг выйдет сделать без этого скрипта, напишу в чем была проблема сюда.

А вы уверены, что это basic auth?
Я пробовал работать на phantomjs на своем ноутбуке и проходил basic auth,
когда переходил на компьютер, где появлялось выше представленное мной окошко, аутентификация не работала. Использовал selenium, phantomjs одной версии и там, и там.

Тоже начал использовать этот extension для Chroma. До этого использовал SikuliX для борьбы с Basic Authorization для [https], нужна была кросс платформенность (AutoIt - только под Windows).