최근에는 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 내에서는 Web
및 Web.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 > Test' 카테고리의 다른 글
[Android Test] 2) Robolectric 설치 및 환경 설정 (0) | 2020.03.12 |
---|---|
[Android Test] 1) Robolectric 이란? (0) | 2020.03.11 |
[Android UI Test] 5) Espresso 를 활용한 RecyclerView Test (0) | 2020.03.09 |
[Android UI Test] 4) Espresso Intended 와 Intending (0) | 2020.03.08 |
[Android UI Test] 3) Espresso API 제대로 알고 사용하기 (0) | 2020.03.07 |