Appium クライアント入門

メインの概要で説明されているすべての理由から、AppiumはW3C WebDriver仕様に基づいています。これは、Appiumがクライアントサーバーアーキテクチャを実装していることを意味します。サーバー(Appium自体と、自動化に使用しているドライバやプラグインから構成されます)はテスト対象デバイスに接続され、実際にはそれらのデバイスで自動化を実行する役割を担っています。クライアント(Appiumテスト作成者である *あなた* によって駆動されます)は、ネットワークを介してサーバーにコマンドを送信し、結果としてサーバーから応答を受信する役割を担います。これらの応答を使用して、自動化コマンドが成功したかどうかを確認したり、アプリケーションの状態について問い合わせた情報が含まれている場合があります。このドキュメントは、この方程式のクライアント側に関する概念的な紹介です。

情報

方程式のサーバー側(つまり、Appiumが実際にデバイスをどのように制御するか?)の詳細については、Appiumドライバ入門をご覧ください。Appiumクライアントライブラリのリンク一覧に移動するには、クライアント一覧をご覧ください。

どのような種類の自動化コマンドが利用可能ですか?それは、特定のセッションで使用しているドライバとプラグインによって異なります。標準的なコマンドセットには、たとえば、以下が含まれます。

  • 要素の検索
  • 要素のクリック
  • ページソースの取得
  • スクリーンショットの撮影

WebDriver仕様でこれらのコマンドを見ると、特定のプログラミング言語で定義されていないことに気付くでしょう。Javaコマンド、JavaScriptコマンド、Pythonコマンドではありません。代わりに、 *任意の* プログラミング言語(またはなし!必要に応じてcURLを使用することもできます)からアクセスできるHTTP APIの一部を形成します。

たとえば、要素の検索コマンドは、HTTPエンドポイント/session/:sessionid/element(この場合、:sessionidは、前のセッションの作成呼び出しでサーバーによって生成された一意のセッションIDのプレースホルダーです)に送信されるHTTP POSTリクエストに対応します。

この情報は、主にWebDriver仕様で動作するテクノロジーを開発している人にとって役立ちます。AppiumまたはSeleniumテストの作成を試みている人にとっては、特に役立ちません。Appiumテストを作成する際は、使い慣れたプログラミング言語を使用することをお勧めします。幸いなことに、AppiumサーバーにHTTPで通信する責任を担うAppiumクライアントライブラリ1のセットが存在します。代わりに、特定のプログラミング言語の「ネイティブ」コマンドセットを公開するため、テスト作成者にとっては、Python、JavaScript、Javaなどを記述しているように感じられます。

例として、推奨されるAppiumクライアントバインディングを使用して、5つの異なるプログラミング言語で同じ単純なAppiumコマンドセットを示します(これは、適切なインポートを含む完全な動作サンプルコードではありません。セットアップとコマンドリファレンスについては、各クライアントライブラリの指示を参照してください)。

const element = await driver.$('//*[@text="Foo"]');
await element.click();
console.log(await element.getText())
console.log(await driver.getPageSource())
WebElement element = driver.findElement(By.Xpath("//*[@text='Foo']"))
element.click()
System.out.println(element.getText())
System.out.println(driver.getPageSource())
element = driver.find_element(by=By.XPATH, value='//*[@text="Foo"]')
element.click()
print(element.text)
print(driver.page_source)
element = driver.find_element :xpath, '//*[@text="Foo"]'
element.click
puts element.text
puts driver.page_source
AppiumElement element = driver.FindElement(MobileBy.AccessibilityId("Views"));   
element.click();
System.Console.WriteLine(element.Text);
System.Console.WriteLine(driver.PageSource);

これらのスクリプトは、言語が異なっても、内部的には同じことを行います。

  1. xpathusingパラメータと、要素の検索に使用されるXPathクエリを表すvalueパラメータを使用して、要素の検索を呼び出します。(これらの用語が不明な場合は、AppiumまたはSeleniumの概要を参照してください)。
  2. 前の呼び出しで検出された要素のIDを使用して、要素のクリックを呼び出します。
  3. 同じ要素のIDを使用して要素テキストの取得を呼び出し、コンソールに出力します。
  4. ページソースの取得を呼び出してページ/アプリのソースを取得し、コンソールに出力します。

クライアントを選択または使用する前に考慮すべきもう1つの点は、各クライアントは独立して保守されていることです。1つのクライアントで機能が利用可能だからといって、別のクライアントでも利用可能とは限りません(ただし、すべてのクライアントは少なくとも標準のW3Cプロトコルと一般的なAppium拡張機能をサポートしています)。1つのクライアントに便利なヘルパー関数のセットがあるからといって、別のクライアントにもあるとは限りません。一部のクライアントは頻繁に最新の状態に保たれていますが、そうでないクライアントもあります!したがって、ライブラリを選択する際には、最初に使用する言語を検討し、次にライブラリの機能と保守状況を検討してください!

Appiumクライアントの使い方を学ぶには、そのクライアントのホームページにアクセスして詳細を確認してください。多くの場合、特定の言語のAppiumクライアントは、その言語のSeleniumクライアントの上に構築されており、そのため、一部のAppiumクライアントでは、AppiumクライアントがSeleniumクライアントに追加した機能のみが文書化されている場合があります。つまり、完全なリファレンスについては、AppiumクライアントドキュメントとSeleniumクライアントドキュメントの両方にアクセスする必要がある場合があります。

Appiumクライアントに関する必要な情報は以上です!クライアントページに移動して、現在のクライアント一覧を確認してください。


  1. これらのライブラリは、別名「クライアント」、「クライアントライブラリ」、または「クライアントバインディング」と呼ばれます。すべて同じ意味です!