Selenium 웹드라이버 Java 프로그램 예
Selenium Java 예시
사용법 - Java 이전 튜토리얼에서 생성한 "myclass" 클래스를 사용하여 다음과 같은 WebDriver 스크립트를 생성해 보겠습니다.
1 단계 : 술책 Mercury 투어 홈페이지
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 = "https://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, gecko 및 firefox에는 호환성 문제가 있으며 이를 올바르게 설정하는 것은 힘든 일이 될 수 있습니다. 코드가 작동하지 않으면 다음으로 다운그레이드하세요. Firefox 버전 47 이하. 또는 Chrome에서 스크립트를 실행할 수 있습니다. Selenium Chrome에서 바로 작동합니다. 스크립트가 Chrome에서 작동하도록 하려면 코드 3줄만 변경하면 됩니다. Firefox
코드 설명
패키지 가져오기
시작하려면 다음 두 패키지를 가져와야 합니다.
- org.openqa.셀레늄.*– 특정 드라이버가 로드된 새 브라우저를 인스턴스화하는 데 필요한 WebDriver 클래스가 포함되어 있습니다.
- 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();
전체 프로그램 종료
먼저 모든 브라우저 창을 닫지 않고 이 명령을 사용하면 전체 Java 브라우저 창을 열어둔 채로 프로그램이 종료됩니다.
System.exit(0);
테스트 실행
코드를 실행하는 방법에는 두 가지가 있습니다. Eclipse IDE.
- On Eclipse의 메뉴바에서 실행 > 실행합니다.
- 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가 "email"인 특정 요소의 태그 이름을 추출하는 방법입니다. 이 코드를 실행하면 태그 이름 "input"을 올바르게 식별하고 이를 출력할 수 있어야 합니다. Eclipse의 콘솔 창입니다.
요소 찾기 요약
변화 | 상품 설명 | 견본 |
---|---|---|
By.className | "class" 속성 값을 기준으로 요소를 찾습니다. | findElement(By.className("someClassName")) |
By.cssSelector | 드라이버의 기본 CSS 선택기 엔진을 기반으로 요소를 찾습니다. | findElement(By.cssSelector(“입력#이메일”)) |
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 코드 -
In Selenium 위의 IDE에서는 전체 테스트가 통과되었습니다. 그러나 Selenium 아래 WebDriver 스크립트에서는 WebDriver가 By.cssSelector() 메서드에서 사용될 때 "contains" 키워드를 지원하지 않기 때문에 동일한 테스트에서 오류가 발생했습니다.
일반적인 명령
웹 요소 인스턴스화
특정 요소에 액세스할 때마다 긴 "driver.findElement(By.locator())" 구문을 사용하는 대신, 해당 요소에 대한 WebElement 객체를 인스턴스화할 수 있습니다. WebElement 클래스는 "org.openqa.selenium.*" 패키지에 포함되어 있습니다.
요소 클릭
클릭은 아마도 웹 요소와 상호 작용하는 가장 일반적인 방법일 것입니다. 그만큼 click()
이 방법은 모든 요소의 클릭을 시뮬레이션하는 데 사용됩니다. 다음은 Selenium Java 예는 방법을 보여줍니다 click()
클릭하는 데 사용되었습니다. Mercury Tours의 "로그인" 버튼입니다.
click() 메서드를 사용할 때 다음 사항에 주의해야 합니다.
- 매개변수/인수를 사용하지 않습니다.
- 해당하는 경우 메서드는 새 페이지가 로드될 때까지 자동으로 기다립니다.
- 클릭할 요소는 표시되어야 합니다(높이와 너비는 XNUMX이 아니어야 합니다).
명령 받기
Get 명령은 페이지/요소에 대한 다양한 중요한 정보를 가져옵니다. 다음은 숙지해야 할 몇 가지 중요한 "get" 명령입니다.
명령 | 용법 |
---|---|
가져 오기()
샘플 사용법 : |
|
getTitle ()
샘플 사용법 : |
|
getPageSource()
샘플 사용법 : |
|
getCurrentUrl()
샘플 사용법 : |
|
getText ()
샘플 사용법 : |
|
명령 탐색
이 명령을 사용하면 새로 고침, 이동 및 다른 웹 페이지 간 전환이 가능합니다.
로 이동()
샘플 사용법 : |
|
탐색().새로 고침()
샘플 사용법 : |
|
탐색().뒤로()
샘플 사용법 : |
|
탐색().앞으로()
샘플 사용법 : |
|
브라우저 닫기 및 종료 Windows
닫기()
샘플 사용법 : |
|
떠나다()
샘플 사용법 : |
|
차이점을 명확하게 설명하기 위해 close()
그리고 quit()
, 아래 코드를 실행해 보세요. 페이지 로드 시 자동으로 창을 띄우고 종료 후 다른 창을 여는 웹페이지를 사용합니다.
부모 브라우저 창만 닫혔고 팝업 창 두 개는 닫히지 않은 점에 주목하세요.
하지만 quit()를 사용하면 모든 창이 닫힙니다. 부모 창만 닫히는 것이 아닙니다. 아래 코드를 실행해 보면 위의 두 팝업도 자동으로 닫힙니다.
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가 프레임이나 팝업 창에 초점을 맞추도록 지시한 후 그 안에 있는 요소에 액세스해야 합니다. 웹페이지를 예로 들어보겠습니다. https://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("https://demo.guru99.com/selenium/deprecated.html"); driver.switchTo().frame("classFrame"); driver.findElement(By.linkText("Deprecated")).click(); driver.close(); } }
이 코드를 실행하면 “classFrame” 프레임이 “Deprecated API” 페이지로 이동되는 것을 볼 수 있습니다. 이는 우리 코드가 “Deprecated” 링크에 성공적으로 액세스할 수 있다는 의미입니다.
팝업 간 전환 Windows
WebDriver를 사용하면 알림과 같은 팝업 창을 표시할 수 있습니다. Selenium IDE. 경고 내의 요소(예: 포함된 메시지)에 액세스하려면 다음을 사용해야 합니다. "switchTo().alert()"
방법. 아래 코드에서 이 방법을 사용하여 경고 상자에 액세스한 다음 다음을 사용하여 해당 메시지를 검색합니다. "getText()"
방법을 사용한 다음 경고 상자를 자동으로 닫습니다. "switchTo().alert().accept()"
방법.
먼저 다음으로 가세요. https://output.jsbin.com/usidix/1 수동으로 "Go!"를 클릭하세요. 거기 버튼을 누르고 메시지 텍스트를 직접 확인하세요.
보자 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 콘솔에서 인쇄된 경고 메시지는 다음과 같습니다.
기다립니다
기다림에는 두 가지 종류가 있습니다.
- 암시적 대기 – 프로그램 전체에서 기본 대기 시간을 설정하는 데 사용됩니다.
- 명시적 대기 - 특정 인스턴스에 대해서만 대기 시간을 설정하는 데 사용됩니다.
암시적 대기
- 명시적 대기보다 코딩이 더 간단합니다.
- 일반적으로 코드의 인스턴스화 부분에서 선언됩니다.
- 가져오려면 추가 패키지가 하나만 필요합니다.
암시적 대기를 사용하려면 이 패키지를 코드로 가져와야 합니다.
그런 다음 코드의 인스턴스화 부분에 이것을 추가하십시오.
명시적 대기
명시적 대기는 WebDriverWait 및 ExpectedCondition 클래스를 사용하여 수행됩니다.. 다음에 대해 Selenium WebDriver 예를 들어, 다음 명령을 진행하기 전에 ID가 "username"인 요소가 표시될 때까지 최대 10초를 기다려야 합니다. 단계는 다음과 같습니다.
1 단계 :
다음 두 패키지를 가져옵니다.
2 단계 :
WebDriverWait 변수를 선언합니다. 이 예에서는 "myWaitVar"를 변수 이름으로 사용합니다.
3 단계 :
명시적인 대기가 필요한 부분에서는 ExpectedConditions와 함께 myWaitVar를 사용하세요. 이 경우 "사용자 이름"(Mercury Tours HomePage)를 입력한 후 "tutorial"이라는 텍스트를 입력합니다.
상태
다음 방법은 조건 및 반복 작업에서 사용됩니다.
- 사용 가능() 명령을 실행하기 전에 특정 요소의 활성화 여부를 확인하고 싶을 때 사용됩니다.
- 표시됨() 명령을 실행하기 전에 특정 요소가 표시되는지 여부를 확인하고자 할 때 사용됩니다.
- 선택됨() 특정 내용을 확인하고 싶을 때 사용됩니다. 드롭다운 상자의 체크 상자, 라디오 버튼 또는 옵션 선택되었습니다. 다른 요소에서는 작동하지 않습니다.
예상 조건 사용
ExpectedConditions 클래스는 WebDriverWait의 Until() 메서드와 함께 사용할 수 있는 더 광범위한 조건 세트를 제공합니다.
다음은 가장 일반적인 ExpectedConditions 메서드 중 일부입니다.
- 경고IsPresent() – 경고 상자가 표시될 때까지 기다립니다.
- 요소ToBeClickable() – 요소가 표시되고 동시에 활성화될 때까지 기다립니다. 샘플 Selenium 아래 코드는 해당 요소를 "txtUserName"이라는 WebElement 변수로 할당하기 전에 id=”username”인 요소가 먼저 표시되고 활성화될 때까지 기다립니다.
- 프레임ToBeAvailableAndSwitchToIt() – 주어진 프레임이 이미 사용 가능해질 때까지 기다렸다가 자동으로 해당 프레임으로 전환합니다.
예외 잡기
isEnabled(), isDisplayed(), isSelected()를 사용할 때 WebDriver는 해당 요소가 페이지에 이미 존재한다고 가정합니다. 그렇지 않으면 다음을 throw합니다. 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.셀레늄.*
- org.openqa.selenium.firefox.Firefox운전기사
- The
get()
방법은 다음과 같습니다. Selenium IDE의 "열기" 명령. - WebDriver에서 요소를 찾는 것은 다음을 사용하여 수행됩니다.
findElement()
방법. - 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() 메서드는 브라우저 창을 닫는 데 사용됩니다.
Close()
단일 창을 닫는 데 사용됩니다. ~하는 동안quit()
WebDriver 객체가 제어하고 있는 부모 창에 연관된 모든 창을 닫는 데 사용됩니다. - The
switchTo().frame()
그리고switchTo().alert()
메서드는 WebDriver의 초점을 각각 프레임이나 경고로 보내는 데 사용됩니다. Implicit waits
프로그램 전체에서 대기 시간을 설정하는 데 사용됩니다.explicit waits
특정 부분에만 사용됩니다.- isEnabled(), isDisplayed(),isSelected() 및 이들의 조합을 사용할 수 있습니다. WebDriver대기 그리고 예상 조건 요소의 상태를 확인할 때 메서드. 그러나 요소가 존재하지 않는지는 확인하지 않습니다.
- isEnabled(), isDisplayed() 또는 isSelected()가 요소가 존재하지 않는 동안 호출되면 WebDriver는 다음을 throw합니다. NoSuchElementException.
- 요소가 존재하지 않는 동안 WebDriverWait 및 ExpectedConditions 메소드가 호출되면 WebDriver는
TimeoutException
.
참고 :
driver.get()
: 이 방법은 특정 웹사이트로 이동하는 데 사용됩니다. 그러나 브라우저 기록이나 쿠키를 유지하지 않습니다. 결과적으로 앞으로 및 뒤로 버튼이 작동하지 않으며, 클릭해도 페이지 탐색이 예약되지 않습니다.
driver.navigate()
: 이 방법은 특정 웹사이트로 이동하는 데에도 사용되지만 브라우저 기록과 쿠키를 유지합니다. 이를 통해 테스트 케이스를 코딩하는 동안 페이지 간 탐색에 앞으로 및 뒤로 버튼을 사용할 수 있습니다.