반응형

최근에는 React Native 등을 이용한 하이브리드 앱도 많고, 네이티브 앱에서도 하나 이상의 WebView 를 사용하는 경우가 많기 때문에 WebView 에 대해 테스트를 잘 작성하는 것도 중요합니다.

 

Espresso 는 이를 위해 espresso-web 이라는 별도의 모듈을 제공하고 있으며, 역시나 이 패키지를 앱 수준의 build.gradle 내 dependencies 에 추가 해줘야 합니다.

 

Basic for Espresso-web

Espresso-web 은 WebView와 상호작용 하는 느낌을 주면서도 Synchronization 을 주의함과 동시에 boilerplate 코드를 최소화 하기 위해 노력합니다.

WebView 의 Interactions 은 사실상 기존에 Espresso 에서 제공하는 ViewActions 들로 구성되어 있습니다.

하지만 Espresso-web 의 ViewActions 은 Atom 이라는 WebDriver 로 동작합니다.

WebDriver Atom

Atom 은 programmatically 하게 웹 element 를 찾고 다루는데 사용됩니다. 또한 Atom 은 브라우저를 WebDriver 에 의해 브라우저를 다루는 데에도 사용됩니다.

 

컨셉상 Atom 은 ViewAction 과 유사하다고 보면 됩니다. UI 내에서 어떤 action 을 수행 해냅니다.

 

 

Web.WebInteraction

Espresso 내에서는 WebWeb.WebInteraction 클래스가 WebView 와 상호작용 하는 것과 같은 느낌을 줍니다. 따라서 WebView 를 테스트하는 데에는 Atom 이 기본 Espreeso 의 ViewMatchers 와 ViewActions 를 대체하여 사용됩니다.

 

Web.WebInteraction 클래스 안에는 대표적으로 다음과 같은 메소드들이 있습니다.
(이외에도 모든 메소드를 보고 싶다면 Developer 사이트를 참고하시면 됩니다.)

  • check(WebAssertion assertion)

    • 파라미터로 받은 assertion 을 통해 평가하여 결과 값이 true 인지 확인합니다.

  • perform(Atom atom)

    • 주어진 파라미터를 수행합니다. 이때 Atom 이 리턴 될 때까지 메소드는 block 됩니다.

  • get()

    • 이전에 호출된 perform() 이나 check() 의 결과를 리턴합니다.

  • reset()

    • Interaction 의 모든 reference 를 초기화 합니다.

  • withElement(Atom element)

    • WebView 내에서 DOM 요소를 참조합니다.

  • withTimeout(long amount, TimeUnit unit)

    • WebInteraction 에 타임아웃을 설정합니다.

  • forceJavascriptEnabled()

    • WebView 에서 Javascript 가 사용 가능하도록 강제합니다.

      이것이 중요한 이유는 모든 WebView 의 상호작용은 Javascript 를 통해 이루어집니다.
      그러므로 테스트하고자 하는 WebView 는 반드시 Javascript 를 지원해야 합니다.

 

TEST API

onView() 를 통해 View에 대해 접근하던 것과 달리 WebView 는 기본적으로 onWebView() 메소드를 통해 접근합니다.

 

이제 onWebView() 와 함께 위에서 살펴본 메소드들을 활용하여 간단한 사용방법을 살펴보겠습니다.

onWebView()
        .withElement(findElement(Locator.ID, "link_2"))
        .perform(webClick())
        .check(webMatches(getCurrentUrl(), containsString("navigation_2.html")))

Espresso 를 어느정도 알고 계시다면 이해가 빠르실 것입니다.

 

위 코드에서 withElement(findElement(..)) 가 기존에 onView(withId(..)) 의 역할과 유사하고,
perform(webClick()) 메소드는 perform(click()) 과 유사합니다.

그리고 check(webMatches(...))check(matches(...)) 과 유사합니다.

 

이렇듯 사용 방법이 흡사하기 때문에 메소드만 잘 구분하여 사용한다면 WebView 에 대한 테스트도 기존에 안드로이드 뷰와 크게 다르지 않게 수행 할 수 있습니다.

 

 

구글이 제공하는 샘플

android/testing-samples

 

android/testing-samples

A collection of samples demonstrating different frameworks and techniques for automated testing - android/testing-samples

github.com

 

 

 

반응형
반응형