셀레늄IDE는 레코딩된 html 테스트케이스를 자바 코드로 변환해주는 놀라운 기능을 제공합니다.

그러나 이렇게 자동으로 만들어진 JUnit3 기반 테스트케이스 코드는 약간 아쉬운 점이 있습니다.

  • 테스트케이스 실행전 먼저 셀레늄 RC 서버를 별도로 띄워놓아야 한다.
  • 셀레늄IDE에서 제공하는 clickAndWait와 같은 xxxAndWait 류의 커맨드에 해당하는 메소드가 없다.
  • JUnit 4 나온지가 언젠데 아직도 JUnit 3 이냐. -.-
  • 하나의 테스트메소드 실행시마다 브라우저 열기/닫기를 반복하기 때문에 테스트 수행시간이 오래걸린다. (테스트케이스의 setUp과 tearDown에 브라우저를 띄우고 종료하는 코드가 있음)

다행히 누가 시킨것도 아닌데 이런 아쉬움을 극복하는 방법을 정리해서 올리신 분들이 계십니다.

먼저 http://ajesse.wordpress.com/category/selenium 사이트.

위 사이트에는 셀레늄RC서버 자동시작/종료, clickAndWait류의 메소드제공, JUnit4기반코드, 테스트케이스 단위로 브라우저를 열고닫는 등 모든 해법이 설명되어 있습니다.

테스트스위트에서는 셀레늄RC서버를 관리합니다.

  1. import org.junit.AfterClass;
    import org.junit.BeforeClass;

  2. public abstract class SeleniumTestSuite {

  3.     @BeforeClass
        public static void setUpBeforeClass() throws Exception {
            SeleniumServerControl.getInstance().startSeleniumServer();
        }

  4.     @AfterClass
        public static void tearDownAfterClass() throws Exception {
            SeleniumServerControl.getInstance().stopSeleniumServer();
        }
    }

 

