반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 받은 트랙백

글 보관함


지난 글 '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를 사용해서 어떻게 만드는지 잘 보여주고 있습니다.


이 클래스는 다음 글에서 정리 하겠습니다.


반응형

Comment