Кто-нибудь знает об обработке аутентификации браузера с использованием Selenium или любого другого инструмента во время автоматизации?
Проверка подлинности браузера с использованием Selenium
Ответ 1
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, который уже прошел аутентификацию один раз.
Ответ 2
Я потратил на это дни - буквально. Попытка пройти проверку подлинности на уровне браузера в сети моей компании, чтобы попасть в приложение. Решением было использование компонента "unsername: password @" в URL, НО для добавления косой черты в конце URL для входа в систему.
Таким образом, общий URL-адрес входа выглядит так (обратите внимание на "/" после вашей страницы):
Http://имя пользователя: [email protected]/yourpage/
Работает с Watir, Capybara и Selenium Webdriver.
Ответ 3
Все, что я прочитал в Интернете, мне не помогло. Поэтому перед тем, как сделать запрос, выполните следующие действия:
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) {
//
}
}
}
Ответ 4
Вы можете использовать класс 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();
}
}
Использование селена с роботом
http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/Robot.html
Ответ 5
Все взломы через 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());
Ответ 6
вы можете использовать автоматический IT скрипт для решения этой проблемы
WinWaitActive("[CLASS:Chrome_WidgetWin_1]", "", time)
Send("user")
Send("{TAB}")
Send("pass")
Send("{ENTER}")
Ответ 7
с Chrome 70 и другими версиями:
http://username:[email protected]/yourpage