Для прохождения этой авторизации у вас есть несколько вариантов:
Он имеет API для базовой аутентификации, с чем-то вроде:
server.autoBasicAuthorization ("", "username", "password");
Пример:
import net.lightbody.bmp.proxy.ProxyServer;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
public class ProxyServerBasicAutorizationTest {
private ProxyServer server;
private WebDriver driver;
@Before
public void startProxy() throws Exception {
server = new ProxyServer(4444);
server.start();
server.autoBasicAuthorization("", "username", "password");
Proxy proxy = server.seleniumProxy();
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.PROXY, proxy);
driver = new FirefoxDriver(capabilities);
}
@Test
public void testAccessProtectedSite() throws Exception {
driver.get("https://example.com");
driver.findElement(By.className("sign-out"));
}
@After
public void stopProxyServer() throws Exception {
driver.quit();
server.stop();
}
}
Однако я знал, что этоработал только с базовой авторизацией.
AutoIt Проблема здесь в том, что разные браузеры делают окна по-разному.Для Firefox ваш скрипт может выглядеть следующим образом:
Local $ classForBasicAuthWindow = "[CLASS: MozillaDialogClass]";
; ждать появления окна авторизации 10 секунд
WinWait ($ classForBasicAuthWindow, "", 10)
Если WinExists ($ classForBasicAuthWindow), то
WinActivate ($ classForBasicAuthWindow)
; имя пользователя
Отправить ($ CmdLine [1] &" {TAB} ");
; пароль пользователя
Отправить ($ CmdLine [2] & "{ENTER}");
EndIf
Необходимо преобразовать .au3
файл в файл .exe
(если у вас установлена ОС Windows) и используйте его во время теста.Для этого вы можете использовать Aut2exe
.
Вы должны запустить файл .exe
перед открытием страницы браузером:
public class AutoItBasicAutorizationTest {
private final String username = "username";
private final String password = "password";
@Test
public void testBasicAuthenticationFirefox() throws Exception {
WebDriver driver = new FirefoxDriver();
File autoIt = new File("src/test/resources/auth.exe");
// run exe file with passing user credentials
Process p = Runtime.getRuntime().exec(
autoIt.getAbsolutePath() + " "
+ username + " " + password);
driver.get("https://example.com");
driver.findElement(By.className("sign-out"));
driver.quit();
}
}
Для написания скрипта для нескольких браузеров ваш скрипт должен быть чем-то вродекак:
$timeoutSec = 10;
$lookingSec = 0;
While $lookingSec < $timeoutSec
;Firefox or InternetExplorer or Chrome
If WinExists("[CLASS:MozillaDialogClass]") _
Or WinExists("[TITLE:Windows Security; CLASS:#32770]") _
Or WinExists("[CLASS:Chrome_WidgetWin_1]", _
"Authentication Required") Then
;user name
Send($CmdLine[1] & "{TAB}");
;password
Send($CmdLine[2] & "{ENTER}");
Exit;
EndIf
sleep(1000)
$lookingSec += 1;
WEnd
Однако это зависит от версии и настроек браузера.Просто проверьте информацию окна AutoIt.