Обработка аутентификации браузера с использованием Selenium
Кто-нибудь знает об обработке проверки подлинности браузера с помощью Selenium или любого другого инструмента во время автоматизации?
6 ответов
РЕДАКТИРОВАТЬ в 2015 году:
Этот ответ устарел. WebDriver в настоящее время поддерживает аутентификацию! См. Как обрабатывать всплывающее окно аутентификации с помощью Selenium WebDriver с использованием Java
Оригинальный ответ:
Селен не очень хорошо справляется с этим.
Вы можете попробовать использовать http://username:password@example.com/yourpage
вместо просто http://example.com/yourpage
Тем не менее, насколько я знаю, Firefox по-прежнему будет отображать диалоговое окно браузера с запросом подтверждения.
Вы можете попробовать Robot, если вы используете Java (или любой подобный инструмент, такой как AutoIt).
Вы могли бы использовать driver.manage().addCookie()
если вы используете WebDriver.
Или пользовательский FirefoxProfile, который уже прошел проверку подлинности один раз.
Я потратил на это дни - буквально. Попытка пройти проверку подлинности на уровне браузера в сети моей компании, чтобы попасть в приложение. Решением было использование компонента "unsername:password@" в URL, НО для добавления косой черты в конце URL для входа.
Таким образом, общий URL-адрес входа выглядит так (обратите внимание на "/" после вашей страницы):
http://username:password@example.com/yourpage/
Работает с Watir, Capybara и Selenium Webdriver.
Все хаки через auto-it, sikuli и т. Д. Просто тратят время, когда вы запускаете его в своем решении CI, используя несколько типов браузеров / OS / Version / Resolutions и т. Д.
Способ сделать это правильно - определить действительный метод аутентификации и выполнить вход в систему, используя, например, протокол Rest.
Я использовал его, чтобы получить файл cookie JSESIONID и вставить его в драйвер селена. Подсказка: сначала перейдите к несуществующему URL доминии, затем установите cookie, затем перейдите к нужному URL - вы вошли в систему.
use: проверка подлинности клиента rest для получения идентификатора 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());
Все, что я прочитал в Интернете, не помогло мне. Поэтому, прежде чем сделать запрос, вот так:
driver.get(url);
Вы должны запустить новый поток, как это:
RunScript runScript = new RunScript();
runScript.start();
В этом случае вы можете ввести логин и пароль в другой ветке следующего класса
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) {
//
}
}
}
С Chrome 70 и другими версиями:
http://username:password@example.com/yourpage
Вы можете использовать автоматический IT скрипт для решения этой проблемы
WinWaitActive("[CLASS:Chrome_WidgetWin_1]", "", time)
Send("user")
Send("{TAB}")
Send("pass")
Send("{ENTER}")
Вы можете использовать класс 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