Selenium WebDriver의 로그인 팝업 창을 Java로 어떻게 처리합니까?

38006 단어 seleniumtestingjava
브라우저에서 웹 사이트를 방문할 때 자격 증명을 요청받은 적이 있습니까?우리는 왜 우리가 일부 사이트를 방문할 때 증빙서류 작성을 요구받는지 이해할 수 있다.본고는 주로 사이트의 인증 팝업 창과 Selenium을 이용하여 서로 다른 방법을 소개한다.Selenium WebDriver의 로그인 팝업 창을 어떻게 처리하는지 깊이 있게 이해하기 전에 인증 팝업 창이 사이트의 외관을 살펴보자.
우리는 예시 사이트로 내비게이션을 할 것이다.사용자가 이 사이트를 방문할 때, 시스템은 로그인 알림을 팝업할 것이다.사용자는 반드시 사용자 이름과 비밀번호를 입력해야만 이 사이트를 더욱 탐색할 수 있다.다음은 웹 사이트에 제시된 인증 팝업 창의 화면 캡처입니다.

왜 이러지?
일부 서버를 방문할 수 있는 사이트는 증거를 필요로 해야만 더욱 내비게이션을 할 수 있다.따라서 이러한 사이트를 방문할 때 인증 팝업 창이 뜨고 사용자가 자격 증명을 입력하도록 알린다.
이 Selenium WebDriver 자바 강좌에서 자바를 사용하여 Selenium WebDriver의 로그인 팝업 창을 처리하는 다양한 방법을 볼 수 있습니다.

Selenium WebDriver의 로그인 팝업 창은 어떻게 처리합니까?


