셀렉터
WebdriverIO MCP 서버는 웹 페이지와 모바일 앱에서 요소를 찾기 위한 다양한 셀렉터 전략을 지원합니다.
정보
모든 WebdriverIO 셀렉터 전략을 포함한 포괄적인 셀렉터 문서는 주요 셀렉터 가이드를 참조하세요. 이 페이지는 MCP 서버에서 일반적으로 사용되는 셀렉터에 중점을 둡니다.
웹 셀렉터
브라우저 자동화를 위해 MCP 서버는 모든 표준 WebdriverIO 셀렉터를 지원합니다. 가장 일반적으로 사용되는 것들은 다음과 같습니다:
| 셀렉터 | 예시 | 설명 |
|---|---|---|
| CSS | #login-button, .submit-btn | 표준 CSS 셀렉터 |
| XPath | //button[@id='submit'] | XPath 표현식 |
| 텍스트 | button=Submit, a*=Click | WebdriverIO 텍스트 셀렉터 |
| ARIA | aria/Submit Button | 접근성 이름 셀렉터 |
| 테스트 ID | [data-testid="submit"] | 테스트에 권장됨 |
자세한 예시와 모범 사례는 셀렉터 문서를 참조하세요.
모바일 셀렉터
모바일 셀렉터는 Appium을 통해 iOS 및 Android 플랫폼 모두에서 작동합니다.
접근성 ID (권장)
접근성 ID는 가장 신뢰할 수 있는 크로스 플랫폼 셀렉터입니다. iOS와 Android 모두에서 작동하며 앱 업데이트에도 안정적입니다.
# 구문
~accessibilityId
# 예시
~loginButton
~submitForm
~usernameField
모범 사례
가능한 경우 항상 접근성 ID를 선호하세요. 다음과 같은 이점이 있습니다:
- 크로스 플랫폼 호환성(iOS + Android)
- UI 변경에도 안정성 유지
- 더 나은 테스트 유지보수성
- 앱의 접근성 향상
Android 셀렉터
UiAutomator
UiAutomator 셀렉터는 Android에서 강력하고 빠릅니다.
# 텍스트로 찾기
android=new UiSelector().text("Login")
# 부분 텍스트로 찾기
android=new UiSelector().textContains("Log")
# 리소스 ID로 찾기
android=new UiSelector().resourceId("com.example:id/login_button")
# 클래스 이름으로 찾기
android=new UiSelector().className("android.widget.Button")
# 설명(접근성)으로 찾기
android=new UiSelector().description("Login button")
# 조건 결합
android=new UiSelector().className("android.widget.Button").text("Login")
# 스크롤 가능한 컨테이너
android=new UiScrollable(new UiSelector().scrollable(true)).scrollIntoView(new UiSelector().text("Item"))
리소스 ID
리소스 ID는 Android에서 안정적인 요소 식별을 제공합니다.
# 전체 리소스 ID
id=com.example.app:id/login_button
# 부분 ID(앱 패키지 추론)
id=login_button
XPath (Android)
XPath는 Android에서 작동하지만 UiAutomator보다 느립니다.
# 클래스와 텍스트로 찾기
//android.widget.Button[@text='Login']
# 리소스 ID로 찾기
//android.widget.EditText[@resource-id='com.example:id/username']
# 콘텐츠 설명으로 찾기
//android.widget.ImageButton[@content-desc='Menu']
# 계층 구조로 찾기
//android.widget.LinearLayout/android.widget.Button[1]
iOS 셀렉터
Predicate String
iOS Predicate String은 iOS 자동화에서 빠르고 강력합니다.
# 레이블로 찾기
-ios predicate string:label == "Login"
# 부분 레이블로 찾기
-ios predicate string:label CONTAINS "Log"
# 이름으로 찾기
-ios predicate string:name == "loginButton"
# 타입으로 찾기
-ios predicate string:type == "XCUIElementTypeButton"
# 값으로 찾기
-ios predicate string:value == "ON"
# 조건 결합
-ios predicate string:type == "XCUIElementTypeButton" AND label == "Login"
# 가시성 확인
-ios predicate string:label == "Login" AND visible == 1
# 대소문자 구분 없음
-ios predicate string:label ==[c] "login"
Predicate 연산자:
| 연산자 | 설명 |
|---|---|
== | 같음 |
!= | 같지 않음 |
CONTAINS | 부분 문자열 포함 |
BEGINSWITH | ~로 시작함 |
ENDSWITH | ~로 끝남 |
LIKE | 와일드카드 일치 |
MATCHES | 정규식 일치 |
AND | 논리 AND |
OR | 논리 OR |
Class Chain
iOS Class Chain은 계층적 요소 위치 지정을 좋은 성능으로 제공합니다.
# 직접 자식
-ios class chain:**/XCUIElementTypeButton[`label == "Login"`]
# 모든 하위 항목
-ios class chain:**/XCUIElementTypeButton
# 인덱스로 찾기
-ios class chain:**/XCUIElementTypeCell[3]
# Predicate와 결합
-ios class chain:**/XCUIElementTypeButton[`name == "submit" AND visible == 1`]
# 계층 구조
-ios class chain:**/XCUIElementTypeTable/XCUIElementTypeCell[`label == "Settings"`]
# 마지막 요소
-ios class chain:**/XCUIElementTypeButton[-1]