공통 테스트케이스 클래스는 브라우저를 콘트롤하는 기능과 xxxAndWait 유틸리티 메소드를 제공합니다.

  1. import org.junit.AfterClass;
    import org.junit.BeforeClass;

  2. import com.thoughtworks.selenium.DefaultSelenium;
    import com.thoughtworks.selenium.Selenium;

  3. public abstract class SeleniumTestCase {

  4.     public static final String BROWSER = "*iexploreproxy";

  5.     public static final int SELENIUM_SERVER_PORT = 4444;

  6.     public static final String PAGE_LOAD_TIMEOUT = "3000";

  7.     public static final String START_URL = http://myserver.com:xxxx;

  8.     protected static Selenium seleniumStatic;

  9.     protected Selenium browser = null;

  10.     public SeleniumTestCase() {
            this.browser = seleniumStatic;
        }

  11.     @BeforeClass
        public static void setUpBeforeClass() throws Exception {
            seleniumStatic = new DefaultSelenium("localhost", SELENIUM_SERVER_PORT, BROWSER, START_URL);
            seleniumStatic.start();
        }

  12.     @AfterClass
        public static void tearDownAfterClass() throws Exception {
            seleniumStatic.stop();
        }

  13.     public void submitAndWait(String formLocator) {
            browser.submit(formLocator);
            browser.waitForPageToLoad(PAGE_LOAD_TIMEOUT);
        }

  14.     public void clickAndWait(String elementLocator) {
            browser.click(elementLocator);
            browser.waitForPageToLoad(PAGE_LOAD_TIMEOUT);
        }

  15.     public void openAndWait(String url) {
            browser.open(url);
            browser.waitForPageToLoad(PAGE_LOAD_TIMEOUT);
        }

추가로 JUnit4 사용환경에서 테스트 실패시 자동으로 화면을 캡쳐하는 방법에 대한 힌트가 http://rockhoppertech.com/blogs/archives/45 여기에 언급되어 있습니다. JUnit4에 org.junit.runner.notification.RunListener 클래스가 있네요.

 

ps. 이 글을 정리하면서 Simplium 이라는 것을 발견했습니다. Simple test framework for Selenium의 약자이군요. 사이트에 소개된 코드를 대략 보니 일단 맘에 듭니다. 시간나면 Simplium을 좀더 테스트해봐야겠습니다.

이 글은 스프링노트에서 작성되었습니다.

신고
Posted by 에코지오

댓글을 달아 주세요

셀레늄에서 자바스크립트 alert 상자가 떴는지 판단하는 명령어에는 verifyAlert, verifyAlertPresent, assertAlert, assertAlertPresent 등이 있습니다.

셀레늄은 이들 명령어를 통해 alert 상자가 뜬 것을 확인하고(실제로 뜨지는 않습니다) 자동으로 확인버튼을 눌러줍니다.

셀레늄 IDE에서 명령어(command) 항목에는 assertAlert 를,  타겟(target) 항목에는 "저장하였습니다."를 입력하면, 실제로 "저장하였습니다." alert 상자가 뜰 경우에 테스트가 성공하게 됩니다.

b.jpg 

그런데 제가 테스트하는 화면에서는 alert의 메시지가 중요하지 않아서 단순히 alert가 발생했는지 여부만 알고 싶을 때가 있습니다. 그래서 assertAlert 명령어 대신 assertAlertPresent 명령어를 사용해봤는데, 아래처럼 에러가 납니다. verifyAlertPresent 명령도 마찬가지였습니다.

[error] Error: There was an unexpected Alert! [저장하였습니다.]

뭐가 잘못된 건지 구글신께 물어봐도 잘 안가르쳐 주네요... -.-;

이리저리 삽질하다가 assertAlert 명령에서 메시지 지정할 때 * 패턴을 사용할 수 있다는 사실을 알아냈습니다. 그래서 찾아낸 방법은 아래 그림처럼 assertAlert 명령의 target 값으로 * 를 쓰는 것입니다. 잘 작동합니다. ^^

a.jpg 

이 글은 스프링노트에서 작성되었습니다.

신고
Posted by 에코지오

댓글을 달아 주세요

셀레늄에는 assert 뿐만 아니라 이와 유사한 verify 명령어가 있습니다.

 

  • verify : 중간에 실패해도 나머지 테스트는 계속 수행된다. 마지막에 실패가 표시된다.
  • assert : 중간에 실패하면 테스트는 즉시 중단된다.

 

verify는 실패하더라도 그 다음 테스트명령 실행에 영향을 주지 않으면서 무언가를 확인하고 싶을 때 사용하면 되겠고,

assert는 실패하면 다음 명령을 수행하는게 의미가 없어서 바로 테스트를 실패로 단정짓고 싶을 때 사용하면 되겠습니다.

 

 

이 글은 스프링노트에서 작성되었습니다.

신고
Posted by 에코지오

댓글을 달아 주세요

  1. BlogIcon 조형규 2009.06.17 20:19 신고  댓글주소  수정/삭제  댓글쓰기

    궁금증을 깔끔하게 해결하여 주시네요 ^^;
    저희 홈에 원문 내용그대로 담아 갑니다.
    감사합니다~~~

최신 셀레늄 RC 베타2에서 브라우저 별칭이 바뀐 모양입니다.

갑자기 셀레늄으로 테스트해 볼일이 생겨 최신버전으로 설치하고 매뉴얼/블로그 따라해보니 잘 안되네요.

삽질 끝에 브라우저 별칭을 잘못 지정한 것을 알게되었습니다.

이전 버전의 *iexplore는 *iexploreproxy로, *firefox는 *firefoxproxy로 바뀌었습니다.

 

 

LAUNCHER NAME          DESCRIPTION                    CROSS-DOMAIN

--------------------------------------------------------------------
*iexplore, *iehta  =>  Internet Explorer in HTA mode  YES
*iexploreproxy     =>  Internet Explorer normal           NO
*firefox, *chrome  =>  Firefox in Chrome mode         YES
*firefoxproxy        =>  Firefox normal                        NO

 

더 자세한 내용은 다음 사이트를 참조하세요.

http://clearspace.openqa.org/community/selenium/blog/2009/01/13/selenium-rc-beta-2-goodies-and-gotchas

이 글은 스프링노트에서 작성되었습니다.

신고
Posted by 에코지오

댓글을 달아 주세요



티스토리 툴바