Селекторы
Сервер WebdriverIO MCP поддерживает множество стратегий селекторов для поиска элементов на веб-страницах и в мобильных приложениях.
Полную документацию по селекторам, включая все стратегии селекторов WebdriverIO, смотрите в основном руководстве Selectors. Эта стр аница посвящена селекторам, обычно используемым с сервером MCP.
Веб-селекторы
Для автоматизации браузера сервер MCP поддерживает все стандартные селекторы WebdriverIO. Наиболее часто используемые включают:
| Селектор | Пример | Описание |
|---|---|---|
| CSS | #login-button, .submit-btn | Стандартные CSS селекторы |
| XPath | //button[@id='submit'] | XPath выражения |
| Text | button=Submit, a*=Click | Текстовые селекторы WebdriverIO |
| ARIA | aria/Submit Button | Селекторы по имени доступности |
| Test ID | [data-testid="submit"] | Рекомендуется для тестирования |
Подробные примеры и лучшие практики смотрите в документации Selectors.
Мобильные селекторы
Мобиль ные селекторы работают с платформами iOS и Android через Appium.
Accessibility ID (Рекомендуется)
Accessibility ID - это самый надежный кросс-платформенный селектор. Они работают как на iOS, так и на Android и стабильны при обновлениях приложения.
# Синтаксис
~accessibilityId
# Примеры
~loginButton
~submitForm
~usernameField
Всегда предпочитайте accessibility ID, когда они доступны. Они обеспечивают:
- Кросс-платформенную совместимость (iOS + Android)
- Стабильность при изменениях UI
- Лучшую поддерживаемость тестов
- Улучшенную доступность вашего приложения
Android селекторы
UiAutomator
UiAutomator селекторы мощные и быстрые для Android.
# По тексту
android=new UiSelector().text("Login")
# По частичному тексту
android=new UiSelector().textContains("Log")
# По идентификатору ресурса
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"))
Resource ID
Resource ID обеспечивают стабильную идентификацию элементов на Android.
# Полный Resource ID
id=com.example.app:id/login_button
# Частичный ID (пакет при ложения подразумевается)
id=login_button
XPath (Android)
XPath работает на Android, но медленнее, чем UiAutomator.
# По классу и тексту
//android.widget.Button[@text='Login']
# По Resource 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 Strings быстрые и мощные для автоматизации 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 | Логическое И |
OR | Логическое ИЛИ |
Class Chain
iOS Class Chains обеспечивают иерархический поиск элементов с хорошей производительностью.
# Прямой потомок
-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]
XPath (iOS)
XPath работает на iOS, но медленнее, чем predicate strings.
# По типу и метке
//XCUIElementTypeButton[@label='Login']
# По имени
//XCUIElementTypeTextField[@name='username']
# По значению
//XCUIElementTypeSwitch[@value='1']
# Иерархический
//XCUIElementTypeTable/XCUIElementTypeCell[1]
Кросс-платформенная стратегия селекторов
При написании тестов, которые должны работать как на iOS, так и на Android, используйте следующий порядок приоритета:
1. Accessibility ID (Лучший вариант)
# Работает на обеих платформах
~loginButton