Рубрики
Без рубрики

Как Обработать Всплывающее Окно Входа В Selenium WebDriver С Помощью Java?

Вас когда-нибудь запрашивали учетные данные при доступе к веб-сайту в браузере? Давайте разберемся, что… Помеченный как java, selenium, тестирование.

Вас когда-нибудь запрашивали учетные данные при доступе к веб-сайту в браузере? Позвольте нам понять, почему нас просят ввести учетные данные при доступе к нескольким веб-сайтам. Эта статья в основном посвящена введению во всплывающие окна аутентификации на веб-сайте и различным способам их обработки с помощью Selenium. Прежде чем мы углубимся и посмотрим, как обрабатывать всплывающее окно входа в Selenium WebDriver , давайте сначала посмотрим, как выглядит всплывающее окно аутентификации на веб-сайте.

Давайте перейдем к образцу веб-сайта. При входе на веб-сайт пользователю будет предложено войти во всплывающее окно. Пользователь должен ввести имя пользователя и пароль для дальнейшей навигации по сайту. Ниже приведен скриншот всплывающего окна аутентификации, которое запрашивается на веб-сайте.

Почему это происходит?

Некоторые веб-сайты, имеющие доступ к серверам, требуют учетных данных для дальнейшей навигации. Следовательно, при доступе к этим веб-сайтам пользователю будет предложено во всплывающем окне аутентификации ввести свои учетные данные.

В этом Selenium WebDriver В учебном пособии по Java мы рассмотрим различные способы обработки всплывающих окон входа в Selenium WebDriver с использованием Java.

Как обработать всплывающее окно входа В Selenium WebDriver?

Для обработки всплывающих окон входа в Selenium WebDriver с использованием Java мы можем использовать любой из приведенных ниже способов.

  • Передайте учетные данные в URL-адресе веб-страницы.
  • Использование AutoIt.
  • Использование бета-версии Selenium 4.

Давайте теперь подробно разберемся в каждом методе.

Обработка всплывающего окна входа в Selenium WebDriver путем передачи имени пользователя и пароля в URL-адресе

Всплывающее окно базовой аутентификации аналогично оповещению эти всплывающие окна появляются при переходе браузера на определенную веб-страницу. Чтобы обработать всплывающее окно базовой аутентификации, мы можем передать имя пользователя и пароль вместе с URL-адресом веб-страницы.

Синтаксис для обработки этого всплывающего окна входа в систему следующий:

https://username: [электронная почта защищена]

Когда появится всплывающее окно входа в систему, мы вводим имя пользователя как “admin” и пароль как “admin”, а затем входим в систему. Таким образом, пользователь будет успешно авторизован на веб-сайте.

Ниже приведен код для обработки основного всплывающего окна входа в систему на веб-странице путем передачи имени пользователя и пароля в URL-адресе веб-страницы.

package Pages;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class PopUp {

    public static void main(String[] args) {

            System.setProperty("webdriver.chrome.driver", "C:\\Users\\Shalini\\Downloads\\chromedriver\\chromedriver.exe");
            //Instantiate the webdriver
            WebDriver driver = new ChromeDriver();

            //Set the username
            String username = "admin";

            //Set the password
            String password = "admin";


            String URL = "https://" +username +":" +password +"@"+ "the-internet.herokuapp.com/basic_auth";
            driver.get(URL);

            driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
            String title = driver.getTitle();

            System.out.println("The page title is "+title);

            String text = driver.findElement(By.tagName("p")).getText();

            System.out.println("The test present in page is ==> "+text);

            driver.close();
            driver.quit();

    }

}

Как только учетные данные будут введены правильно, пользователь будет успешно аутентифицирован, и на веб-сайте появится соответствующее сообщение.

Обработка всплывающего окна входа в Selenium WebDriver с помощью AutoIt

AutoIt – это язык сценариев, который широко используется для автоматизации приложений с графическим интерфейсом и может автоматизировать задачи, связанные с взаимодействием клавиатуры и мыши. Он широко используется для автоматизации задач, связанных с загрузкой файлов, загрузкой файлов, обработкой всплывающих окон аутентификации и т.д. Теперь давайте установим AutoIt и используем его для обработки всплывающего окна входа в систему на веб-странице.

  1. Скачайте AutoIt с официального сайта AutoIt или по ссылке AutoIt для скачивания .
  2. Перейдите в установленную папку и откройте редактор AutoIt.
  3. В редакторе введите приведенный ниже код, чтобы отправить имя пользователя и пароль для обработки всплывающего окна аутентификации на веб-сайте.
