[Appium 자동화 #2] Appium Inspector로 UI 요소 찾기

seoop·2026년 1월 22일
post-thumbnail

자동화 테스트의 핵심은 "어떤 요소를 클릭할 것인가"입니다. Appium Inspector를 사용해서 앱의 UI 요소를 찾는 방법을 알아봅니다.


시리즈 목차

  1. 환경 구축 가이드
  2. Appium Inspector로 요소 찾기 ← 현재 글
  3. 첫 번째 테스트 코드 작성하기
  4. pytest fixture 활용하기
  5. 여러 디바이스에서 병렬 테스트 실행하기
  6. 실무에서 바로 쓰는 테스트 자동화 개선 팁

Appium Inspector란?

Appium Inspector는 앱 화면의 UI 요소를 탐색하고 Locator를 확인할 수 있는 GUI 도구입니다.

주요 기능

  • 앱 화면을 PC에서 실시간으로 확인
  • UI 요소의 속성 (ID, XPath, text 등) 확인
  • 요소 클릭, 텍스트 입력 등 동작 테스트
  • Locator 자동 생성

1. Appium Inspector 설치

다운로드

GitHub Releases에서 최신 버전을 다운로드합니다.

OS파일 형식설치 방법
Windows.exe다운로드 후 실행하여 설치
Mac (Intel).dmg다운로드 후 Applications 폴더로 드래그
Mac (Apple Silicon).dmg (arm64)다운로드 후 Applications 폴더로 드래그

Mac 사용자 참고: 첫 실행 시 "확인되지 않은 개발자" 경고가 나타나면, 시스템 설정 > 개인정보 보호 및 보안에서 "확인 없이 열기"를 클릭합니다.


2. Appium 서버 시작

Inspector를 사용하기 전에 Appium 서버를 먼저 시작해야 합니다.

appium --address 127.0.0.1 --port 4723 --base-path /

정상 시작 시:

[Appium] Welcome to Appium v2.x.x
[Appium] Appium REST http interface listener started on http://127.0.0.1:4723

3. Appium Inspector 연결 설정

3.1 Inspector 실행

설치한 Appium Inspector를 실행합니다.

3.2 Remote Host 설정

항목
Remote Host127.0.0.1
Remote Port4723
Remote Path/

3.3 Desired Capabilities 설정

JSON 형식으로 입력합니다:

{
  "platformName": "Android",
  "appium:automationName": "UiAutomator2",
  "appium:deviceName": "YOUR_DEVICE_UDID",
  "appium:udid": "YOUR_DEVICE_UDID",
  "appium:appPackage": "com.example.myapp",
  "appium:appActivity": ".MainActivity",
  "appium:noReset": true
}

필수 값 확인 방법

# 디바이스 UDID 확인
adb devices

# 앱 패키지명 확인 (앱 실행 상태에서)
# Windows
adb shell dumpsys window | findstr mCurrentFocus

# Mac / Linux
adb shell dumpsys window | grep mCurrentFocus

# 출력 예: mCurrentFocus=Window{... com.example.myapp/.MainActivity}
#          패키지명: com.example.myapp
#          액티비티: .MainActivity

3.4 Start Session

모든 설정이 완료되면 Start Session 버튼을 클릭합니다.


4. UI 요소 탐색하기

4.1 화면 구성

Inspector가 연결되면 3개 영역이 표시됩니다:

영역설명
왼쪽앱 화면 스크린샷
중앙UI 계층 구조 (XML 트리)
오른쪽선택한 요소의 속성

4.2 요소 선택

  1. 왼쪽 스크린샷에서 원하는 요소 클릭
  2. 또는 중앙 트리에서 요소 선택
  3. 오른쪽에서 속성 확인

4.3 주요 속성

속성설명예시
resource-id고유 IDcom.example:id/btn_login
text표시 텍스트로그인
content-desc접근성 설명로그인 버튼
class요소 타입android.widget.Button
bounds위치 좌표[0,100][200,150]

5. Locator 전략

5.1 우선순위 (권장 순서)

순위Locator장점단점
1resource-id안정적, 빠름없는 경우 있음
2accessibility id의미 명확설정 안 된 경우 많음
3text직관적다국어 시 변경됨
4XPath모든 요소 접근 가능느림, 불안정

5.2 Locator 예시

resource-id 사용 (권장)

from appium.webdriver.common.appiumby import AppiumBy

# resource-id로 찾기
element = driver.find_element(AppiumBy.ID, "com.example.myapp:id/btn_login")

text 사용

# 텍스트로 찾기
element = driver.find_element(AppiumBy.XPATH, "//*[@text='로그인']")

content-desc 사용

# accessibility id로 찾기
element = driver.find_element(AppiumBy.ACCESSIBILITY_ID, "로그인 버튼")

XPath 사용 (최후 수단)

# XPath로 찾기 (복잡한 조건)
element = driver.find_element(
    AppiumBy.XPATH,
    "//android.widget.Button[@text='확인' and @enabled='true']"
)

6. 피해야 할 Locator

6.1 인덱스 기반 XPath

# 나쁜 예 - UI 변경 시 깨짐
element = driver.find_element(AppiumBy.XPATH, "//android.widget.Button[3]")

6.2 전체 경로 XPath

# 나쁜 예 - 계층 변경 시 깨짐
element = driver.find_element(
    AppiumBy.XPATH,
    "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.Button"
)

6.3 좌표 기반

# 나쁜 예 - 해상도마다 다름
driver.tap([(100, 200)])

7. Inspector 활용 팁

7.1 Refresh 버튼

화면이 변경되면 상단의 Refresh 버튼으로 새로고침합니다.

7.2 요소 동작 테스트

선택한 요소에 대해 직접 동작을 테스트할 수 있습니다:

  • Tap: 클릭
  • Send Keys: 텍스트 입력
  • Clear: 텍스트 삭제

7.3 Locator 복사

오른쪽 패널에서 생성된 Locator를 바로 복사할 수 있습니다.

7.4 Recording 기능

동작을 녹화해서 코드로 변환하는 기능도 있습니다 (참고용으로만 사용 권장).


8. 실전 예시

로그인 화면 요소 찾기

요소Locator 전략
이메일 입력창IDcom.example:id/et_email
비밀번호 입력창IDcom.example:id/et_password
로그인 버튼IDcom.example:id/btn_login
회원가입 링크text//*[@text='회원가입']

코드로 변환

from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def login(driver, email, password):
    # 이메일 입력
    email_field = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((AppiumBy.ID, "com.example:id/et_email"))
    )
    email_field.send_keys(email)

    # 비밀번호 입력
    password_field = driver.find_element(AppiumBy.ID, "com.example:id/et_password")
    password_field.send_keys(password)

    # 로그인 버튼 클릭
    login_btn = driver.find_element(AppiumBy.ID, "com.example:id/btn_login")
    login_btn.click()

