Appium 求められる能力 Android エミュレータ
⚡ スマートサマリー
必要な機能はキーと値のペアであり、 Appium クライアントはセッションを開く際に、自動テストを実行する対象プラットフォーム、デバイス、ドライバ、アプリケーションをサーバーに通知するメッセージを送信します。

求められる能力とは何か
「希望する機能」は、自動化中にサーバーの動作を変更するのに役立ちます。 Appium これはハッシュマップ、つまりキーと値のペアで、コマンドを送信するために使用されます。 Appium サーバーでは、すべてのクライアントコマンドがセッションのコンテキスト内で実行されます。
例えば、クライアントはJSONオブジェクトを含むPOST /sessionリクエストを送信します。 Appium サーバー。
つまり、サーバーにリクエストを送信したり、サーバーとのセッションを維持したりするには、キーと値のペアのセットが使用されます。これは「要求された機能」と呼ばれます。
import io.appium.java_client.AppiumDriver; import org.openqa.selenium.remote.DesiredCapabilities; { DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("deviceName","Android Emulator"); capabilities.setCapability("platformVersion", "4.4"); }
望ましい能力の重要な役割
- 「DesiredCapabilities」は、ユーザーがサーバーとのセッション要求を制御するのに役立ちます。たとえば、iOS セッションの場合は、capability platformName = iOS を設定し、 Android セッションプラットフォーム名 = Android.
- 「DesiredCapabilities」は、例えばWebDriverインスタンスを設定するために使用されます。 Firefoxドライバー、ChromeDriver、またはInternetExplorerDriver。
- DesiredCapability は次の場合に非常に役立ちます Selenium グリッド。例えば、異なるブラウザや異なるオペレーティングシステム上で異なるテストケースを実行するために使用されます。指定された機能に基づいて、グリッドハブは対応するノードを指します。ノードは「set」プロパティメソッドを使用して定義されます。
DesiredCapabilities obj = new DesiredCapabilities(); obj.setBrowserName("firefox"); obj.setVersion("18.0.1"); obj.setPlatform(org.openqa.selenium.Platform.WINDOWS);
- 希望する機能は、ライブラリで定義されたパッケージです。「DesiredCapabilities」を使用する前に、以下のライブラリからインポートする必要があります。
Org.openqa.selenium.remote.DesiredCapabilities
Appium 両方をサポート Android iOS と iOS では、別のセットがあります Appium 各プラットフォームにおけるサーバー機能。
以下の表は、よく使われるいくつかの例を示しています。 Android 能力と、それを用いるべき価値観。
| 機能 | 詳細説明 | 価値/用途 |
|---|---|---|
| アプリパッケージ | 希望する番号に電話する Java 同梱 Android ユーザーが実行したいもの |
値= com.example.myapp/ Obj.setCapability(“appPackage”, “com.whatsapp”); |
| アプリのアクティビティ | ユーザーがパッケージから起動したいアプリケーションアクティビティ。 |
値= MainActivity、.Settings Obj.setCapability(“appActivity”, “com.whatsapp.Main”); |
| appWaitパッケージ | アプリケーションが待機する必要のあるパッケージ | 値=com.example.android.myapp |
| appWaitアクティビティ | 任意 Android ユーザーが待つ必要があるアクティビティ |
値= スプラッシュアクティビティ 機能.setCapability(“appWaitActivity”, “com.example.game.SplashActivity”) |
注: Appium ドキュメント もっと見るには Android 機能を提供します。
以下の表は、よく使用されるiOSの機能と、その値を示しています。
| 機能 | 詳細説明 | 価値観 |
|---|---|---|
| 起動タイムアウト | インストルメンテーションを待機する合計時間 (ミリ秒)。 | 2000 |
| UDID | 接続されている物理デバイスの固有デバイス番号を識別するため | 166エーストゥ4 |
注: Appium 機能ガイド iOSのその他の機能についてはこちらをご覧ください。
望ましい機能はどのように変化したか Appium 2
上記の例は Appium 1つの時代であり、依然として能力セットの形状を示していますが、2つのルールが変更され、どちらも現代のセッションの開始を妨げます。
まず、W3C WebDriver仕様では、標準機能のごく一部しか定義されていません。 platformName (NAIST) と browserName ここで重要なのは、その他の機能はすべてベンダー拡張機能であり、コロンで終わる名前空間プレフィックスを持つ必要があるということです。 Appiumの接頭辞は appium:。 そう deviceName になる appium:deviceName (NAIST) と platformVersion になる appium:platformVersion. Appium 2 では、 appium:automationNameなぜなら、ドライバーはサーバーにバンドルされているのではなく、別途インストールされるからです。
第二に、接頭辞を繰り返すのは面倒なので、 Appium 単一を受け入れます appium:options 値がオブジェクトである機能。そのオブジェクト内の機能には接頭辞は不要で、オブジェクトの内外両方に同じ名前がある場合は、内側の値が優先されます。
{
"platformName": "iOS",
"appium:options": {
"automationName": "XCUITest",
"platformVersion": "16.0",
"app": "/path/to/your.app",
"deviceName": "iPhone 12",
"noReset": true
}
}
⚠️ バージョンノート: Java 側、 Selenium 4本、そして Appium Java クライアント 8 は非推奨になりました DesiredCapabilities 先に示されていたクラス。ドライバー固有のビルダーは以下から継承されています。 BaseOptions 交換する — UiAutomator2Options の Android (NAIST) と XCUITestOptions iOS版 - 1対1の地図付きping それぞれの古い setCapability 呼び出し。上記の元のコードは、歴史的な例としてここに残されています。
Extracパッケージとアクティビティ情報
パッケージは、ファイルまたはクラスをまとめたものです。モジュール型プログラミングに整理された構造を与えます。 Java異なるパッケージが単一のJARファイルに格納され、ユーザーはそのJARファイルを呼び出すことで完全な実行が可能になります。同様の概念はモバイルアプリケーション開発でも採用されています。
Android オペレーティングシステムでは、すべてのアプリケーションは、 Java パッケージ。tract パッケージパス情報、 Android PackageManagerクラスを使用します。
デバイスにプリインストールされているアプリケーションと後からインストールされたアプリケーションのパッケージ情報とアクティビティ情報を取得します。
getPackageManager() を呼び出すことで、PackageManager クラスのインスタンスを取得できます。このメソッドを使用すると、インストールされているアプリケーションのパッケージおよび関連する権限にアクセスして操作できます。
具体的な例を挙げますと、以下の通りです。
PackageManager pManager = getPackageManager();
List<ApplicationInfo> list = pManager.getInstalledApplications(PackageManager.GET_META_DATA)
adbを使ってappPackageとappActivityを見つける方法
上記の PackageManager ルートはアプリケーション内部から機能します。テスターは通常、インストール済みのビルドしか持っていないため、より迅速な方法はクエリを実行することです。 ADB 接続されたデバイスまたはエミュレータに対して。
デバイス上でアプリケーションを手動で開き、次にplatform-toolsフォルダ内のターミナルから以下のコマンドのいずれかを実行します。このコマンドは現在フォーカスのあるウィンドウを表示し、値は次のようにフォーマットされます。 package/activity.
adb shell dumpsys window | find "mCurrentFocus" adb shell dumpsys window windows | grep -i "mCurrentFocus"
最初の形式を使用してください Windows コマンドプロンプトで、2番目はUnixシェルまたはGit Bashで実行します。結果を2つの部分に分けて読みます。スラッシュより前の部分は、 appPackage、そしてそれ以降のすべては、 appActivity.
注意すべき点が2つあります。フォーカスされるアクティビティは、その時点で画面に表示されているものですが、必ずしもアプリケーション起動時に表示されるアクティビティとは限りません。ドライバの初期化中にセッションが失敗した場合は、アプリを最初から起動して値を再度読み取ってください。また、スプラッシュ画面が最初に表示される場合、エントリアクティビティは最終的に検証したいアクティビティとは異なります。まさにこれが問題なのです。 appWaitActivity 存在する理由。
視覚的な代替案は ウイオートマビューアこれは現在の画面階層をキャプチャし、各ノードのパッケージとクラスを表示します。
よくある希望機能エラーとその修正方法
最も失敗した Appium セッションがテスト手順を一つも実行する前に終了してしまう場合、その原因はテスト自体ではなく、ほとんどの場合、機能セットにあります。以下の表は、各メッセージとその一般的な解決策を示しています。
| メッセージ | 考えられる原因 | 修正する |
| 無効またはサポートされていないWebDriver機能 | ベンダープレフィックスなしで非標準機能が送信されました | appium: を追加するか、appium:options の中に移動してください。 |
| 必要な機能には、automationName または platformName のいずれかを含める必要があります。 | Appium 2 ドライバーを選択できません | platformNameとappium:automationNameを明示的に設定してください。 |
| アプリを起動できません。元のエラー: アプリの起動に使用されるアクティビティが存在しません | appActivityがマニフェストと一致しません | 上記のdumpsysコマンドで値を再読み取ります。 |
| セッションが開始されませんでした: デバイスが見つかりませんでした | エミュレーターやハンドセットは接続されていません | 起動前にadb devicesコマンドでデバイスを確認してください。 |
| タイムアウト後、新しいセッションを作成できませんでした。 | スプラッシュスクリーンが表示されると、入力処理が遅延します。 | appWaitActivityを設定し、appWaitDurationを増加させる |
| アプリケーションの状態は実行間でリセットされません | デフォルトのリセット動作が上書きされました | Rev実行したいappium:noResetとappium:fullResetを確認してください。 |
セッションが開始されない場合は、 Appium クライアントスタックではなくサーバーログ trace. サーバーは、どの機能を満たせなかったかを示し、その行に修正方法を示します。
