tap
Выполняет жест касания на:
- элементе. Будет автоматически прокручивать, если элемент не найден.
- экране мобильного устройства, с предоставлением координат
xиy
Внутри использует:
- К асание элемента:
- команду
clickдля веб-окружений (браузеры Chrome/Safari или гибридные приложения) - Android
mobile: clickGestureили iOSmobile: tapдля нативных приложений, включая командуscrollIntoViewдля автоматической прокрутки
- команду
- Касание экрана:
- команду
actionдля веб-окружений (браузеры Chrome/Safari или гибридные приложения) - Android
mobile: clickGestureили iOSmobile: tapдля нативных приложений
- команду
Это различие делает команду tap более надежной альтернативой команде click для мобильных приложений.
Для нативных приложений эта команда отличается от команды click тем, что она автоматически прокручивает к элементу, используя команду scrollIntoView,
которая не поддерживается для нативных приложений командой click. В гибридных приложениях или веб-средах автоматическая прокрутка поддерживается обеими командами: click и tap.
Эта команда работает только со следующими актуальными компонентами:
- Сервер Appium (версия 2.0.0 или выше)
appium-uiautomator2-driver(для Android)appium-xcuitest-driver(для iOS)
Убедитесь, что ваша локальная или облачная среда Appium регулярно обновляется, чтобы избежать проблем с совместимостью.
Если вы хотите коснуться определенной координаты на экране, и вы используете скриншот дл я определения координат, помните, что координаты для iOS основаны на размере экрана устройства, а не на размере скриншота. Размер скриншота больше из-за плотности пикселей устройства. Средняя плотность пикселей устройства до iPhone 8 и текущих iPad составляет 2, для iPhone начиная с iPhone X соотношение равно 3. Это означает, что размер скриншота в 2 или 3 раза больше, чем размер экрана устройства, что означает, что если вы найдете координаты на скриншоте, разделите их на плотность пикселей устройства, чтобы получить правильные координаты экрана. Например:
const screenshotCoordinates = { x: 600, y: 900 };
const dpr = 3; // Пример для iPhone 16
const screenCoordinates = {
x: screenshotCoordinates.x / dpr,
y: screenshotCoordinates.y / dpr
};
await browser.tap(screenCoordinates);
Parameters
| Name | Type | Details |
|---|---|---|
optionsoptional | TapOptions | Параметры касания (необязательно) |
| Параметры касания элемента | ||
options.xoptional | number | Число (необязательно, обязательно если установлен y) Только для касания ЭКРАНА, не для касания ЭЛЕМЕНТА |
options.yoptional | number | Число (необязательно, обязательно если установлен x) Только для касания ЭКРАНА, не для касания ЭЛЕМЕНТА |
| Параметры касания экрана | ||
options.directionoptional | string | Может быть одним из down, up, left или right, по умолчанию down. Только для касания ЭЛЕМЕНТА, не для касания ЭКРАНА ТОЛЬКО-ДЛЯ-НАТИВНЫХ-МОБИЛЬНЫХ-ПРИЛОЖЕНИЙ |
options.maxScrollsoptional | number | Максимальное количество прокруток до остановки поиска элемента, по умолчанию 10. Только для касания ЭЛЕМЕНТА, не для касания ЭКРАНА ТОЛЬКО-ДЛЯ-НАТИВНЫХ-МОБИЛЬНЫХ-ПРИЛОЖЕНИЙ |
options.scrollableElementoptional | Element | Элемент, используемый для прокрутки. Если элемент не предоставлен, будет использован следующий селектор для iOS -ios predicate string:type == "XCUIElementTypeApplication" и следующий для Android //android.widget.ScrollView'. Если несколько элементов соответствуют селектору по умолчанию, то по умолчанию будет выбран первый соответствующий элемент. Только для касания ЭЛЕМЕНТА, не для касания ЭКРАНА ТОЛЬКО-ДЛЯ-НАТИВНЫХ-МОБИЛЬНЫХ-ПРИЛОЖЕНИЙ |
Examples
it('should be able to tap an on element', async () => {
const elem = $('~myElement')
// It will automatically scroll to the element if it's not already in the viewport
await elem.tap()
})
it('should be able to swipe right 3 times in a custom scroll areas to an element and tap on the element', async () => {
const elem = $('~myElement')
// Swipe right 3 times in the custom scrollable element to find the element
await elem.tap({
direction: 'right',
maxScrolls: 3,
scrollableElement: $('#scrollable')
})
})
it('should be able to tap on screen coordinates', async () => {
await browser.tap({ x: 200, y: 400 })
})