Selenium Webdriver Java 프로그램 예제(샘플 코드)

Selenium 자바 예

사용법 - 자바 이전 튜토리얼에서 생성한 "myclass" 클래스를 사용하여 다음과 같은 WebDriver 스크립트를 생성해 보겠습니다.

1 단계 : Mercury Tours 홈페이지 가져오기
2 단계 : 제목을 확인하세요
3 단계 : 비교 결과를 출력하다
4 단계 : 전체 프로그램을 종료하기 전에 닫으십시오.

Selenium WebDriver 샘플 코드

다음은 위 시나리오에서 제시된 로직에 대한 실제 WebDriver 코드입니다.

package newproject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
//comment the above line and uncomment below line to use Chrome
//import org.openqa.selenium.chrome.ChromeDriver;
public class PG1 {


    public static void main(String[] args) {
        // declaration and instantiation of objects/variables
    	System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
		WebDriver driver = new FirefoxDriver();
		//comment the above 2 lines and uncomment below 2 lines to use Chrome
		//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");
		//WebDriver driver = new ChromeDriver();
    	
        String baseUrl = "http://demo.guru99.com/test/newtours/";
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = "";

        // launch Fire fox and direct it to the Base URL
        driver.get(baseUrl);

        // get the actual value of the title
        actualTitle = driver.getTitle();

        /*
         * compare the actual title of the page with the expected one and print
         * the result as "Passed" or "Failed"
         */
        if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }
       
        //close Fire fox
        driver.close();
    }

}

참고: 시작 중 Firefox 35부터 Web Driver를 사용하려면 Mozilla에서 만든 gecko 드라이버를 사용해야 합니다. Selenium 3.0, 게코 및 firefox 호환성 문제가 있어서 올바르게 설정하는 것이 힘든 작업이 될 수 있습니다. 코드가 작동하지 않으면 다음으로 다운그레이드하세요. Firefox 버전 47 이하. 또는 Chrome에서 스크립트를 실행할 수 있습니다. Selenium 밖으로 작동합니다 box 크롬용. 스크립트가 Chrome에서 작동하도록 하려면 코드 세 줄만 변경하면 됩니다. Firefox

코드 설명

패키지 가져오기

시작하려면 Followo를 가져와야 합니다.wing 두 개의 패키지:

  1. org.openqa.selenium.*– 특정 드라이버가 로드된 새 브라우저를 인스턴스화하는 데 필요한 WebDriver 클래스가 포함되어 있습니다.
  2. org.openqa.selenium.firefox.Firefox운전기사 – 다음을 포함합니다 Firefox인스턴스화하는 데 필요한 드라이버 클래스 Firefox-WebDriver 클래스에 의해 인스턴스화된 브라우저의 특정 드라이버

테스트에 다른 클래스 액세스, 브라우저 스크린샷 찍기, 외부 파일 조작 등 더 복잡한 작업이 필요한 경우 더 많은 패키지를 가져와야 합니다.

개체 및 변수 인스턴스화

일반적으로 드라이버 개체가 인스턴스화되는 방식입니다.

WebDriver driver = new FirefoxDriver();

A Firefox매개변수가 없는 드라이버 클래스는 기본값을 의미합니다. Firefox 프로필은 Java 프로그램에 의해 시작됩니다. 기본값 Firefox 프로필은 시작과 유사합니다. Firefox 안전 모드(확장 프로그램이 로드되지 않음)

편의상 기본 URL과 예상 제목을 변수로 저장했습니다.

브라우저 세션 시작

웹드라이버의 가져 오기() 메서드는 새 브라우저 세션을 시작하는 데 사용되며 매개변수로 지정한 URL로 연결됩니다.

driver.get(baseUrl);

실제 페이지 제목 가져오기

WebDriver 클래스에는 getTitle () 현재 로드된 페이지의 페이지 제목을 가져오는 데 항상 사용되는 메서드입니다.

actualTitle = driver.getTitle();

기대값과 실제값 비교

코드의 이 부분에서는 기본 Java if-else 구조를 사용하여 실제 제목과 예상 제목을 비교합니다.

if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }

브라우저 세션 종료

"닫기()” 메소드는 브라우저 창을 닫는 데 사용됩니다.

driver.close();

전체 프로그램 종료

모든 브라우저를 닫지 않고 이 명령을 사용하는 경우 windows 먼저, 브라우저 창을 열어둔 채 전체 Java 프로그램이 종료됩니다.

System.exit(0);

테스트 실행

