Как пройти аутентификацию Selenium для тестирования? - PullRequest
0 голосов
/ 13 октября 2018

Я хочу передать форму аутентификации для тестирования с помощью Selenium.
Я хочу пропустить передачу учетных данных пользователя в URL.

Как это сделать с помощью Selenium?

Пример формы авторизации приведен ниже: Пример формы авторизации

1 Ответ

0 голосов
/ 13 октября 2018

Для прохождения этой авторизации у вас есть несколько вариантов:

Он имеет 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...