Как обрабатывать заголовки HTTP Basic Auth в Selenium Webdriver с использованием Java?

Как работать с заголовками Http Basic Auth в Selenium Web-драйвере с использованием Java? Я использовал этот формат **driver.get("http://username:password@url.com/login")** для обработки базовой аутентификации Http, когда диалоговое окно "Аутентификация" появляется в первый раз, но снова запрашивается после отправки запроса на вход на веб-сайт на сервер, но использованный ранее подход не работает после сценария входа.

Помогите, действительно оценили Спасибо

2 ответа

Решение

Попробуй это.....

     try{ 
        String webPage = "http://www.domain.com/";
        String Uname = "admin";
        String password = "admin";

        String authString = name + ":" + password;
        System.out.println("auth string: " + authString);
        byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
        String authStringEnc = new String(authEncBytes);
        System.out.println("Base64 encoded auth string: " + authStringEnc);

        URL url = new URL(webPage);
        URLConnection urlConnection = url.openConnection();
        urlConnection.setRequestProperty("Authorization", "Basic " + authStringEnc);
        InputStream is = urlConnection.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        }

Попробуйте использовать Alert.authenticateUsing(Credentials) для обработки диалога аутентификации:

Alert alert = wait.until(ExpectedConditions.alertIsPresent());     
alert.authenticateUsing(new UserAndPassword(username, password));

С BrowserMob вы можете создать прокси, который устанавливает заголовок аутентификации для запроса.

<dependency>
    <groupId>net.lightbody.bmp</groupId>
    <artifactId>browsermob-core</artifactId>
    <version>2.1.5</version>
    <scope>test</scope>
</dependency>

Запустите прокси и настройте веб-драйвер

public static WebDriver getWebdriver() {
    BrowserMobProxyServer proxy = new BrowserMobProxyServer();

    // Adds Filter to manipulate the request header
    proxy.addRequestFilter((request, contents, messageInfo) -> {
        // Create the Base64 String for authorization
        String authHeader = "Basic " + Base64.getEncoder().encodeToString(("user:password");
        // Set the Authorization header to the request
        request.headers().add("Authorization", authHeader);
        return null;
    });
    proxy.start(0);

    ChromeOptions options = new ChromeOptions();
    // Get the Selenium proxy object
    Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);
    // To manipulate requests for local host
    seleniumProxy.setNoProxy("<-loopback>");
    options.setProxy(seleniumProxy);
    // Initialize the webdriver with the proxy settings
    return new ChromeDriver(options);
}

Чтобы остановить прокси, просто позвоните

proxy.stop();
Другие вопросы по тегам