코드를 실행하는 방법에는 두 가지가 있습니다. Eclipse IDE.

  1. On Eclipse의 메뉴바에서 실행 > 실행합니다.
  2. PR 기사 Ctrl + F11 전체 코드를 실행합니다.

테스트 실행

모든 것을 올바르게 수행했다면, Eclipse "테스트 통과!"가 출력됩니다.

테스트 실행

GUI 요소 찾기

WebDriver에서 요소를 찾는 것은 "findElement(By.토지 경계 설정자())" 방법. 코드의 "로케이터" 부분은 이전에 설명한 로케이터와 동일합니다. Selenium IDE 이 튜토리얼의 장. 실제로 IDE를 사용하여 GUI 요소를 찾고 성공적으로 식별되면 코드를 WebDriver로 내보내는 것이 좋습니다.

여기입니다 Selenium ID로 요소를 찾는 샘플 코드입니다. Facebook이 기본 URL로 사용됩니다.

package newproject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class PG2 {
    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
    	WebDriver driver = new FirefoxDriver();
        String baseUrl = "http://www.facebook.com";
        String tagName = "";
        
        driver.get(baseUrl);
        tagName = driver.findElement(By.id("email")).getTagName();
        System.out.println(tagName);
        driver.close();
        System.exit(0);
}
}

우리는 사용 태그이름() ID가 "e"인 특정 요소의 태그 이름을 추출하는 방법mail". 실행 시 이 코드는 태그 이름 "input"을 올바르게 식별할 수 있어야 하며 이를 인쇄합니다. Eclipse의 콘솔 창입니다.

GUI 요소 찾기

요소 찾기 요약

