Команды flow
Каждый шаг сценария — одна команда. Команды с селектором принимают простую строку (видимый текст) или объект-селектор — см. Flow-файл и селекторы.
| Команда | Кратко | web | android | ios |
|---|---|---|---|---|
launchApp |
Запустить (опц. сбросить) приложение | ✓ | ✓ | ✓ |
stopApp |
Остановить приложение | ✓ | ✓ | ✓ |
tapOn |
Тапнуть по элементу | ✓ | ✓ | ✓ |
longPressOn |
Долгое нажатие на элемент | ✓ | ✓ | ✓ |
doubleTapOn |
Двойной тап по элементу | ✓ | ✓ | ✓ |
inputText |
Ввести в сфокусированное поле | ✓ | ✓ | ✓ |
clearText |
Очистить сфокусированное поле | ✓ | ✓ | ✓ |
clearState |
Стереть данные приложения | ✓ | ✓ | ✓ |
assertVisible |
Проверить, что элемент виден | ✓ | ✓ | ✓ |
assertNotVisible |
Проверить, что элемента нет | ✓ | ✓ | ✓ |
waitForVisible |
Ждать, пока станет виден | ✓ | ✓ | ✓ |
copyText |
Скопировать текст элемента в переменную | ✓ | ✓ | ✓ |
assertTrue |
Проверка над подставленными значениями | ✓ | ✓ | ✓ |
scroll |
Прокрутить экран | ✓ | ✓ | ✓ |
scrollUntilVisible |
Прокручивать, пока элемент не появится | ✓ | ✓ | ✓ |
swipe |
Свайп по точкам или направлению | ✓ | ✓ | ✓ |
openLink |
Открыть deep link / URL | ✓ | ✓ | ✓ |
setLocation |
Подменить GPS-координаты | ✓ | ✓ | ✓ |
grantPermissions |
Выдать runtime-разрешения | ✓ | ✓ | ✓ |
hideKeyboard |
Убрать клавиатуру | ✓ | ✓ | — |
back |
Навигация назад | ✓ | ✓ | — |
runFlow |
Запустить под-сценарий (include) | ✓ | ✓ | ✓ |
repeat |
Повторить блок | ✓ | ✓ | ✓ |
launchApp
Заголовок раздела «launchApp»Запустить приложение под тестом. Объектная форма: { appId, clearState, stopApp } для холодного/чистого старта.
- launchApp: "appId"stopApp
Заголовок раздела «stopApp»Завершить приложение под тестом.
- stopApp: trueТапнуть по элементу по селектору (text/id/…) или { point: "x, y" }. Цели за пределами экрана подскролливаются в видимую область.
- tapOn: "text"longPressOn
Заголовок раздела «longPressOn»Нажать и удерживать элемент.
- longPressOn: "text"doubleTapOn
Заголовок раздела «doubleTapOn»Тапнуть по элементу дважды подряд.
- doubleTapOn: "text"inputText
Заголовок раздела «inputText»Ввести текст в текущее сфокусированное поле.
- inputText: "text"clearText
Заголовок раздела «clearText»Очистить сфокусированное текстовое поле (на iOS нужен драйвер XCUITest).
- clearText: trueclearState
Заголовок раздела «clearState»Сбросить сохранённое состояние приложения (чистая установка). iOS — только симулятор, best-effort.
- clearState: trueassertVisible
Заголовок раздела «assertVisible»Провалить шаг, если селектор не совпадает с видимым элементом.
- assertVisible: "text"assertNotVisible
Заголовок раздела «assertNotVisible»Провалить шаг, если селектор совпадает с видимым элементом.
- assertNotVisible: "text"waitForVisible
Заголовок раздела «waitForVisible»Опрашивать, пока селектор не станет видимым. Объектная форма добавляет { timeout } (мс).
- waitForVisible: "text"copyText
Заголовок раздела «copyText»Прочитать текст элемента для последующей подстановки ${} / assertTrue.
- copyText: "text"assertTrue
Заголовок раздела «assertTrue»Проверка { equals | contains: [a, b] } над значениями с подстановкой ${}.
- assertTrue: equals: [a, b]Прокрутить вверх/вниз/влево/вправо.
- scroll: downscrollUntilVisible
Заголовок раздела «scrollUntilVisible»Прокручивать, пока селектор не станет видимым.
- scrollUntilVisible: "text"Свайп { start, end } (px или % экрана) либо по направлению.
- swipe: start: "50%, 80%" end: "50%, 20%"openLink
Заголовок раздела «openLink»Открыть URL или deep link (web navigate / iOS idb open / Android am start VIEW).
- openLink: "url"setLocation
Заголовок раздела «setLocation»Переопределить координаты устройства { lat, lon }.
- setLocation: lat: 0 lon: 0grantPermissions
Заголовок раздела «grantPermissions»Выдать частые runtime-разрешения (iOS simctl / Android pm grant / web CDP).
- grantPermissions: truehideKeyboard
Заголовок раздела «hideKeyboard»Убрать экранную клавиатуру. Недоступно на iOS.
Платформы: web, android
- hideKeyboard: trueНазад (история браузера / аппаратная кнопка Android). Недоступно на iOS (нет аппаратной кнопки назад).
Платформы: web, android
- back: truerunFlow
Заголовок раздела «runFlow»Подключить другой flow-файл или инлайн { commands, when }. when принимает { visible | notVisible: selector } или { platform: android | [web, ios] }.
- runFlow: "file"Повторить блок { times | while, commands }.
- repeat: times: 2 commands: -request
Заголовок раздела «request»HTTP-запрос для API-тестирования: { method, url, headers, query, json | body, auth, extract, assert, retryUntil, timeout }. extract кладёт значения по JSONPath в ${переменные}, общие с UI-шагами; assert проверяет status (код или "2xx"), равенства json / { contains }, headers и JSON-schema; retryUntil поллит запрос, пока проверка не пройдёт. С device: none флоу становится чисто-API — устройство не резолвится и не бутится.
- request: url: "url"