メソッドの実行
Appiumドライバーに実装されているコマンドの範囲は、W3C WebDriver仕様で定義されているコマンドの範囲よりも広いため、Appiumはこれらの「拡張」コマンドをクライアントライブラリからアクセスできるようにする必要があります。 これには、主に2つの方法があります。
- Appiumドライバーは、W3C互換の新しいAPIルートを定義し、Appiumクライアントはこれらの新しいルートをサポートするように更新されます。
- Appiumドライバーは、いわゆる「実行メソッド」を定義します。これは、WebDriverベースのクライアントライブラリ(すべてのSeleniumおよびAppiumクライアントを含む)ですでに利用可能な既存の `Execute Script` コマンドをオーバーロードすることによって、新しい機能を提供します。
それぞれの手法には長所と短所がありますが、最終的には、新しいコマンドをどのように実装するかを拡張機能の作成者が決定します。
このガイドは、「実行メソッド」の方法を理解するのに役立つように設計されています。 このパターンは、公式Appiumドライバーや他のサードパーティ拡張機能でよく使用されます。 WebDriverとブラウザ自動化の世界で `Execute Script` コマンドがどのように機能するように設計されているかの例を次に示します。
ここで行われているのは、Webブラウザ内で実行されるJavascriptのスニペット(技術的には関数本体)を定義することです。 クライアントは、シリアル化され、HTTPを介して送信され、最終的にパラメータとして関数に提供される引数を送信できます。 この例では、基本的に加算関数を定義しています。 `Execute Script` コマンドの戻り値は、Javascriptスニペットの戻り値です! この例の場合、その値は数値 `7`(`3` + `4`)になります。
各クライアントライブラリには、コマンドを呼び出してスクリプト関数に引数を渡す独自の方法がありますが、関数自体(スニペット)は常に文字列であり、すべての言語で同じです。
Appiumの世界では、通常、Webブラウザを自動化していないため、このコマンドは特に役に立ちません。 しかし、任意のコマンドの名前をエンコードし、パラメータを提供する方法として*は*役立ちます。 たとえば、XCUITestドライバーは、アプリのID(`bundleId`)がわかっている場合に、クライアントが実行中のアプリケーションを終了できるコマンドを実装しています。 ドライバーがこのコマンドを利用できるようにする方法は、実行メソッド `mobile: terminateApp` を使用することです。 「Execute Script」コマンドにJavaScript関数を指定する代わりに、ユーザーはドライバーで定義されている*既知の文字列*を指定します。 クライアントが知る必要があるのは、ドライバーによって文書化されているメソッドのパラメータのセットだけです。 この場合、`bundleId` という名前のパラメータがあり、その値は終了するアプリのIDをエンコードする文字列である必要があります。 この実行メソッドの呼び出し方法は次のとおりです。
Appium実行メソッドをバニラSelenium Javascript実行で使用する場合、2つの重要な違いがあります。
- スクリプト文字列は単なるコマンド名です。 ドライバーのドキュメントで提供されます。
- パラメータを提供する標準的な方法は、パラメータ名を表すキーとパラメータ値を表す値を持つ*単一の*オブジェクトとしてです。 したがって、この場合、パラメータ名(`bundleId`)をparametersオブジェクトのキーとして、パラメータ値(`com.my.app`)をそのキーの値として指定する必要がありました。 ドライバーは、パラメータを*必須*または*オプション*として定義できます。
作成者が標準のアクセス方法に変更を加えている場合に備えて、特定の実行メソッドのドキュメントを常に参照してください。