Selenium WebDriver의 로그인 팝업 창을 Java로 처리하려면 다음 방법 중 하나를 사용합니다.
  • 웹 페이지의 URL에 자격 증명을 전달합니다.
  • AutoIT를 사용합니다.
  • Selenium 4 베타 버전을 사용합니다.
  • 이제 각 방법을 자세히 살펴보겠습니다.

    URL에서 사용자 이름과 암호를 전달하여 Selenium WebDriver의 로그인 팝업 창을 처리합니다.


    기본 인증 팝업 창은 브라우저가 특정 웹 페이지로 이동할 때 표시되는 경고와 유사합니다.기본 인증 팝업 창을 처리하려면 사용자 이름과 암호를 웹 페이지의 URL과 함께 전달할 수 있습니다.
    이 로그인 팝업 창을 처리하는 구문은 다음과 같습니다.https://username:[email protected]로그인 팝업 알림이 나타날 때, 우리는 사용자 이름을 '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();
    
        }
    
    }
    
    자격 증명을 올바르게 입력하면 사용자는 인증을 통과하여 사이트에 정확한 정보를 표시할 수 있습니다.

    AutoIT를 사용하여 Selenium WebDriver의 로그인 팝업 처리


    AutoIT는 키보드와 마우스의 상호 작용과 관련된 작업을 자동화하는 데 사용되는 스크립트 언어입니다.파일 업로드, 파일 다운로드, 인증 팝업 처리 등 보통 자동화 작업에 사용됩니다. 이제 AutoIT를 설치하고 웹 페이지의 로그인 팝업 창을 처리합니다.
  • AutoIT 공식 웹 사이트 또는 AutoIT download link에서 AutoIT를 다운로드합니다.
  • 설치된 폴더로 이동하여 AutoIT 편집기를 엽니다.
  • 편집기에서 사용자 이름과 비밀번호를 입력하여 사이트의 인증 팝업 창을 처리하는 데 사용합니다.
  • Send("admin")
    Send("(TAB)")
    Send("admin")
    Send("(ENTER)")
    
  • 확장자로 파일을 저장합니다.au3.
  • 이제 스크립트를 실행 가능한 파일로 변환하려면 저장된 파일을 마우스 오른쪽 단추로 클릭하고 스크립트 컴파일을 클릭합니다.실행 가능한 파일이 생성된 것을 볼 수 있습니다.
  • 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 beta 버전의 새로운 기능을 사용하여 같은 방법을 시도해 보겠습니다.

    Selenium 4 beta 버전을 사용하여 Selenium WebDriver의 로그인 팝업 처리


    latest version of Selenium 크롬 드라이브 클래스를 도입했는데 이 클래스는 getDevTools()와 excuteCdpCommand()로 크롬 DevTools에 접근하는 두 가지 방법이 있다.
    getDevTools () 방법은 새 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.<Integer>empty(), Optional.<Integer>empty(), Optional.<Integer>empty()));
                    Map<String, Object> 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();
            }
    
    }
    
    LambdaTest는 클라우드 컴퓨팅 그리드에서 쉽게 실행할 수 있는 온라인 클라우드 플랫폼을 제공한다Selenium automation testing.LambdaTest는 2000여 개의 다양한 브라우저/운영체제 조합에서 테스트를 할 수 있는 가장 큰 웹 및 모바일 크로스 브라우저 테스트 플랫폼을 제공합니다.
    사이트에 로그인하면 사용자 이름과 액세스 키를 얻을 수 있으며 클라우드에서 스크립트를 실행할 수 있습니다.사용자 이름과 액세스 키를 Profile Section에서 가져올 수 있습니다.
    다음은 LambdaTest에서 로그인 팝업 테스트를 수행하는 코드 세그먼트입니다.
    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();
    }
    
    
    }
    
    TestNG.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="TestSuite" parallel="tests">
    <test name="ChromeBrowserTest">
    <parameter name="browser" value="chrome"/>
    <classes>
    <class name="Pages.Demo">
    </class>
    </classes>
    </test>
    </suite>
    
    이 테스트를 LambdaTest 플랫폼에서 실행하려면 다음 절차를 따르십시오.
  • TestNG를 마우스 오른쪽 버튼으로 클릭합니다.IDE에서 만든 xml입니다.
  • Run As –>TestNG Suite 를 클릭합니다.이제 테스트가 LambdaTest 플랫폼에서 수행됩니다.
  • 테스트를 수행한 후 브라우저에서 LambdaTest 계정으로 이동하고 왼쪽 패널에서 Dashboard를 클릭합니다.
  • 이 페이지에는 플랫폼에서 실행되는 테스트에 대한 개요가 표시됩니다.
  • 그런 다음 왼쪽 패널에서 자동 레이블을 클릭합니다.
  • 이것은 당신이 이미 실행된 테스트를 식별해야 하는 곳입니다.이것은 여러 개의 테스트를 포함하고 있으며, 특정한 테스트를 식별하려면 스크립트에서 제공한 구축 이름을 사용하여 검색해야 한다.
    위 코드에서'AuthPopUp'이라는 이름으로 구축할 것입니다. 이 구축을 검색하십시오.이 페이지에는 생성된 상태와 실행에 필요한 시간도 표시됩니다.
  • 구축 보기를 클릭하여 실행 중인 테스트를 확인합니다.
  • 스크립트에서 제공하는 테스트 "AuthPopUpTest"를 볼 수 있습니다. 이것이 바로 저희가 LambdaTest에서 테스트를 식별하는 방식입니다.여기에서 스크립트에 제공된 모든 테스트 세부 정보(예: 브라우저, 브라우저 버전, 운영 체제 및 테스트 수행 버전)를 확인할 수 있습니다.이것은 테스트 스크립트에서 제공한 것과 같습니다.
    코드에서 비디오 녹화를 활성화했기 때문에 이 페이지에는 테스트를 수행할 때의 모든 테스트 단계가 기록된 테스트에 첨부된 비디오가 표시됩니다.

    비디오를 재생하면 테스트가 어떻게 실행되는지 볼 수 있습니다.장애가 발생하면 장애가 발생한 위치를 분석하는 데 도움이 됩니다.

    마무리


    한 마디로 하면 자바에서 Selenium WebDriver를 사용하여 웹 페이지의 로그인 팝업 창을 처리하는 다른 방법을 보았습니다.나는 너희들이 모두 이 문장을 통해 좋은 지식을 얻기를 바란다.당신의 친구와 동갑내기와 이 글을 공유해 주십시오. 나는 당신이 이 글에 대한 평론을 듣고 싶습니다.즐거움 테스트...!😊

    좋은 웹페이지 즐겨찾기