Bộ chọn
Máy chủ WebdriverIO MCP hỗ trợ nhiều chiến lược bộ chọn để định vị các phần tử trên trang web và ứng dụng di động.
Để xem tài liệu toàn diện về bộ chọn bao gồm tất cả chiến lược bộ chọn WebdriverIO, hãy xem hướng dẫn chính về Bộ chọn. Trang này tập trung vào các bộ chọn thường được sử dụng với máy chủ MCP.
Bộ chọn Web
Đối với tự động hóa trình duyệt, máy chủ MCP hỗ trợ tất cả bộ chọn WebdriverIO tiêu chuẩn. Những bộ chọn được sử dụng phổ biến nhất bao gồm:
| Bộ chọn | Ví dụ | Mô tả |
|---|---|---|
| CSS | #login-button, .submit-btn | Bộ chọn CSS tiêu chuẩn |
| XPath | //button[@id='submit'] | Biểu thức XPath |
| Text | button=Submit, a*=Click | Bộ chọn văn bản WebdriverIO |
| ARIA | aria/Submit Button | Bộ chọn tên trợ năng |
| Test ID | [data-testid="submit"] | Được khuyến nghị cho kiểm thử |
Để biết ví dụ chi tiết và phương pháp hay nhất, xem tài liệu Bộ chọn.
Bộ chọn Di động
Bộ chọn di động hoạt động với cả nền tảng iOS và Android thông qua Appium.
Accessibility ID (Khuyến nghị)
Accessibility ID là bộ chọn đa nền tảng đáng tin cậy nhất. Chúng hoạt động trên cả iOS và Android và ổn định qua các bản cập nhật ứng dụng.
# Cú pháp
~accessibilityId
# Ví dụ
~loginButton
~submitForm
~usernameField
Luôn ưu tiên sử dụng accessibility ID khi có sẵn. Chúng cung cấp:
- Khả năng tương thích đa nền tảng (iOS + Android)
- Độ ổn định qua các thay đổi UI
- Khả năng bảo trì kiểm thử tốt hơn
- Cải thiện khả năng truy cập của ứng dụng
Bộ chọn Android
UiAutomator
Bộ chọn UiAutomator mạnh mẽ và nhanh cho Android.
# Theo Văn bản
android=new UiSelector().text("Login")
# Theo Văn bản một phần
android=new UiSelector().textContains("Log")
# Theo Resource ID
android=new UiSelector().resourceId("com.example:id/login_button")
# Theo Tên lớp
android=new UiSelector().className("android.widget.Button")
# Theo Mô tả (Accessibility)
android=new UiSelector().description("Login button")
# Điều kiện kết hợp
android=new UiSelector().className("android.widget.Button").text("Login")
# Container có thể cuộn
android=new UiScrollable(new UiSelector().scrollable(true)).scrollIntoView(new UiSelector().text("Item"))
Resource ID
Resource ID cung cấp khả năng nhận dạng phần tử ổn định trên Android.
# Resource ID đầy đủ
id=com.example.app:id/login_button
# ID một phần (gói ứng dụng được suy ra)
id=login_button
XPath (Android)
XPath hoạt động trên Android nhưng chậm hơn UiAutomator.
# Theo Lớp và Văn bản
//android.widget.Button[@text='Login']
# Theo Resource ID
//android.widget.EditText[@resource-id='com.example:id/username']
# Theo Mô tả nội dung
//android.widget.ImageButton[@content-desc='Menu']
# Phân cấp
//android.widget.LinearLayout/android.widget.Button[1]
Bộ chọn iOS
Predicate String
iOS Predicate String nhanh và mạnh mẽ cho tự động hóa iOS.
# Theo Nhãn
-ios predicate string:label == "Login"
# Theo Nhãn một phần
-ios predicate string:label CONTAINS "Log"
# Theo Tên
-ios predicate string:name == "loginButton"
# Theo Kiểu
-ios predicate string:type == "XCUIElementTypeButton"
# Theo Giá trị
-ios predicate string:value == "ON"
# Điều kiện kết hợp
-ios predicate string:type == "XCUIElementTypeButton" AND label == "Login"
# Khả năng hiển thị
-ios predicate string:label == "Login" AND visible == 1
# Không phân biệt chữ hoa chữ thường
-ios predicate string:label ==[c] "login"
Toán tử Predicate:
| Toán tử | Mô tả |
|---|---|
== | Bằng |
!= | Không bằng |
CONTAINS | Chứa chuỗi con |
BEGINSWITH | Bắt đầu với |
ENDSWITH | Kết thúc với |
LIKE | Khớp với ký tự đại diện |
MATCHES | Khớp với regex |
AND | Phép AND logic |
OR | Phép OR logic |
Class Chain
iOS Class Chain cung cấp khả năng định vị phần tử phân cấp với hiệu suất tốt.
# Con trực tiếp
-ios class chain:**/XCUIElementTypeButton[`label == "Login"`]
# Bất kỳ phần tử con nào
-ios class chain:**/XCUIElementTypeButton
# Theo Index
-ios class chain:**/XCUIElementTypeCell[3]
# Kết hợp với Predicate
-ios class chain:**/XCUIElementTypeButton[`name == "submit" AND visible == 1`]
# Phân cấp
-ios class chain:**/XCUIElementTypeTable/XCUIElementTypeCell[`label == "Settings"`]
# Phần tử cuối cùng
-ios class chain:**/XCUIElementTypeButton[-1]
XPath (iOS)
XPath hoạt động trên iOS nhưng chậm hơn predicate string.
# Theo Kiểu và Nhãn
//XCUIElementTypeButton[@label='Login']
# Theo Tên
//XCUIElementTypeTextField[@name='username']
# Theo Giá trị
//XCUIElementTypeSwitch[@value='1']
# Phân cấp
//XCUIElementTypeTable/XCUIElementTypeCell[1]