Как обрабатывать заголовки 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();