Обработка аутентификации браузера с использованием 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

Другие вопросы по тегам