9. 자주 발생하는 문제

문제원인해결 방법
Session 연결 실패Appium 서버 미실행서버 먼저 시작
요소를 찾을 수 없음화면 로딩 중Refresh 후 재시도
resource-id가 없음개발 시 미설정text 또는 XPath 사용
동일 text 여러 개중복 요소부모 요소와 조합하여 XPath 작성

Mac 전용 문제

문제원인해결 방법
"손상된 앱" 경고Gatekeeper 차단터미널에서 xattr -cr /Applications/Appium\ Inspector.app 실행
Inspector가 열리지 않음보안 설정시스템 설정 > 개인정보 보호 및 보안 > "확인 없이 열기" 클릭
adb 명령어 미인식PATH 미설정~/.zshrcexport PATH=$PATH:~/Library/Android/sdk/platform-tools 추가

마치며

이번 글에서는 Appium Inspector를 사용해서 UI 요소를 찾는 방법을 알아봤습니다.

핵심 정리:

  • resource-id > accessibility id > text > XPath 순으로 사용
  • 인덱스 기반, 좌표 기반 Locator는 피하기
  • Inspector에서 먼저 테스트 후 코드 작성

다음 글에서는 찾은 Locator를 활용해서 실제 테스트 코드를 작성하는 방법을 알아보겠습니다.


참고 자료

profile
테스트 자동화와 QA 효율화를 고민하는 QA 엔지니어

0개의 댓글