Appium, Selenium - 삽질 기록

정태경·2022년 11월 20일
1
post-thumbnail

새로운 직장에서 Python을 활용하여 UI 자동화 테스트를 구축하고 있다.(이전에는 Java를 주로 활용했었는데, 도대체 몇개의 언어를 다루는 것인지 모르겠다 ㅠㅠ)
오늘은 자동화 테스트 환경을 구성하면서 몇 가지 도움이 될만한 내용과 구축 과정에서 삽질한 내용들을 정리해보려고 한다. 누군가에게는 도움이 될 수 있겠지...!

Selenium Manager의 등장

첫 번째로 Selenium 4.6.0 버전의 활용이다. Selenium 4.6.0 미만의 버전에서는 브라우저별 웹 드라이버를 관리하기 위해서 별도의 패키지(webdriver_manager)를 Import 해서 사용했었다. 그러나 4.6.0 버전부터는 그럴 필요가 없어졌다. Selenium 자체에서 Selenium Manager를 통해 클라이언트 드라이버를 지원해주기 때문이다. 자세한 내용은 아래 코드 예제를 참고하면 좋을듯하다.

# 4.6.0 미만 버전의 코드 
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.firefox import GeckoDriverManager

if request.param == "chrome":
   driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) 
if request.param == "firefox":
   driver = webdriver.Firefox(service=Service(GeckoDriverManager().install()), service_log_path='/dev/null') 
 # 4.6.0 버전의 코드
from selenium import webdriver

if request.param == "chrome":
	driver = webdriver.Chrome()
if request.param == "firefox":
	driver = webdriver.Firefox()

Appium 트러블 슈팅

Appium 서버를 띄운 후 iOS 시뮬레이터의 desired capabilities를 올바르게 입력해주었음에도 selenium.common.exceptions.WebDriverException 에러가 발생하였다. 분명 올바른 desired capabilities를 입력해주었는데 말이다...

# 입력했던 desired capabilities 정보 
    elif request.param == "iPhone_12_Pro_Safari":
        log.logger.info("iPhone_12_Pro_Safari Driver 생성 시작")
        desired_caps = {
            "platformName": "iOS",
            "browserName": "Safari",
            "appium: platformVersion": "16.1",
            "appium:automationName": "xcuitest",
            "appium:deviceName": "iPhone 12 Pro",
            "appium:includeSafariInWebviews": True,
            "appium:newCommandTimeout": 3600,
            "appium:connectHardwareKeyboard": True
        }
        driver = appiumdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
        log.logger.info("iPhone_12_Pro_Safari Driver 생성 완료")

Exception Message

selenium.common.exceptions.WebDriverException: Message: The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource

원인 파악 및 해결

분명 올바른 desired capabilities를 입력했기에 서버 이슈로 추측이 되었고 Exception Message를 참고하여 서버 로그 확인 + 구글링을 해보니 Appium 서버의 버전이 2.0으로 올라오면서부터 서버 실행 시 서버의 base path를 지정해줘야 한다는 것을 깨달았다. 따라서 코드 수정 없이 서버 실행 시 base path를 지정해주어(appium --base-path /wd/hub) 에러를 해결할 수 있었다.

profile
現 두나무 업비트 QA 엔지니어, 前 마이리얼트립 TQA 엔지니어

0개의 댓글