변화 상품 설명 견본
By.className "class" 속성 값을 기준으로 요소를 찾습니다. findElement(By.className("someClassName"))
By.cssSelector 드라이버의 기본 CSS 선택기 엔진을 기반으로 요소를 찾습니다. findElement(By.cssSelector(“입력#email"))
By.id "id" 속성 값으로 요소를 찾습니다. findElement(By.id("someId"))
 
By.linkText 표시되는 정확한 텍스트로 링크 요소를 찾습니다. findElement(By.linkText(“등록”))
 
이름으로 "name" 속성 값으로 요소를 찾습니다. findElement(By.name("someName"))
 
By.partialLinkText 주어진 링크 텍스트를 포함하는 요소를 찾습니다. findElement(By.partialLinkText("REG"))
 
By.태그이름 태그 이름으로 요소를 찾습니다. findElement(By.tagName("div"))
 
By.xpath XPath를 통해 요소를 찾습니다. findElement(By.xpath(“//html/body/div/table/tbody/tr/td[2]/table/
tbody/tr[4]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td[3]/ form/table/tbody/tr[5]”))

findElement(By.cssSelector()) 사용 시 참고 사항

By.cssSelector() "포함" 기능을 지원하지 않습니다. 고려하다 Selenium 아래 IDE 코드 -

findElement(By.cssSelector()) 사용 시 참고 사항

In Selenium 위의 IDE에서는 전체 테스트가 통과되었습니다. 그러나 Selenium 아래 WebDriver 스크립트에서는 WebDriver가 By.cssSelector() 메서드에서 사용될 때 "contains" 키워드를 지원하지 않기 때문에 동일한 테스트에서 오류가 발생했습니다.

findElement(By.cssSelector()) 사용 시 참고 사항

일반적인 명령

웹 요소 인스턴스화

특정 요소에 액세스할 때마다 긴 "driver.findElement(By.locator())" 구문을 사용하는 대신 해당 요소에 대한 WebElement 개체를 인스턴스화할 수 있습니다. WebElement 클래스는 “org.openqa.selenium.*" 패키지.

웹 요소 인스턴스화

요소 클릭

클릭은 아마도 웹 요소와 상호 작용하는 가장 일반적인 방법일 것입니다. 그만큼 click() 방법은 모든 요소의 클릭을 시뮬레이션하는 데 사용됩니다. 추종자wing Selenium Java 예제에서는 방법을 보여줍니다. click() Mercury Tours의 "로그인" 버튼을 클릭하는 데 사용되었습니다.

요소 클릭

FOLLOwing click() 메소드를 사용할 때 주의해야 할 사항이 있습니다.

  • 매개변수/인수를 사용하지 않습니다.
  • 해당하는 경우 메서드는 새 페이지가 로드될 때까지 자동으로 기다립니다.
  • 클릭할 요소는 표시되어야 합니다(높이와 너비는 XNUMX이 아니어야 합니다).

명령 받기

Get 명령은 페이지/요소에 대한 다양한 중요한 정보를 가져옵니다. 다음은 숙지해야 할 몇 가지 중요한 "get" 명령입니다.

명령 용법
가져 오기()

샘플 사용법 :

  • 자동으로 새 브라우저 창을 열고 괄호 안에 지정한 페이지를 가져옵니다.
  • 의 대응물이다 Selenium IDE의 "열기" 명령.
  • 매개변수는 다음과 같아야 합니다. 목적.
getTitle ()

샘플 사용법 :

  • 매개변수가 필요하지 않습니다.
  • 현재 페이지의 제목을 가져옵니다.
  • 선행 및 후행 공백이 잘립니다.
  • 페이지에 제목이 없으면 null 문자열을 반환합니다.
getPageSource()

샘플 사용법 :

  • 매개변수가 필요하지 않습니다.
  • 페이지의 소스 코드를 문자열 값으로 반환합니다.
getCurrentUrl()

샘플 사용법 :

  • 매개변수가 필요하지 않습니다.
  • 브라우저가 보고 있는 현재 URL을 나타내는 문자열을 가져옵니다.
getText ()

샘플 사용법 :

  • 지정한 요소의 내부 텍스트를 가져옵니다.

명령 탐색

이 명령을 사용하면 새로 고침, 이동 및 다른 웹 페이지 간 전환이 가능합니다.

로 이동()

샘플 사용법 :

  • 자동으로 새 브라우저 창을 열고 괄호 안에 지정한 페이지를 가져옵니다.
  • 그것은 정확히 같은 일을합니다 get() 방법.
탐색().새로 고침()

샘플 사용법 :

  • 매개변수가 필요하지 않습니다.
  • 현재 페이지를 새로 고칩니다.
탐색().뒤로()

샘플 사용법 :

  • 매개변수가 필요하지 않습니다.
  • 브라우저 기록에서 한 페이지 이전으로 이동합니다.
탐색().앞으로()

샘플 사용법 :

  • 매개변수가 필요하지 않습니다.
  • 브라우저 기록에서 한 페이지 앞으로 이동합니다.

브라우저 닫기 및 종료 Windows

닫기()

샘플 사용법 :

  • 매개변수가 필요하지 않습니다.
  • WebDriver가 현재 제어하고 있는 브라우저 창만 닫습니다.
떠나다()

샘플 사용법 :

  • 매개변수가 필요하지 않습니다.
  • 다 닫아요 windows WebDriver가 열렸습니다.

브라우저 닫기 및 종료 Windows

차이점을 명확하게 설명하기 위해 close()quit(), 아래 코드를 실행해 보세요. 페이지 로드 시 자동으로 창을 띄우고 종료 후 다른 창을 여는 웹페이지를 사용합니다.

브라우저 닫기 및 종료 Windows

두 개의 팝업이 아닌 상위 브라우저 창만 닫혔습니다. windows.

브라우저 닫기 및 종료 Windows

그러나 quit()을 사용하면 모든 windows 부모뿐만 아니라 닫힙니다. 아래 코드를 실행해 보면 위의 두 팝업도 자동으로 닫히는 것을 확인할 수 있습니다.

package newproject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class PG3 {
    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
    	WebDriver driver = new FirefoxDriver();
        driver.get("http://www.popuptest.com/popuptest2.html");
        driver.quit();  // using QUIT all windows will close
    }
}

프레임 간 전환

프레임의 GUI 요소에 액세스하려면 먼저 WebDriver가 프레임이나 팝업 창에 초점을 맞추도록 지시한 후 그 안에 있는 요소에 액세스해야 합니다. 웹페이지를 예로 들어보겠습니다. http://demo.guru99.com/selenium/deprecated.html

프레임 간 전환

이 페이지에는 "이름" 속성이 위에 표시된 3개의 프레임이 있습니다. 위에서 노란색으로 표시된 "사용되지 않음" 링크에 액세스하려고 합니다. 그러기 위해서는 먼저 WebDriver에게 다음을 사용하여 "classFrame" 프레임으로 전환하도록 지시해야 합니다. “switchTo().frame()” 방법. 프레임의 name 속성을 "frame()" 부분의 매개변수로 사용하겠습니다.

package newproject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class PG4 {
	  public static void main(String[] args) {
		  	System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");  
		  	WebDriver driver = new FirefoxDriver();
	        driver.get("http://demo.guru99.com/selenium/deprecated.html");
	        driver.switchTo().frame("classFrame");
	        driver.findElement(By.linkText("Deprecated")).click();
	        driver.close(); 
	    }
}

이 코드를 실행하면 “classFrame” 프레임이 “Deprecated API” 페이지로 이동되는 것을 볼 수 있습니다. 이는 우리 코드가 “Deprecated” 링크에 성공적으로 액세스할 수 있다는 의미입니다.

팝업 간 전환 Windows

WebDriver는 팝업을 허용합니다 windows 경고처럼 표시됩니다.yed, 와 달리 Selenium IDE. 경고 내의 요소(예: 포함된 메시지)에 액세스하려면 다음을 사용해야 합니다. "switchTo().alert()" 방법. 아래 코드에서는 이 메서드를 사용하여 경고에 액세스합니다. box 그런 다음 다음을 사용하여 메시지를 검색합니다. "getText()" 방법을 선택한 다음 자동으로 경고를 닫습니다. box 를 사용하여 "switchTo().alert().accept()" 방법.

먼저 다음으로 가세요. https://output.jsbin.com/usidix/1 수동으로 "Go!"를 클릭하세요. 거기 버튼을 누르고 메시지 텍스트를 직접 확인하세요.

팝업 간 전환 Windows

보자 Selenium 이를 수행하는 예제 코드-

package mypackage;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class myclass {

    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
        WebDriver driver = new FirefoxDriver();
        String alertMessage = "";

        driver.get("http://jsbin.com/usidix/1");
        driver.findElement(By.cssSelector("input[value=\"Go!\"]")).click();
        alertMessage = driver.switchTo().alert().getText();
        driver.switchTo().alert().accept();
       
        System.out.println(alertMessage);
        driver.quit();
       
    }
}

