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 |
---|---|---|
options optional | TapOptions | Параметры касания (необязательно) |
Параметры касания элемента | ||
options.x optional | number | Число (необязательно, обязательно если установлен y) Только для касания ЭКРАНА, не для касания ЭЛЕМЕНТА |
options.y optional | number | Число (необязательно, обязательно если установлен x) Только для касания ЭКРАНА, не для касания ЭЛЕМЕНТА |
Параметры касания экрана | ||
options.direction optional | string | Может быть одним из down , up , left или right , по умолчанию down . Только для касания ЭЛЕМЕНТА, не для касания ЭКРАНА ТОЛЬКО-ДЛЯ-НАТИВНЫХ-МОБИЛЬНЫХ-ПРИЛОЖЕНИЙ |
options.maxScrolls optional | number | Максимальное количество прокруток до остановки пои ска элемента, по умолчанию 10 . Только для касания ЭЛЕМЕНТА, не для касания ЭКРАНА ТОЛЬКО-ДЛЯ-НАТИВНЫХ-МОБИЛЬНЫХ-ПРИЛОЖЕНИЙ |
options.scrollableElement optional | 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 })
})