メインコンテンツにスキップ

tap(タップ)

タップジェスチャーを実行します:

  • 指定された要素に対して。要素が見つからない場合は自動的にスクロールします。
  • または、xy座標を提供することで、モバイルデバイスの画面上でタップします。

内部的には次のものを使用します:

  • 要素タップ:
    • Webブラウザ環境(Chrome/Safariブラウザ、またはハイブリッドアプリ)ではclickコマンド
    • ネイティブアプリでは、Android用のmobile: clickGestureまたはiOS用のmobile: tapを使用し、自動スクロール用のscrollIntoViewコマンドを含みます
  • 画面タップ:
    • Webブラウザ環境(Chrome/Safariブラウザ、またはハイブリッドアプリ)ではactionコマンド
    • ネイティブアプリでは、Android用のmobile: clickGestureまたはiOS用のmobile: tap

この違いにより、モバイルアプリではtapコマンドはclickコマンドよりも信頼性の高い代替手段となります。

ネイティブアプリの場合、このコマンドはclickコマンドと異なり、scrollIntoViewコマンドを使用して要素に自動的にスワイプします。これはネイティブアプリのclickコマンドではサポートされていません。ハイブリッドアプリまたはWeb環境では、自動スクロールはclicktapの両方のコマンドでサポートされています。

情報

このコマンドは、以下の最新コンポーネントでのみ動作します:

  • Appiumサーバー(バージョン2.0.0以上)
  • appium-uiautomator2-driver(Android用)
  • appium-xcuitest-driver(iOS用)

互換性の問題を避けるため、ローカルまたはクラウドベースのAppium環境を定期的に更新してください。

画面タップについて

画面上の特定の座標をタップしたい場合で、スクリーンショットを使用して座標を決定する場合、iOSの座標はデバイスの画面サイズに基づいており、スクリーンショットのサイズではないことに注意してください。スクリーンショットのサイズはデバイスのピクセル比率のために大きくなっています。 iPhone 8までと現在のiPadの平均デバイスピクセル比率は2、iPhone XからのiPhoneの比率は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);
パラメータ
名前詳細
options
オプション
TapOptionsタップオプション(オプション)
要素タップオプション
options.x
オプション
number数値(オプション、yが設定されている場合は必須)
画面タップの場合のみ、要素タップでは使用しない
options.y
オプション
number数値(オプション、xが設定されている場合は必須)
画面タップの場合のみ、要素タップでは使用しない
画面タップオプション
options.direction
オプション
stringdownupleftrightのいずれか、デフォルトはdown
要素タップの場合のみ、画面タップでは使用しない
モバイルネイティブアプリのみ
options.maxScrolls
オプション
number要素の検索を停止するまでの最大スクロール回数、デフォルトは10
要素タップの場合のみ、画面タップでは使用しない
モバイルネイティブアプリのみ
options.scrollableElement
オプション
Elementスクロールに使用される要素。要素が提供されない場合、iOSでは-ios predicate string:type == "XCUIElementTypeApplication"、Androidでは//android.widget.ScrollView'というセレクタが使用されます。デフォルトのセレクタに複数の要素が一致する場合、デフォルトでは最初に一致する要素が選択されます。
要素タップの場合のみ、画面タップでは使用しない
モバイルネイティブアプリのみ
element.tap.example.js
it('should be able to tap an on element', async () => {
const elem = $('~myElement')
// 要素がすでにビューポート内にない場合は自動的にスクロールします
await elem.tap()
})

element.tap.scroll.options.example.js
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')
// カスタムスクロール可能な要素内で右に3回スワイプして要素を見つける
await elem.tap({
direction: 'right',
maxScrolls: 3,
scrollableElement: $('#scrollable')
})
})

screen.tap.example.js
it('should be able to tap on screen coordinates', async () => {
await browser.tap({ x: 200, y: 400 })
})

Welcome! How can I help?

WebdriverIO AI Copilot