에 Eclipse 콘솔에서 인쇄된 경고 메시지는 다음과 같습니다.

팝업 간 전환 Windows

기다립니다

기다림에는 두 가지 종류가 있습니다.

  1. 암시적 대기 – 프로그램 전체에서 기본 대기 시간을 설정하는 데 사용됩니다.
  2. 명시적 대기 - 특정 인스턴스에 대해서만 대기 시간을 설정하는 데 사용됩니다.

암시적 대기

  • 명시적 대기보다 코딩이 더 간단합니다.
  • 일반적으로 코드의 인스턴스화 부분에서 선언됩니다.
  • 가져오려면 추가 패키지가 하나만 필요합니다.

암시적 대기를 사용하려면 이 패키지를 코드로 가져와야 합니다.

암시적 대기

그런 다음 코드의 인스턴스화 부분에 이것을 추가하십시오.

암시적 대기

명시적 대기

명시적 대기는 WebDriverWait 및 ExpectedCondition 클래스를 사용하여 수행됩니다.. 추종자를 위해wing Selenium WebDriver 예를 들어, 다음 명령을 진행하기 전에 ID가 "username"인 요소가 표시될 때까지 최대 10초를 기다려야 합니다. 단계는 다음과 같습니다.

1 단계 :

다음 두 패키지를 가져옵니다.

명시적 대기

2 단계 :

WebDriverWait 변수를 선언합니다. 이 예에서는 "myWaitVar"를 변수 이름으로 사용합니다.

명시적 대기

3 단계 :

명시적인 대기가 필요한 부분에서는 ExpectedConditions와 함께 myWaitVar를 사용하세요. 이 경우 "tutorial"이라는 텍스트를 입력하기 전에 "username"(Mercury Tours HomePage) 입력에 대해 명시적인 대기를 사용합니다.

명시적 대기

상태

FOLLOwing 조건부 및 반복에 메서드가 사용됩니다. opera의견 —

  • 사용 가능() 명령을 실행하기 전에 특정 요소의 활성화 여부를 확인하고 싶을 때 사용됩니다.

조건이 활성화됨()

  • isDisplayed() 특정 요소가 표시되는지 확인하고 싶을 때 사용됩니다.yed 또는 명령을 실행하기 전에는 아닙니다.

조건은Displayed()

  • 선택됨() 특정 내용을 확인하고 싶을 때 사용됩니다. 검사 box, 라디오 버튼 또는 드롭다운 옵션 box 선택되었습니다. 다른 요소에서는 작동하지 않습니다.

조건은 선택됨()

예상 조건 사용

ExpectedConditions 클래스는 WebDriverWait의 Until() 메서드와 함께 사용할 수 있는 더 광범위한 조건 세트를 제공합니다.

다음은 가장 일반적인 ExpectedConditions 메서드 중 일부입니다.

  • 경고IsPresent() – 경고가 나올 때까지 기다립니다. box 디스플레이입니다yed.