Send("admin")
Send("(TAB)")
Send("admin")
Send("(ENTER)")
  1. Сохраните файл с расширением .au3.
  2. Теперь, чтобы преобразовать скрипт в исполняемый файл, щелкните правой кнопкой мыши на сохраненном файле и выберите команду Скомпилировать скрипт. Вы увидите, что исполняемый файл был создан.
  3. В среде IDE задайте путь к файлу драйвера, введите URL-адрес веб-страницы и введите путь к исполняемому файлу AutoIt, как показано ниже.
package Pages;

import java.io.IOException;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class PopUpAutoIT {

    public static void main(String[] args) throws IOException {

            System.setProperty("webdriver.chrome.driver", "C:\\Users\\Shalini\\Downloads\\chromedriver\\chromedriver.exe");
            WebDriver driver = new ChromeDriver();

            driver.manage().window().maximize();
            String URL ="http://the-internet.herokuapp.com/basic_auth";

            driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
            Runtime.getRuntime().exec("C:\\Users\\Shalini\\Desktop\\Login.exe");

            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            driver.close();

    }

}

До сих пор мы видели различные способы обработки всплывающих окон аутентификации в Selenium. Чтобы перейти на продвинутый уровень, давайте попробуем то же самое, используя новые функции последней бета-версии Selenium 4.

Обработка всплывающего окна входа в Selenium WebDriver с использованием бета-версии Selenium 4

В последней версии Selenium представлен класс драйвера Chromium, который имеет два метода, а именно get Dev Tools() и executeCdpCommand() для доступа к инструментам разработки chrome.

Метод get Dev Tools() возвращает новый объект DevTools, который позволяет пользователю отправлять встроенные команды Selenium. В предыдущих версиях Selenium мы использовали метод передачи учетных данных в URL веб-страницы для обработки основного всплывающего окна входа на веб-сайте. Теперь в бета-версии Selenium 4 мы можем легко настроить базовую аутентификацию, отправив дополнительные HTTP-заголовки.

Ниже приведен фрагмент кода обработки всплывающего окна входа в систему.

import com.google.common.util.concurrent.Uninterruptibles;
import com.sun.xml.messaging.saaj.util.Base64;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chromium.ChromiumDriver;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.v86.network.Network;
import org.openqa.selenium.devtools.v86.network.model.Headers;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.*;
import java.time.Duration;
import java.util.concurrent.TimeUnit;
import com.google.common.util.concurrent.Uninterruptibles;

import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;



public class Auth {

        public static void main(String[] args) {
                System.setProperty("webdriver.chrome.driver", "C:\\Users\\Shalini\\Downloads\\chromedriver\\chromedriver.exe");
                ChromeDriver driver = new ChromeDriver();

                DevTools dev = driver.getDevTools();
                dev.createSession();
                dev.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));
                Map map = new HashMap<>();
                map.put("Authorization", "Basic " + new String(new Base64().encode("admin:admin".getBytes())));
                dev.send(Network.setExtraHTTPHeaders(new Headers(map)));
                driver.navigate().to("https://the-internet.herokuapp.com/basic_auth");
                Uninterruptibles.sleepUninterruptibly(10, TimeUnit.SECONDS);

                driver.close();
        }

}

Lambda Test предоставляет онлайн-облачную платформу для выполнения Selenium automation testing с легкостью в облачной Selenium Grid. Lambda Test предлагает крупнейшую платформу для кросс-браузерного тестирования веб- и мобильных устройств, которая дает вам возможность тестировать более 2000 различных комбинаций браузера и операционной системы.

Как только вы войдете на веб-сайт, вам будет предоставлено имя пользователя и ключ доступа, которые можно использовать для запуска ваших скриптов в облаке. Вы можете получить имя пользователя и ключ доступа из раздела Профиль .

Ниже приведен фрагмент кода для выполнения всплывающего теста входа в систему в лямбда-тесте.

