본문 바로가기
Automation

Appium - Android webview control 하기 (Python)

by Zeromk2 2022. 5. 25.
728x90

최근에는 하이브리드앱이 아닌 것을 찾기 어려운 만큼 하이브리드 앱이 많이 나오고 있습니다.

그래서 자동화를 진행하다가 웹뷰와 만나게 되는데요

이 때 웹뷰 컨트롤을 위해 어떤 것을 해야 하는지 알아보도록 하겠습니다.

이 포스팅은 팀 분들의 도움을 받아 작성할 수 있었습니다!

 

1. context를 먼저 변경해줍니다.

context는 기본적으로 

NATIVE_APP

으로 되어있을 겁니다. 이것을 webview로 변경해주셔야 하는데요 NATIVE_APP은 아마 모든 앱이 동일 하겠지만

webview의 context 명은 앱마다 다를 수 있습니다.

 

print(wd.contexts)

로 모든 context를 불러와보시고 해당 앱에 맞는 webview 이름을 체크해두세요.

 

webview 명은 아마 

WEBVIEW_

로 시작할겁니다.

 

webview 명이 예를 들어 WEBVIEW_com.goddessbest 라고 한다면 이제 이 webview로 스위칭을 해줍니다.

webdriver.switch_to.context("WEBVIEW_com.goddessbest")
또는
webdriver.switch_to.context(wd.contexts[-1])

contexts가 배열을 반환하기 때문에 webview가 있는 배열을 선택하시면 됩니다.

거의 마지막에 있는 것이 webview 이므로 아래 예 처럼 하셔도 됩니다.

 

2. window를 변경해줍니다.

일반적인 webview라면 context만 변경해도 바로 사용하실 수 있습니다.

다만 webview위에 또 webview가 있는 경우에는

context만 변경해서는 내가 원하는 webview를 컨트롤 하실 수 없습니다.

이럴경우 window를 내가 원하는 webview로 바꿔줘야 합니다.

 

일단 현재 window가 뭔지 파악해 둡니다.

print(webdriver.current_window_handle)

 

그리고 전체 window를 확인합니다.

print(webdriver.window_handles)

 

내가 변경해야 할 window를 확인했다면 스위칭 해줍니다.

webdriver.switch_to.window(변경할 window)

 

이제 내가 원하는 webview의 window를 컨트롤 하실 수 있게됩니다!

webview는 CLASS_NAME으로 element를 찾으셔서 컨트롤 하시는 것을 추천 드립니다.

 

!중요

- webview 테스트가 완료되셨을 경우 다시 NATIVE_APP으로 context를 복구 하셔야 합니다.

- window를 변경하신뒤에 해당 window가 닫히거나 화면이 바뀌면 다시 원래 window로 돌아오셔야 합니다.

- context와 window를 변경하시는 것이 중요하니 잊지말고 복구해주세요

댓글