ExpectedConditions AlertIsPresent() 사용

  • 요소ToBeClickable() – 요소가 표시되고 동시에 활성화될 때까지 기다립니다. 샘플 Selenium 아래 코드는 해당 요소를 "txtUserName"이라는 WebElement 변수로 할당하기 전에 id=”username”인 요소가 먼저 표시되고 활성화될 때까지 기다립니다.

예상 조건 사용

  • 프레임ToBeAvailableAndSwitchToIt() – 주어진 프레임이 이미 사용 가능해질 때까지 기다렸다가 자동으로 해당 프레임으로 전환합니다.

ExpectedConditions elementToBeClickable() 사용

예외 잡기

isEnabled()를 사용할 때 isDisplayed() 및 isSelected()를 사용하는 경우 WebDriver는 해당 요소가 페이지에 이미 존재한다고 가정합니다. 다른wise, 그것은 던질 것입니다 NoSuchElementException. 이를 방지하려면 프로그램이 중단되지 않도록 try-catch 블록을 사용해야 합니다.

WebElement txtbox_username = driver.findElement(By.id("username"));
try{
        if(txtbox_username.isEnabled()){
            txtbox_username.sendKeys("tutorial");
        }
    }

catch(NoSuchElementException nsee){
            System.out.println(nsee.toString());
 }

명시적 대기를 사용하는 경우 포착해야 하는 예외 유형은 "TimeoutException"입니다.

예외 잡기

요약

  • WebDriver API 사용을 시작하려면 최소한 다음 두 패키지를 가져와야 합니다.
  • org.openqa.selenium.*
  • org.openqa.selenium.firefox.Firefox운전기사
  • XNUMXD덴탈의 get() 방법은 다음과 같습니다. Selenium IDE의 "열기" 명령.
  • WebDriver에서 요소를 찾는 것은 다음을 사용하여 수행됩니다. findElement() 방법.
  • 더 폴로wing WebDriver에서 요소를 찾는 데 사용할 수 있는 옵션은 다음과 같습니다.
  • By.className
  • By.cssSelector
  • By.id
  • By.linkText
  • 이름으로
  • By.partialLinkText
  • By.태그이름
  • By.xpath
  • By.cssSelector() 하지 않습니다 지원 “포함” 기능.
  • WebElement 클래스를 사용하여 요소를 인스턴스화할 수 있습니다.
  • 요소 클릭은 다음을 사용하여 수행됩니다. click() 방법.
  • WebDriver는 다음과 같은 유용한 get 명령을 제공합니다.
  • 가져 오기()
  • getTitle ()
  • getPageSource()
  • getCurrentUrl()
  • getText ()
  • WebDriver는 다음과 같은 유용한 탐색 명령을 제공합니다.
  • 탐색().앞으로()
  • 탐색().뒤로()
  • 로 이동()
  • 탐색().새로 고침()
  • close() 및 quit() 메서드는 브라우저를 닫는 데 사용됩니다. windows. Close() 단일 창을 닫는 데 사용됩니다. ~하는 동안 quit() 모두 닫는 데 사용됩니다. windows WebDriver 개체가 제어하는 ​​상위 창과 연결됩니다.
  • XNUMXD덴탈의 switchTo().frame()switchTo().alert() 메서드는 WebDriver의 초점을 각각 프레임이나 경고로 보내는 데 사용됩니다.
  • Implicit waits 프로그램 전체에서 대기 시간을 설정하는 데 사용됩니다. explicit waits 특정 부분에만 사용됩니다.
  • isEnabled(), isDispla를 사용할 수 있습니다.yed(), isSelected() 및 다음의 조합 WebDriver대기예상 조건 요소의 상태를 확인할 때 메서드. 그러나 요소가 존재하지 않는지는 확인하지 않습니다.
  • isEnabled()일 때, isDisplayed() 또는 요소가 존재하지 않는 동안 isSelected()가 호출되면 WebDriver는 NoSuchElementException.
  • 요소가 존재하지 않는 동안 WebDriverWait 및 ExpectedConditions 메소드가 호출되면 WebDriver는 TimeoutException.

참고 :

driver.get(): 특정 웹사이트로 이동하는데 사용됩니다. 하지만 브라우저 기록과 쿠키를 유지하지 않기 때문에 앞으로, 뒤로 버튼을 사용할 수 없습니다. 해당 웹사이트를 클릭하면 페이지가 예약되지 않습니다.

driver.navigate(): 특정 웹 사이트로 이동하는 데 사용되지만 브라우저 기록과 쿠키를 유지하므로 테스트 케이스 코딩 중에 페이지 간 이동을 위해 앞으로 및 뒤로 버튼을 사용할 수 있습니다.