Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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