지난 글 'Page Objects in Selenium 2 (Web Driver)' 맨 마지막에 아래와 같이 샘플 소스 코드들이 있었습니다.
이 샘플 코드들을 한번 분석해 보겠습니다.
* Here are the source codes
Project Home: https://github.com/ChonC/wtbox
wiki: https://github.com/ChonC/wtbox/wiki
PageBase source code
Page Objects test example
샘플을 보면 구글 페이지에서 검색하는 기능을 Selenium으로 테스트하는 소스들이 있습니다.
Page Objects를 사용하지 않은 버전과 Page Objects를 사용한 버전이 있습니다.
우선 Page Objects를 사용하지 않은 버전을 보겠습니다.
/**
* Testing Google search. This class does not use Page Object pattern.
* Compare it with “GoogleSearch_withPageObject.java” class, which uses Page Object pattern.
*
* This example is from
* "The 5 Minute Getting Started Guide
* (http://code.google.com/p/selenium/wiki/GettingStarted)."
*
*/
public class GoogleSearch {
public static void main(String[] args) {
GoogleSearch.testGoogleSearch();
try{
GoogleSearch.testGoogleSuggest();
}catch(Exception e){
System.out.println("Unable to perform testGoogleSuggest() - " +
e.getMessage());
}
}
public static void testGoogleSearch(){
// Create a new instance of the html unit driver
WebDriver driver = new HtmlUnitDriver();
// And now use this to visit Google
driver.get("http://www.google.com");
// Find the text input element by its name
WebElement element = driver.findElement(By.name("q"));
// Enter something to search for
element.sendKeys("Cheese!");
// Now submit the form. WebDriver will find the form for us from the element
element.submit();
//*** return the next page object
// Check the title of the page
String pageTitle = driver.getTitle();
System.out.println("Page title is: " + pageTitle);
assertTrue("Got title: " + pageTitle, pageTitle.contains("Cheese!"));
}
public static void testGoogleSuggest() throws Exception {
// The Firefox driver supports javascript
WebDriver driver = new FirefoxDriver();
// Go to the Google Suggest home page
driver.get("http://www.google.com/webhp?complete=1&hl=en");
// Enter the query string "Cheese"
WebElement query = driver.findElement(By.name("q"));
query.sendKeys("Cheese");
// Sleep until the div we want is visible or 5 seconds is over
long end = System.currentTimeMillis() + 5000;
while (System.currentTimeMillis() < end) {
WebElement resultsDiv = driver.findElement(By.className("gsq_a"));
// If results have been returned, the results are displayed in a drop down.
if (resultsDiv.isDisplayed()) {
break;
}
}
// And now list the suggestions
List<WebElement> allSuggestions = driver.findElements(By.className("gsq_a"));
for (WebElement suggestion : allSuggestions) {
System.out.println(suggestion.getText());
}
}
}
/**
* References:
* 1. http://stackoverflow.com/questions/10315894/selenium-webdriver-page-object
*/
맨 먼저 main() 메소드를 봐야 합니다.
가장 먼저 하는 일은 GoogleSearch에 있는 testGoogleSearch() 메소드를 호출하는 겁니다.
GoogleSearch는 이 클래스 이름이니까 이 클래스 내에 있는 testGoogleSearch() 메소드를 가장 먼저 시작하는 겁니다.
testGoogleSearch() 메소드를 보죠.
먼저 WebDriver로 HtmlUnitDreiver() 를 초기화를 하고 get() 메소드를 사용해서 http://www.google.com 으로 갑니다.
그리고 name 이 q 인 element를 찾아서 element 라는 WebElement 객체를 만들구요.
이 element 객체에 Cheese!라고 입력을 합니다.
그리고 이 form 에 대한 submit() 을 실행합니다.
그러면 Cheese!로 검색한 페이지로 가게 되겠죠.
이 페이지의 title을 pageTitle이라는 String 객체에 담습니다.
그리고 이 pageTitle을 콘솔에 출력합니다.
그러면 콘솔에 아래와 같이 출력 됩니다.
출력하고 난 다음에는 assertTrue라는 jUnit 메소드를 사용해서 해당 페이지에 Cheese!라는 글자가 포함돼 있는지 테스트 합니다.
여기까지 하면 한가지 테스트가 완료 됐네요.
다시 main()메소드를 보면 그 다음에 testGoogleSuggest() 라는 메소드를 또 호출하는 것을 볼 수 있습니다.
이제 이 메소드가 실행될 텐데요. 한번 보겠습니다.
여기서는 WebDriver 에 FirefoxDriver() 를 세팅합니다.
여기까지 실행하면 Firefox가 오픈됩니다. (화면은 비어있구요.)
get() 메소드를 사용해서 http://www.google.com/webhp?complete=1&hl=en 로 이동합니다.
그리고 name이 q 인 Element를 찾아서 query라는 객체에 이 WebElement를 담습니다.
그리고 이 query 에 Cheese 를 입력합니다.
그러면 여기까지 진행이 됩니다.
그 다음에는 현재 시간 + 5초를 해서 end 라는 long 객체에 담네요.
그리고 while 문을 사용해서 이 5초동안 기다리게 하고 나서 className이 gsq_a 인 WebElement를 resultsDiv라는 객체에 담습니다.
이건 아마 원격으로 처리되다 보면 Ajax call 로 Auto Complete 기능을 실행하는데 시간이 걸리니까 이렇게 했나 봅니다.
이 while 문 안쪽을 보니까 resultsDiv 가 display 되면은 더이상 while 문을 돌지 않고 빠져 나가도록 break를 했네요.
그 다음을 보면 다시 className이 gsq_a 인 Element들을 List 객체인 allSuggestions 에 담습니다.
위 페이지를 Firebugs로 보면은 Auto complete으로 나온 cheesecake factory, cheesecake factory san diego, cheesecake recipe, cheese 이런 것들이 gsq_a 라는 클래스에 속해 있는걸 보실 수 있을 겁니다.
다음에는 이 allSuggestions List 객체에 대해서 for 문을 돌려서 콘솔에 출력하네요.
그러면 아래와 같이 Auto Complete 에 있었던 Suggestion들이 콘솔에 출력 됩니다.
여기까지가 GoogleSearch 클래스가 하는 일 입니다.
샘플 소스를 보면은 이 작업을 Page Objects를 사용해서 만든 샘플도 있습니다.
이름이 GoogleSearch_withPageObject 라는 클래스인데요.
위 GoogleSearch 클래스를 Page Object를 사용해서 어떻게 만드는지 잘 보여주고 있습니다.
이 클래스는 다음 글에서 정리 하겠습니다.
'TDD Project > Selenium Web Driver' 카테고리의 다른 글
Selenium WebDriver 에서 JavascriptExecutor 사용할 때 유념해야 될 상황 (0) | 2013.12.02 |
---|---|
Page Objects in Selenium 2 (Web Driver) 소스 분석 (with Page Objects) 04 (0) | 2013.10.30 |
Page Objects in Selenium 2 (Web Driver) 소스 분석 (with Page Objects) 03 (0) | 2013.10.27 |
Page Objects in Selenium 2 (Web Driver) 소스 분석 (with Page Objects) 02 (0) | 2013.10.25 |
Page Objects in Selenium 2 (Web Driver) 소스 분석 (with Page Objects) 01 (0) | 2013.10.25 |
Page Objects in Selenium 2 (Web Driver) (0) | 2013.10.24 |
Selenium 2/WebDriver Quick Tips: Page Object Navigation Strategies (0) | 2013.10.21 |
Selenium WebDriver - PageFactory (0) | 2013.10.20 |
Selenium WebDriver - PageObjects (0) | 2013.10.20 |
Selenium WebDriver Tutorial 03 (0) | 2013.10.19 |