Appiumコマンド
Appium Vegaドライバーは、以下のWorld Wide Web Consortium (W3C) WebDriverコマンドをサポートしています。
find_element
find_elementコマンドは、指定されたセレクター戦略に一致する最初のUI要素を特定します。
element = driver.find_element('UiSelector', '{"args": {"text": "要素のテキスト"}}')
UiSelectorとXPath(ベータ版)のセレクター戦略のみをサポートしています。指定されたセレクターが見つからない場合、コマンドは例外を返します。Appium Vegaドライバーでは、By.xpath()ロケーター戦略を使用してXPathを利用できます。
appium_driver.find_element(by="xpath", value="//*[contains(@clickable, \”true\”)]”)
引数
| 名前 | タイプ | 必須 | 説明 | 例 |
|---|---|---|---|---|
| selector | string | はい | 要素を見つけるために使用するロケーター戦略。 | UiSelector |
| args | string | はい | 検索するロケーターの値。 |
一般的なXPath式のコンポーネント
XPath式は次の部分から構成されます。
- 軸 - 子孫、祖先、以降に続くノードなどの検索の方向を指定します。
- ノードテスト - 要素、属性、text()など、選択するノードタイプを指定します。
- 述部 - 属性値、位置、カスタム関数などのさまざまな条件に基づいて、選択されたノードをフィルタリングします。
それぞれの構成部分を含むXPath式の例を次に示します。
//Text[@text='Click me', @test-id='1234']
find_elements
find_elementsコマンドは、複数のUI要素を特定します。さまざまなロケーター戦略をサポートし、要素の配列を返します(配列は空になる場合もあります)。このコマンドは以下の目的で使用します。
- リスト全体に対する反復処理
- 複数のコントロールの検証
最適なパフォーマンスと信頼性を実現するため、特定のロケーター戦略と適切なタイムアウトを使用してください。複雑なUIシナリオには、階層型XPathなどの高度な手法を使用します。
element = driver.find_elements('UiSelector', '{
"args": {
"text": "要素のテキスト"
}
}'
)
引数
| 名前 | タイプ | 必須 | 説明 | 例 |
|---|---|---|---|---|
| locator | string | はい | 要素を見つけるために使用するロケーター戦略。 | UiSelector |
| args | string | はい | 検索するロケーターの値。 |
find_elementとfind_elementsの比較
| 特徴 | find_element | find_elements |
|---|---|---|
| 戻り値 | 単一のWebElementオブジェクト |
WebElementオブジェクトの配列(空の場合あり) |
| 要素が見つからない場合 | NoSuchElementExceptionが発生 |
空の配列を返す |
| ユースケース | 単一の固有の要素 | 複数の要素 |
| パフォーマンス | 高速(最初の一致で停止) | 低速(すべての一致を検索) |
| 柔軟性 | 単一要素操作 | 複数要素操作 |
| エラー処理 | 例外処理が必要 | 欠落している要素を処理 |
| 反復処理 | 反復処理はサポートされない | 反復処理をサポート |
| 検証 | 要素の存在を確認 | 要素の数と状態を確認 |
親要素のコンテキスト内で子要素を見つけるには、子要素を含む囲み要素を探します。
window = driver.find_element("xpath", '//window[@id="{window_id}"]')
button_child_xpath = window.find_element("xpath", '//child[@test_id="button-insert"]')
button_child_uiselector = window.find_element("UiSelector", '{"args": {"test_id": "button-insert"}}')
click
clickコマンドは、特定の要素の中心点をクリックする操作をシミュレートします。さまざまなロケーター戦略が用意されていますが、要素をIDによってクリックすることで、確実で保守しやすいアプローチになります。
button = appium_driver.find_element("UiSelector", '{"args":{ "text": "ボタン1" }}')
button.click()
引数
clickコマンドは先に特定済みの要素に対して動作するため、引数は必要ありません。
send_keys
send_keysコマンドは、文字列引数を受け取り、要素へのテキスト入力をシミュレートします。
# テストアプリを起動した後
editableEle = appium_driver.find_element("UiSelector", '{"args":{ "role": "edit" }}')
editableEle.send_keys("the quick brown fox")
引数
| 名前 | タイプ | 必須 | 説明 | 例 |
|---|---|---|---|---|
| text | string | はい | 要素に入力するテキスト。 | "Hello World" |
send_keysでは、キーボードの開閉は自動的には行われません。キーボードを開くには、いずれかの編集可能な項目をクリックします。閉じるには、[閉じる] ボタンまたは [戻る] ボタンをクリックします。ベストプラクティス:
- ターゲット要素にフォーカスがあり、入力を受け取る準備ができていることを確認する。
- キーを送信する前に要素のフォーカスを確認する。キーを送信する前に、
click ()などのコマンドを使用して要素を選択する。 - 一部のデバイスやアプリでは高速または同時の入力によって問題が発生する可能性があるため、キー送信の間に短い遅延を追加する。
get_attribute
get_attributeコマンドは、UI要素から指定した属性の値を取得します。
button = appium_driver.find_element("UiSelector", '{"args":{ "text": "ボタン" }}')
buttonText = button.get_attribute("UiObject:text")
assert buttonText == '["ボタン"]'
引数
| 名前 | タイプ | 必須 | 説明 | 例 |
|---|---|---|---|---|
| 属性 | string | はい | 取得する属性の名前。 | text |
属性の一覧
| 属性 | 想定されるレスポンス形式 |
|---|---|
| UiObject:text | "テキスト" |
| UiObject:scroll-offset | "x"、"y" |
| UiObject:scroll-directions | "up"、"down"、"left"、"right" |
| UiObject:current-page | "1" |
| UiObject:page-count | "1" |
| UiObject:focused | "true" |
| UiObject:enabled | "true" |
| UiObject:long-clickable | "true" |
| UiObject:draggable | "true" |
| UiObject:pinchable | "true" UiObject:editable "true" |
| UiObject:checkable | "true" |
| UiObject:checked | "true" |
| UiObject:focusable | "true" |
| UiObject:pageable | "true" |
| UiObject:scrollable | "true" |
| UiObject:clickable | "true" |
| UiObject:test-id | "test-id" |
| UiObject:page-direction | "up"、"down"、"left"、"right" |
| UiObject:description | "description" |
get_element_text
get_element_textコマンドは、UI要素に表示されているテキストコンテンツを取得します。非表示のテキストを除き、ユーザーに表示されているテキストを返します。
element = appium_driver.find_element("UiSelector", '{"args":{ "text": "ボタン" }}')
text = element.text
print(f"要素のテキスト:{text}")
引数
get_element_textコマンドは先に特定済みの要素に対して動作するため、引数は必要ありません。
ベストプラクティス:
- テキストの取得を試みる前に、要素が存在することを確認してください。
- 空のテキストが返される可能性を適切に処理してください。
- アサーションではテキストの書式や特殊文字を考慮してください。
- 必要に応じて適切な待機戦略と共に使用してください。
press_keycode
press_keycodeコマンドは、デバイスで特定のハードウェアキーを押す操作をシミュレートします。アプリの状態やテストフローに影響する可能性があるため、注意して使用してください。数字のキーコードのみを受け入れます(16進コードには対応していません)。
driver.press_keycode({KEYCODE})
引数
| 名前 | タイプ | 必須 | 説明 | 例 |
|---|---|---|---|---|
| keycode | integer | はい | 押下するハードウェアキーのキーコード。 | 10 |
tap
tapコマンドは、画面上の特定の座標セットをタップする操作をシミュレートします。このコマンドはタッチ操作を正確に制御できますが、注意が必要です。
buttonCoordinates = (200, 350)
appium_driver.tap([buttonCoordinates])
引数
| 名前 | タイプ | 必須 | 説明 | 例 |
|---|---|---|---|---|
| x | integer | はい | タップ位置のX座標。 | 10 |
| y | integer | はい | タップ位置のY座標。 | 10 |
ベストプラクティス:
tapではきめ細かい制御が可能ですが、テストの安定性と保守性を保つためには、要素ベースの対話操作を優先することをお勧めします。要素ベースの方法が実用的でない場合にのみ使用してください。
is_enabled
is_enabledコマンドは、UI要素がアプリで現在有効になっているか無効になっているかを確認します。有効(対話可能)の場合はtrue、無効(対話不可能)の場合はfalseを返します。
element = appium_driver.find_element("UiSelector", '{"args":{ "text": "ボタン1" }}')
element.is_enabled()
要素は、ユーザーが操作できるときは有効になります。ただし、有効になっても対話操作性が保証されるわけではありません。要素は有効でも、可視状態でない場合や、操作を妨げるその他の要因が存在する場合があります。対話操作可能かどうかを検証するには、is_enabledとほかのコマンド(is_displayedなど)を組み合わせて使用してください。
引数
is_enabledコマンドは先に特定済みの要素に対して動作するため、引数を受け取りません。
ベストプラクティス:
is_enabledは、要素に対するさまざまな状態チェックの一部として使用してください。- 要素の対話操作性の判断を
is_enabledに頼らないでください。 - 要素の状態を確認する前に待機戦略を実装してください。
is_displayed
is_displayedコマンドは、UI要素が画面に表示されているかどうかを確認します。表示されている場合はtrueを返し、非表示の場合はfalseを返します。
element = driver.find_element('UiSelector', '{"args": {"test_id": "my_button"}}')
element.is_displayed()
要素は、画面領域内に表示されているときに表示されます。
引数
is_displayedコマンドは先に特定済みの要素に対して動作するため、引数を受け取りません。
ベストプラクティス:
is_displayedは、要素に対するさまざまな状態チェックの一部として使用してください。
implicitly_wait
implicitly_waitコマンドは、使用できない要素を検索するときにドライバーが待機する時間を設定します。このコマンドはテストの安定性を高めますが、注意して使用してください。複雑なシナリオでは、implicitly_waitとexplicit waitsを組み合わせて、信頼性と実行速度のバランスを取ってください。
driver.implicitly_wait(5)
詳細な実装については、Set Implicit Wait Timeout(英語のみ)を参照してください。
引数
| 名前 | タイプ | 必須 | 説明 | 例 |
|---|---|---|---|---|
| 秒 | integer | はい | 待機する時間(ミリ秒)。 | 10 |
ベストプラクティス:
implicitly_waitはテストの開始時に設定します。- 必要に応じて、適切なデフォルト(たとえば、0ms)にリセットします。
get_window_rect
get_window_rectコマンドは、画面全体のサイズを基準として、現在のアプリウィンドウのサイズと位置を取得します。
例:
Python
res = driver.get_window_rect()
Java
Dimension windowSize = driver.manage().window().getSize(); # ウィンドウサイズ(width、height)を返す
Point windowOrigin = driver.manage().window().getPosition(); # ウィンドウの原点座標(x、y)を返す
値の説明は以下のとおりです。
x- ウィンドウの左の座標y- ウィンドウの上の座標width- ウィンドウの幅height- ウィンドウの高さ
引数
引数は必要ありません。
ベストプラクティス:
さまざまな画面サイズとレイアウトを処理する堅牢なテストスクリプトを作成するには、get_window_rectをほかのコマンドと組み合わせて使用します。
get_page_source
get_page_sourceコマンドは、アプリの現在のページソースを取得します。ページソースは、基盤となるUI構造を表します。
Python
page_source = driver.page_source
print(page_source)
Java
String pageSource = driver.getPageSource();
System.out.println(pageSource);
引数
get_page_sourceコマンドには引数は必要ありません。
get_screenshot
get_screenshotコマンドは、現在のアプリの状態をbase64エンコードされた文字列としてキャプチャします。このコマンドを使用するときは、ユーザーのプライバシーに配慮してください。デジタル著作権管理(DRM)コンテンツをキャプチャしないでください。
Python
screenshot_base64 = driver.get_screenshot_as_base64() # スクリーンショットをbase64エンコード文字列として取得
Java
File screenshotFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); // スクリーンショットを取得してファイルに保存
byte[] screenshotRaw = ((TakesScreenshot)driver).getScreenshotAs(OutputType.BYTES); // スクリーンショットの未加工バイトを取得
String screenshotBase64 = ((TakesScreenshot)driver).getScreenshotAs(OutputType.BASE64); // スクリーンショットをbase64エンコード文字列として取得
すべてのメソッドと例の一覧については、Appiumのドキュメント(英語のみ)を参照してください。
引数
このコマンドには引数は必要ありません。
install_app
install_appコマンドは、デバイスにアプリをインストールする際に使用します。VPKGファイルパスは、ホスト(Appiumサーバー)のファイルシステム上で使用できる必要があります。テストの開始時にこのコマンドを使用して、環境セットアップを自動化します。
executeScript with mobile: installAppコマンドを使用します。例:
Python:
driver.install_app('/path/to/app.vpkg')
Java:
driver.executeScript("mobile: installApp", Map.of("appPath", "/path/to/app.vpkg"));
引数
| 名前 | タイプ | 必須 | 説明 | 例 |
|---|---|---|---|---|
| app_path | string | はい | Appiumサーバー上のアプリがあるパスです。 | /path/to/application.vpkg |
activate_app
activate_appコマンドは、デバイス上の指定されたアプリを起動するか、フォアグラウンドに表示する際に使用します。このコマンドは、アプリ切り替えシナリオのテストや、さらにテストアクションを実行する前に特定のアプリがアクティブであることの確認に役立ちます。
例:
Python:
driver.activate_app('com.example.myapp.main')
Java:
boolean isInstalled = (boolean) driver.executeScript("mobile: activateApp",
Map.of("appId", "com.example.myapp.main"));
引数
| 名前 | タイプ | 必須 | 説明 | 例 |
|---|---|---|---|---|
| app_id | string | はい | アクティベートするアプリのパッケージ名またはバンドル識別子。 | com.example.myapp.main |
ベストプラクティス
アプリを起動するための正しいappIdを取得するには、vpm list applicationsを実行します。
terminate_app
terminate_appコマンドは、現在実行中のアプリを停止します。このコマンドは、強制終了時のアプリの動作をテストする場合や、テストケース間でクリーンな状態を保証する場合に使用します。
例:
driver.terminate_app('com.example.myapp')
引数
| 名前 | タイプ | 必須 | 説明 | 例 |
|---|---|---|---|---|
| app_id | string | はい | 停止するアプリのパッケージ識別子。 | com.example.myapp |
remove_app
remove_appコマンドは、デバイスからアプリをアンインストールする際に使用します。
例:
driver.remove_app('com.example.myapp')
引数
| 名前 | タイプ | 必須 | 説明 | 例 |
|---|---|---|---|---|
| app_id | string | はい | アンインストールするアプリのパッケージ識別子。 | com.example.myapp |
execute_script
execute_scriptコマンドは、シェルコマンドを実行するか、jsonrpc APIを呼び出します。
デバイス上でシェルコマンドを実行するには
appium_driver.execute_script("shell", "echo hello world") #
Appiumパブリックインターフェイスで公開されていないjsonrpc APIを呼び出すには:
appium_driver.execute_script("jsonrpc: getScreenContext", "")
push_file
push_fileコマンドを使用すると、ファイルをデバイスに直接転送できます。ファイルの内容はbase64でエンコードされた文字列として提供する必要があります。これは、テストデータ、構成ファイル、またはテスト実行中に必要なその他のファイルをアップロードする際に役立ちます。
Python:
with open('test_image.png', 'rb') as image_file:
image_data = base64.b64encode(image_file.read()).decode('utf-8')
driver.push_file('/data/local/tmp/test_image.png', image_data)
Java:
File fileToUpload = new File("/path/to/your/file.txt");
String base64Content;
try {
// ファイルの内容をBase64に変換します
byte[] fileContent = FileUtils.readFileToByteArray(fileToUpload);
base64Content = Base64.getEncoder().encodeToString(fileContent);
//pushFileコマンドを実行します
driver.executeScript("mobile: pushFile", Map.of(
"remotePath", "/tmp/uploaded_file.txt",
"payload", base64Content
));
System.out.println("ファイルは正常にアップロードされました");
} catch (IOException e) {
System.err.println("ファイルのアップロード中にエラーが発生しました:" + e.getMessage());
e.printStackTrace();
}
引数
| 名前 | タイプ | 必須 | 説明 | 例 |
|---|---|---|---|---|
| remote_path | string | はい | ファイルを保存するデバイス上のパス。 | /data/local/tmp/test_file.txt |
| data | string | はい | Base64でエンコードされたファイルの内容。 |
pull_file
push_fileコマンドを使用すると、デバイスから直接ファイルを転送できます。ファイルの内容はbase64でエンコードされた文字列として返されます。これは、テスト結果、構成ファイル、またはテスト実行中および実行後に必要なその他のファイルをダウンロードする際に役立ちます。
Python:
base64_string = driver.pull_file("/tmp/testFile.txt")
Java:
try {
// ディレクトリからファイルをプルします
Object fileBase64 = driver.executeScript("mobile: pullFile", Map.of("remotePath", "/tmp/testFile.txt"));
System.out.println("ファイルは正常にダウンロードされました");
} catch (IOException e) {
System.err.println("ファイルのダウンロード中にエラーが発生しました:" + e.getMessage());
e.printStackTrace();
}
引数
| 名前 | タイプ | 必須 | 説明 | 例 |
|---|---|---|---|---|
| remote_path | string | はい | ファイルをプルするデバイス上のパス。 | /data/local/tmp/test_file.txt |
D-Padナビゲーション
execute_script関数では、jsonrpc: injectInputKeyEventメソッドを通じてLinuxの入力イベントコードが送信されます。この機能により、アプリはユーザー入力イベントをプログラムでシミュレートして自動化とテストができます。
この関数は指定されたコマンドとキーイベントをスクリプト内で実行し、方向パッド入力用に設計されたアプリでのD-Padナビゲーションを可能にします。
この表には、入力イベントコードが一覧表示されます。
| キーコード | 値 |
|---|---|
| KEY_LEFT | 105 |
| KEY_RIGHT | 106 |
| KEY_UP | 103 |
| KEY_DOWN | 108 |
| KEY_PENTER(選択) | 96 |
| KEY_BACK | 158 |
| KEY_HOMEPAGE | 170 |
定義されているキーコードの包括的な一覧については、入力イベントコード(英語のみ)を参照してください。入力イベントコードのリファレンスは、アクセシビリティ対応の、使いやすいキーボードエクスペリエンスの作成に役立ちます。特定のキーコードのサポートは、デバイスタイプと入力構成によって異なります。非標準のキーボードレイアウトや動作について、キーボード入力処理をテストしてください。
injectInputKeyEventを実行するには、次のコマンドを使用します。
driver.execute_script("jsonrpc: injectInputKeyEvent",[{"inputKeyEvent": "{イベント}" , "holdDuration": 1000}])
たとえば、下に移動するには次のコマンドを使用します。
driver.execute_script("jsonrpc: injectInputKeyEvent",[{"inputKeyEvent": "108" , "holdDuration": 1000}])
Last updated: 2025年9月30日

