Проверка подлинности браузера с использованием Selenium

Кто-нибудь знает об обработке аутентификации браузера с использованием Selenium или любого другого инструмента во время автоматизации?

EDIT в 2015 году:

Этот ответ устарел. В настоящее время WebDriver поддерживает аутентификацию! См. Раздел Как обрабатывать всплывающее окно аутентификации с помощью Selenium WebDriver с помощью Java


Оригинальный ответ:

Selenium не очень хорошо справляется с этим.


Вы можете попробовать использовать http://username:[email protected]/yourpage

вместо просто http://example.com/yourpage

Однако, насколько я знаю, Firefox все равно откроет диалоговое окно браузера с запросом подтверждения.


Вы можете попробовать Robot, если вы используете Java (или любой аналогичный инструмент, такой как AutoIt ).


Вы можете использовать driver.manage().addCookie() если вы используете WebDriver.


Или пользовательский FirefoxProfile , который уже прошел аутентификацию один раз.

Я провел дни на этом – буквально. Попытка пройти проверку подлинности на уровне браузера в моей сети компании, чтобы попасть в приложение. Решение заключалось в использовании компонента «имя пользователя: пароль @» в URL-адресе, но для добавления косой черты в конце URL-адреса входа .

Таким образом, общий URL-адрес входа выглядит так (обратите внимание на «/» после вашей страницы ):

Http: // имя пользователя: [email protected]/yourpage/

Работает с Watir, Capybara и Selenium Webdriver.

Все, что я читал в Интернете, мне не помогло. Поэтому, прежде чем делать запрос, вот так:

 driver.get(url); 

вам нужно запустить новый stream следующим образом:

 RunScript runScript = new RunScript(); runScript.start(); 

В этом случае вы можете вводить логин и пароль в другой stream следующего classа

 public class RunScript extends Thread { @Override public void run() { try { File file = new File("D:\\jacob-1.18-x86.dll"); System.setProperty(LibraryLoader.JACOB_DLL_PATH, file.getAbsolutePath()); AutoItX autoIt = new AutoItX(); Thread.sleep(2000); autoIt.winActivate("yourWindowName", ""); autoIt.winWaitActive("yourWindowName"); if (autoIt.winExists("yourWindowName")) { autoIt.send("username{TAB}", false); autoIt.send("password{Enter}", false); } } } catch (InterruptedException ex) { // } } } 

Вы можете использовать class Java Robot с Selenium 2 / Selenium WebDriver, используя Firefox

 WebDriver driver = new FirefoxDriver(); driver.get("http://localhost:9990"); WebElement myDynamicElement = driver.findElement(By.id("app")); Alert alert = driver.switchTo().alert(); try { Robot robot = new Robot(); alert.sendKeys("username"); robot.keyPress(KeyEvent.VK_TAB);//go to password feild robot.keyPress(KeyEvent.VK_P); robot.keyPress(KeyEvent.VK_A); robot.keyPress(KeyEvent.VK_S); robot.keyPress(KeyEvent.VK_S); robot.keyPress(KeyEvent.VK_ENTER); } catch (AWTException e) { e.printStackTrace(); } } 

Использование seleniumа с роботом
http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/Robot.html

Все хаки через auto-it, sikuli и т. Д. Просто теряют время, когда вы запустите его в своем решении CI, используя несколько типов браузера / OS / Version / Resolutions и т. Д.

Способ сделать это правильно – это идентифицировать фактический метод аутентификации и выполнить вход в систему, например, используя протокол Rest.

Я использовал его для получения файла cookie JSESIONID и вставлял его в драйвер selenium. намекните на это: сначала перейдите к не выходящему URL-адресу domian, затем установите cookie, затем перейдите к нужному URL-адресу – вы вошли в систему.

используйте: аутентификацию клиента клиента для получения идентификатора JSESSION

и с этой информацией:

 browser().navigate(foo.getUrl()+"non-exiting-url"); //the information got from the rest client login: Cookie cookie = new Cookie(name, value, domain, path, expiry, isSecure, isHttpOnly); try { driver.manage().addCookie(cookie); } catch (Exception e) { System.out.println(e.toString()); } browser().navigate(foo.getUrl()); из browser().navigate(foo.getUrl()+"non-exiting-url"); //the information got from the rest client login: Cookie cookie = new Cookie(name, value, domain, path, expiry, isSecure, isHttpOnly); try { driver.manage().addCookie(cookie); } catch (Exception e) { System.out.println(e.toString()); } browser().navigate(foo.getUrl()); 

вы можете использовать автоматический ИТ-скрипт для решения этой проблемы

 WinWaitActive("[CLASS:Chrome_WidgetWin_1]", "", time) Send("user") Send("{TAB}") Send("pass") Send("{ENTER}") 
  • Аутентификация против авторизации
  • Аутентификация на основе токенов в ядре ASP.NET
  • Аутентификация RESTful
  • OWIN - Authentication.SignOut (), похоже, не удаляет файл cookie
  • Базовая проверка подлинности HTTP в Node.JS?
  • Как защитить MongoDB с именем пользователя и паролем
  • Keycloak извлекает пользовательские атрибуты для KeycloakPrincipal
  • Что такое «область» в базовой аутентификации
  • Где я могу найти список URL-адресов поставщика OpenID?
  • Понимание пассива сериализации десериализации
  • Добавление аутентификации идентификатора ASP.NET MVC5 в существующий проект
  • Давайте будем гением компьютера.