ULSANSTAR

엉뚱한 독서가

Selenium WebDriver 사용법

WebDriver와 Selenium-RC의 차이점

  • WebDriver는 각 브라우저의 드라이버를 만들어 각각 구동시키는 방법으로 테스트 수행
  • 기존 RC와는 달리 HTML내의 자바스크립트만을 테스트하지 않고, 전체 자바스크립트를 모두 테스트 할 수 있다.
  • 브라우저를 직접 호출하여 수행하므로 실제 브라우저의 기능들을 그대로 사용하여 테스트 수행할 수 있는 장점이 있다.

WebDriver와 Selenium-Server

  • WebDriver API만을 이용할 경우에는 Selenium Server가 필요하지 않음.
  • WebDriver는 직접 브라우저를 컨트롤하므로 Server는 필요하지 않음.
  • Selenium Server가 필요한 경우는 다음과 같다.
    1. 분산된 다중 장비또는 VM에서 Selenium-Grid를 사용하는 경우.
    2. 특정 버전의 브라우저가 탑재된 remote 장비에 접속하여 사용하는 경우
    3. Java를 사용하지 않는 경우(Python, C#, Ruby등)
    4. HtmlUnit Driver를 사용하는경우.

Selenium-WebDriver 프로젝트 설정

  • WebDriver Java Project는 Maven을 사용하면 편리하다. 단, maven을 설치하지 않아도 테스트 수행은 가능하다. 테스트 자동화 시 사용해도 무방함.
  • Maven의 pom.xml파일에 아래와 같이 추가 후 이클립스에 import한다.

     
  • maven을 이클립스에 import하는 방법은 아래와 같다.
    1. File – Import선택
    2. General – Existing Projects into Workspace
    3. Next 클릭한 후
    4. Browse를 클릭한다.
    5. pom.xml을 찾아 선택한다.
    6. finish를 클릭한다.(중간에 이미 존재하는 프로젝트라고 나타나면 그냥 OK를 클릭한다)
  • 만약, maver관련 플로그인이 없을 경우에는 이클립스에 m2eclipse plugin을 설치해야 한다.

Selenium WebDriver API

  • 브라우저별 Drvier로 구성되어 별도 수행하게 된다.
  • API를 잘 아는 경우에는 직접 코딩을 통해 수행할 수 있다.
  • 다만, API나 기본 구조를 잘 모를 경우에는 IDE를 통해 작성된 테스트케이스를 Export Test case AS를 통해 Junit4 WebDriver 파일로 변환할 수 있다.
  • 아래 예제를 참조하기 바람.

    <Selenium에서 제공하는 예제 샘플>
  • 위의 예제 소스를 그대로 복사해서 수행하면 Java Application으로 구동됨을 확인할 수 있다.
  • 기존 테스트 예제에 썼던 “개그콘서트”검색 예제

    1. 구글 예제와 Daum “개그콘서트” 검색 예제의 차이는 Java application과 Junit4의 차이로 보면된다.
    2. WebDriver는 두가지의 경우를 모두 지원한다.
    3. 다만, 테스트 시에는 Junit으로 사용하는 것이 편리하다.
  • Driver 생성(브라우저를 생성)
    • Firefox Driver를 활용할 경우
    • Chrome Driver를 활용할 경우
    • Internet Explorer Driver를 활용할 경우
    • 상세 내용 및 그외 Driver는 Selenium WebDriver Docs을 참조한다.
  • URL 입력(페이지 가져오기)
    • get()함수를 이용해서 생성된 Driver에 테스트할 타겟을 가져온다.
  • UI Elements(WebElements) 찾기
    • 기존 RC에서 사용된 Selenese와 찾는 방법은 동일하다. 다만, 제공되는 API가 다르다.
    • 요소검사 또는 개발자도구를 통해 해당 Tag의 속성을 확인하여 해당되는 경우를 입력한다.
    • ID로 검색 시

       

       
    • Class Name으로 검색 시.

       

       
    • Tag Name으로 검색 시.

       

       
    • Name으로 검색 시

       

       
    • Link Text로 검색 시

       

       
    • 부분 Link Text로 검색 시

       

       
    • CSS로 검색 시

       

       
    • Xpath로 검색 시 : xpath의 경우 지원하지 않는 브라우저가 있으므로 동일한 테스트 케이스를 수행하려면 사용 자제해야함.

       

       
    • 그외 상세 내용은 Selenium WebDriver API docs를 참조한다.

♦findElement API 사용 시 주의사항

  1. HTML Tag의 속성을 이용해서 우선 검색한다.
  2. 간혹 HTML속성을 못찾는 경우에는 css selector를 활용하여 검색한다.
  3. css selector로도 찾아지지 않은 경우는 거의 대부분이 웹표준을 준수하지 않은 경우이다. 개발자에게 알려 수정 조치하는 것이 좋다.
  4. UI 변경을 대비하여 Tag의 ID로 검색하는 것은 자제한다.

 

WebDriver로 테스트 수행 중 원하는 결과가 제대로 동작하지 않을 경우

  • 테스트 환경 상 페이지 로딩이나 브라우저 수행 속도가 각각 다를 수 있어서 제대로 된 테스트를 할 수 없는 경우가 종종 있다.
  • 이때, 지연 시간을 두어 테스트를 할 수 있다.(기존 java의 sleep을 사용해도 무방하나, WebDriver API를 권장)
  • 특정 조건에 따른 지연 시간 생성 방법
    • 예를 들어 특정 부분이 로딩될때까지 지연시간을 두고 싶은 경우 : id요소가 Display되고 사용이 가능할 때까지 기다린다. 최대10초이나 그전에 완료되면 지연시간은 자동으로 멈춘다.
    • 그 외 다양한 API들이 제공된다. ExpectedConditions API를 참고
  • 단순 대기시간으로 지연 시간 생성방법
    • 예를 들어 조건없이 무조건 특정 시간만큼 지연시간을 확보하려는 경우
    • 보통 초기 브라우저 로딩 시간을 줄 때 사용한다.
  • 이처럼 적절한 지연 시간을 이용하여 테스트 시 원하는 테스트 결과를 얻을 수 있다

 

WebDriver Backed Selenium-RC

  • Java 버전의 WebDriver는 Selenium-RC API를 함께 사용할 수 있다.
  • 상호 보완적으로 사용하기 위해서 WebDriver 기술내에 Selenium-RC도 동일하게 사용할 수 있도록 제공한다.
  • 아래 예제는 Daum “개그콘서트”검색 결과 테스트를 Junit4 WebDriver Backed로 변환한 소스이다.

     
  • 기존 WebDriver API로만 구현된 소스보다는 한결 간결하다.
  • 다만, 구동을 Driver개념으로 수행하는 점이 다르다.
  • IDE를 통해 Export시 플러그인 설치를 하면 Junit4 WebDriver Backed 소스로 변환이 가능하다.
  • 위의 소스 두가지를 수행 시 테스트가 동일하게 동작함을 알 수 있다.

참고자료

, ,

One thought on “Selenium WebDriver 사용법

  • 송신일 댓글:

    질문 좀 드릴게요. 셀레니움2.0을 사용해서
    멤버로 등록된 밴드에서 모든 글과 댓글을 순서대로 펼칠수 있을까요?

    다시 설명드리면,
    예를들어 제가 파이썬공부하기라는 네이버 밴드에 가입되었다고 합시다.
    그 밴드에는 기존에 멤버들이 쓴 많은 글들과 댓글들이 있다고 합시다.
    그때 크롬 브라우저를 열고 그 밴드로 로그인 한 다음
    셀레니움2.0을 사용해서 글 더보기 단추를 누르고 댓글 단추를 누르고
    맨 아래로 내려가서 또 다음글에 같은 동작을 반복하고
    이런 식으로 계속해서 그 밴드의 모든 글을 펼쳐놓을수 있을까요?

    그 이후에 캡쳐로 텍스트를 모두 받아보려고 그럽니다.

    이런 작업도 셀레니움으로 가능한지 알고싶습니다.
    셀레니움을 한번도 사용해 보지 않아서 그런 기능이 가능한지 알고 싶군요.

    꼭 답변 부탁드릴게요. 감사합니다.

댓글남기기