package Pages;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class Demo {

    String username = "USERNAME"; //Enter your username 
    String accesskey = "ACCESSKEY"; //Enter your accesskey

    static RemoteWebDriver driver = null;
    String gridURL = "@hub.lambdatest.com/wd/hub";

    boolean status = false;

    @BeforeTest
    @Parameters("browser")
    public void setUp(String browser)throws MalformedURLException  
    {           
        if(browser.equalsIgnoreCase("chrome"))
        {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("browserName", "chrome");    //To specify the browser
        capabilities.setCapability("version", "70.0");      //To specify the browser version
        capabilities.setCapability("platform", "win10");        // To specify the OS
        capabilities.setCapability("build", "AuthPopUp");               //To identify the test 
        capabilities.setCapability("name", "AuthPopUpTest");
        capabilities.setCapability("network", true);        // To enable network logs
        capabilities.setCapability("visual", true);             // To enable step by step screenshot
        capabilities.setCapability("video", true);          // To enable video recording
        capabilities.setCapability("console", true);            // To capture console logs
        try {
            driver = new RemoteWebDriver(new URL("https://" + username + ":" + accesskey + gridURL), capabilities);
        } catch (MalformedURLException e) {
            System.out.println("Invalid grid URL");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        }

        else if(browser.equalsIgnoreCase("Firefox"))
        {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("browserName", "Firefox");   //To specify the browser
        capabilities.setCapability("version", "76.0");      //To specify the browser version
        capabilities.setCapability("platform", "win10");        // To specify the OS
        capabilities.setCapability("build", " AuthPopUp");  //To identify the test
        capabilities.setCapability("name", " AuthPopUpTest");
        capabilities.setCapability("network", true);        // To enable network logs
        capabilities.setCapability("visual", true);             // To enable step by step screenshot
        capabilities.setCapability("video", true);                        // To enable video recording
        capabilities.setCapability("console", true);            // To capture console logs
        try {
            driver = new RemoteWebDriver(new URL("https://" + username + ":" + accesskey + gridURL), capabilities);
        } catch (MalformedURLException e) {
            System.out.println("Invalid grid URL");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
}
}


        @Test
        public void Login() {
            String username = "admin";

            String password = "admin";


            String URL = "https://" +username +":" +password +"@"+ "the-internet.herokuapp.com/basic_auth";
            driver.get(URL);

            driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
            String title = driver.getTitle();

            System.out.println("The page title is "+title);

            String text = driver.findElement(By.tagName("p")).getText();

            System.out.println("The test present in page is ==> "+text);



    }

     @AfterTest
     public void tearDown() {
         driver.quit();
}


}

Ниже приведен фрагмент кода для выполнения всплывающего теста входа в систему в лямбда-тесте.













Чтобы запустить этот тест на платформе Lambda Test, пожалуйста, выполните указанные ниже действия:

  1. Щелкните правой кнопкой мыши на TestNG.xml что вы создали в своей ИДЕЕ.
  2. Нажмите Запустить как–> TestNG Suite. Теперь тест будет выполняться на платформе Lambda Test platform.
  3. Как только ваши тесты будут выполнены, перейдите в свою учетную запись Lambda Test в браузере и нажмите Панель инструментов на левой боковой панели.

На этой странице представлен обзор тестов, выполняемых на платформе.

  1. Затем щелкните ярлык Автоматизации на левой боковой панели.

Это место, где вы должны идентифицировать выполненные вами тесты. Он содержит несколько тестов, и чтобы определить конкретный тест, вам необходимо выполнить поиск по имени сборки, которое вы указали в скрипте.

В приведенном выше коде мы назвали сборку “AuthPopUp” и теперь ищем эту сборку. На этой странице также отображается статус вашей сборки и время, затраченное на выполнение.

  1. Щелкните представление сборки, чтобы просмотреть выполненные тесты.

Вы можете увидеть тест “Auth Popup Test”, который был предоставлен в скрипте, и вот как мы идентифицируем наши тесты в лямбда-тесте. Здесь вы можете проверить все сведения о тестировании, которые были предоставлены в скрипте, такие как браузер, версия браузера, операционная система и версия, в которой был выполнен тест. Это будет то же самое, что и в тестовом скрипте.

Поскольку мы включили запись видео в коде, вы увидите видео, прикрепленное к тесту на этой странице, в котором записаны все этапы тестирования во время выполнения теста.

Воспроизводя видео, вы можете просмотреть, как выполнялись тесты. В случае сбоя это помогло бы проанализировать точку, в которой произошел сбой.

заворачивать

Подводя итог, мы видели различные способы обработки всплывающего окна входа в систему на веб-странице с использованием Selenium WebDriver на Java. Я надеюсь, что вы все получили хорошие знания благодаря этой статье. Пожалуйста, поделитесь этой статьей со своими друзьями и коллегами, и я хотел бы услышать ваши комментарии по этому поводу. Счастливого Тестирования…! 😊

Оригинал: “https://dev.to/shalinibaskaran12/how-to-handle-login-pop-up-in-selenium-webdriver-using-java-1co5”