2022 年 10 月 18 日に開催される Firebase Summit に、直接会場で、またはオンラインでご参加ください。Firebase を使用してアプリ開発を加速させ、自信を持ってアプリをリリースし、簡単にスケールする方法をご紹介します。 今すぐ登録

Roboスクリプトリファレンスガイド

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

このドキュメントでは、構造、機能、使用法、記録、アクションなど、Robo スクリプトに関する参照情報を提供します。 Robo スクリプトは、モバイル アプリの手動の品質保証 (QA) タスクを自動化し、継続的インテグレーション (CI) とリリース前のテスト戦略を可能にするテストです。 Robo スクリプトは、一連のユーザー インターフェイス (UI) とその他のアクションを記述する JSON ファイルです。

次の方法で Robo スクリプトを作成できます。

  • Robo スクリプトの記録機能を使用します。
  • Robo スクリプトを手動で作成します。
  • Robo スクリプトを記録し、手動で編集します。

Robo スクリプトの使用の詳細については、「Robo スクリプトを実行する」を参照してください。

Robo スクリプトは、テスト対象のアプリの Android アプリケーション パッケージ (APK) などの他の入力と共に Robo テストに提供されます。

以下は、ユーザーをアプリにサインインさせる Robo スクリプトの例です。

[
  {
    "eventType": "VIEW_TEXT_CHANGED",
    "replacementText": "user123",
    "elementDescriptors": [
      {
        "resourceId": "my.app.package:id/username"
      }
    ]
  },
  {
    "eventType": "VIEW_TEXT_CHANGED",
    "replacementText": "12345",
    "elementDescriptors": [
      {
        "resourceId": "my.app.package:id/password"
      }
    ]
  },
  {
    "eventType": "VIEW_CLICKED",
    "elementDescriptors": [
      {
        "resourceId": "my.app.package:id/login"
      }
    ]
  }
]

構造

Robo スクリプトの各アクションは、次の表で説明する 1 つ以上の属性と値のペアのバンドルとして表されます。

属性説明
eventTypeアクションのタイプ (クリック、テキスト編集など) を指定します。すべてのアクションに必要です。
elementDescriptors UI ウィジェットを識別する記述子。特定のボタンのクリックなど、ターゲット UI ウィジェットを持つすべてのアクションに必要です。
optional trueに設定すると、このアクションは実行できない場合にスキップされます。たとえば、対象の UI ウィジェットが画面上に見つからない場合、このアクションはスキップされますが、含まれている Robo スクリプトは失敗しません。デフォルトでは、値はfalseです。
replacementTextターゲット UI ウィジェットに入力するテキスト。テキスト編集アクションに必要です。
swipeDirectionスワイプの方向を指定します。スワイプ アクションに必要です。
delayTime待機する時間をミリ秒単位で指定します。待機アクションに必要です。
pointTapXCoordinatepointTapYCoordinateタップされたポイントのピクセル X および Y 座標。 pointTapXPercentおよびpointTapYPercentとは相互に排他的です。ポイント タップ アクションに必要です。
pointTapXPercentpointTapYPercentタップされた点の X 座標と Y 座標のパーセンテージ。 pointTapXCoordinateおよびpointTapYCoordinateとは相互に排他的です。ポイント タップ アクションに必要です。

以下は、ターゲット UI ウィジェットのない 2 つのアクションを持つ Robo スクリプトの例です。これは、これらのアクションが特定の UI ウィジェットで動作しないことを意味します。

[
  {
    "eventType": "DELAYED_MESSAGE_POSTED",
    "delayTime": 3000
  },
  {
    "eventType": "PRESSED_BACK"
  }
]

要素記述子

要素記述子は、次の識別属性を 1 つ以上使用して UI ウィジェットを識別します。

属性説明
className
ancestorClassName要素の UI 階層の祖先のクラス名。祖先は、要素自体を含む、要素の UI 階層内の任意の親ノードです。
resourceId
resourceIdRegex resourceIdに一致する Java 正規表現。
contentDescription
contentDescriptionRegex contentDescriptionに一致する Java 正規表現。
text (画面に表示される)
textRegex textに一致する Java 正規表現。
groupViewChildPositionrecyclerViewChildPosition 、またはadapterViewChildPosition親ウィジェットの種類に応じて、UI ウィジェットの子の位置を表します。

多くの場合、これらの属性は定義されていません。たとえば、ボタンにテキストとコンテンツの説明がない場合があります。一部の属性値が存在する場合でも、特定のアプリ画面 ( resourceIdを含む) で一意ではない可能性があります。

たとえば、リストの項目を区別することは、通常、親ウィジェット内の異なる子の位置を使用することによってのみ可能です。これは、UI ウィジェットを識別するために 1 つの要素記述子を使用するだけでは、通常は不十分であることを意味します。したがって、アクションのelementDescriptors属性には、最初の記述子がターゲット UI ウィジェットに対応し、2 番目の記述子がターゲット UI ウィジェットの親ウィジェットに対応するというように順序付けられた一連の要素記述子が含まれます。アクションのターゲット UI ウィジェットは、その要素記述子のすべてが対応する UI ウィジェット サブ階層と一致する場合に一致します。

以下は、テキスト変更アクションとクリック アクションを含む Robo スクリプトの例です。いずれの場合も、提供された要素記述子を使用してターゲット UI ウィジェットを識別する必要があります。

[
  {
    "eventType": "VIEW_TEXT_CHANGED",
    "replacementText": "John",
    "elementDescriptors": [
      {
        "className": "android.support.v7.widget.AppCompatEditText",
        "groupViewChildPosition": 0,
        "resourceId": "com.google.samples.apps.topeka:id/first_name"
      },
      {
        "className": "android.widget.FrameLayout",
        "groupViewChildPosition": 0
      },
      {
        "className": "android.support.design.widget.TextInputLayout",
        "groupViewChildPosition": 1
      }
    ]
  },
  {
    "eventType": "VIEW_CLICKED",
    "elementDescriptors": [
      {
        "className": "android.support.design.widget.FloatingActionButton",
        "groupViewChildPosition": 1,
        "resourceId": "com.google.samples.apps.topeka:id/done"
      },
      {
        "className": "android.widget.FrameLayout",
        "groupViewChildPosition": 1,
        "resourceId": "com.google.samples.apps.topeka:id/content"
      },
      {
        "className": "android.widget.FrameLayout",
        "groupViewChildPosition": 0,
        "resourceId": "com.google.samples.apps.topeka:id/sign_in_content"
      }
    ]
  }
]

実行オプション

必要に応じて、Robo スクリプトのアクションのリストの前に、その Robo スクリプトの実行オプションを指定する JSON オブジェクトを付けることができます。この構成ヘッダーは、 roboscriptキーワードで始まり、その後に目的の実行オプションの JSON 表現が続きます。

Robo スクリプトは、次の実行オプションをサポートしています。

  • executionMode - Robo スクリプトの実行時に適用される実行オプション:
  • postscript - Robo スクリプトの完了後に適用される実行オプション:
    • terminate - trueに設定すると、Robo スクリプトの完了後に Robo テストがクロールを停止します。

以下は、 strictモードで実行される Robo スクリプトの例です。このスクリプトは 3 秒間スリープし、その後クロールが停止します。

"roboscript": {
  "executionMode": {
    "strict": true
  },
  "postscript": {
    "terminate": true
  }
}
[
  {
    "eventType": "DELAYED_MESSAGE_POSTED",
    "delayTime": 3000
  }
]

テンプレート パラメータ

テンプレート パラメーターは、R​​obo テストが実行のためにその Robo スクリプトをロードするときに、実際の値に置き換えられる Robo スクリプト内のプレースホルダーです。テンプレート パラメーターには、2 つのアンダースコアとそれに続くパーセント記号が前に付けられ、2 つのアンダースコアに続くパーセント記号が後置されます。

Robo スクリプトは、次のテンプレート パラメータをサポートしています。

  • __%APP_PACKAGE_NAME%__ - テスト対象アプリのパッケージ名。

以下は、app-under-test プロセスを停止する Robo スクリプトの例です。

[
  {
    "eventType": "ADB_SHELL_COMMAND",
    "command": "am force-stop __%APP_PACKAGE_NAME%__"
  }
]

コメント

Robo スクリプトには、 #または//で始まる行であるコメント行を含めることができます。

以下は、いくつかのコメントを含む Robo スクリプトの例です。

# Confirm a user account.
[
  {
    // Click the DONE button.
    "eventType": "VIEW_CLICKED",
    "elementDescriptors": [
      {
        "resourceId": "com.google.samples.apps.topeka:id/done"
      }
    ]
  }
]

機能

デフォルトでは、Robo スクリプトのすべてのアクションが完了する (または少なくとも試行される) まで、Robo スクリプトはアクティブなままです。 Robo テストは、実行するアクションを選択するたびに、Robo スクリプト アクションとの一致を試み続けます。 Robo スクリプトは、堅牢性を高めるために次の手法を採用しています。

技術説明
部分一致現在の Robo スクリプト アクションが完全に一致しない場合、一致基準が緩和され、一致が再試行されます。部分一致では、Robo スクリプト アクションのターゲット UI ウィジェットを一致させるときに、最も外側の要素記述子は考慮されません。

部分一致が成功すると、対応する Robo スクリプト アクションが通常どおり実行されます。この手法は、画面要素が再配置されたときに、アプリのバージョン間など、アプリの構造が変化するシナリオをサポートします。

現在のアクションをスキップ現在の Robo スクリプト アクションを完全または部分的に一致させることができない場合、Robo は後続の Robo スクリプト アクションを一致させようとします。後続のアクションが完全または部分的に一致する場合、Robo テストは現在の Robo スクリプト アクションをスキップし (二度と戻らず)、後続のアクションを実行します。

この手法は、アプリの動作がバージョン間で変化する場合や不安定な場合のシナリオをサポートします。たとえば、Robo スクリプトの記録中と再生中に断続的なダイアログが異なる画面に表示される場合があります。

サスペンド現在または後続の Robo スクリプト アクションが完全または部分的に一致しない場合、Robo スクリプトは一時的に中断され、Robo テストは他の戦略を使用して実行するアクションを選択します。このアクションが完了すると、Robo テストは Robo スクリプトの実行を再開します。

現在または後続の Robo スクリプト アクションが一致しない限り、Robo スクリプトは任意の数のアクションに対して中断されたままになります。したがって、Robo スクリプトは必ずしも Robo テストのプロローグである必要はなく、Robo スクリプト アクションを標準の Robo テスト アクションに散在させることができます。この手法は、アプリの動作が不安定な場合、またはアプリのバージョン間の変更が大きく、Robo テストがその標準アクションで「ギャップを埋める」必要がある場合のシナリオをサポートします。

RecyclerView および AdapterView のサポート

RecyclerView および AdapterView ウィジェットの子は動的にロードされ、現在の画面から何度もスワイプして表示される場合があります。画面のサイズと、この子に到達するために必要なスワイプの数は、デバイスのフォーム ファクターによって異なるため、絶対的な子のデータ位置に依存する方がはるかに堅牢です。この子を画面に表示するために必要なスワイプの回数に依存してから、画面の位置を使用する方法は、あまり堅牢ではありません。

したがって、Robo スクリプトは、Robo スクリプト アクションのターゲットである RecyclerView の子の絶対データ位置をrecyclerViewChildPositionとしてキャプチャします。また、Robo スクリプトは、Robo スクリプト アクションのターゲットである AdapterView 子の絶対データ位置を adapterViewChildPosition としてadapterViewChildPositionします。

RecyclerView および AdapterView の子に対するアクションは、次の手順で実行されます。

  1. Robo テストは、対応する子が、含まれている RecyclerView または AdapterView での配置アクションによって画面に表示されることを確認します。

  2. Robo テストは、記録されたアクションを子要素で直接実行します。これは、既に画面に表示されているためです。

以下は、AdapterView ( android.widget.GridView ) の子に対するクリック アクションの例です。

{
  "eventType": "VIEW_CLICKED",
  "elementDescriptors": [
    {
      "className": "com.google.samples.apps.topeka.widget.AvatarView",
      "adapterViewChildPosition": 5,
      "resourceId": "com.google.samples.apps.topeka:id/avatar",
      "contentDescription": "Avatar 6"
    },
    {
      "className": "android.widget.GridView",
      "groupViewChildPosition": 1,
      "resourceId": "com.google.samples.apps.topeka:id/avatars"
    },
    {
      "className": "android.widget.LinearLayout",
      "groupViewChildPosition": 1
    },
    {
      "className": "android.widget.LinearLayout",
      "groupViewChildPosition": 0
    }
  ]
}

以下は、RecyclerView ( android.support.v7.widget.RecyclerView ) の子に対するクリック アクションの例です。

{
  "eventType": "VIEW_CLICKED",
  "elementDescriptors": [
    {
      "className": "android.support.v7.widget.AppCompatTextView",
      "groupViewChildPosition": 1,
      "resourceId": "com.google.samples.apps.topeka:id/category_title"
    },
    {
      "className": "android.widget.FrameLayout",
      "recyclerViewChildPosition": 8,
      "resourceId": "com.google.samples.apps.topeka:id/category_item"
    },
    {
      "className": "android.support.v7.widget.RecyclerView",
      "groupViewChildPosition": 1,
      "resourceId": "com.google.samples.apps.topeka:id/categories"
    },
    {
      "className": "android.widget.FrameLayout",
      "groupViewChildPosition": 1,
      "resourceId": "com.google.samples.apps.topeka:id/category_container"
    },
    {
      "className": "android.widget.LinearLayout",
      "groupViewChildPosition": 0
    }
  ]
}

Android Studio で Robo スクリプトを記録し、Test Lab で実行する

Android Studio で Robo スクリプトを作成すると、スクリプトが JSON ファイルとして保存されます。その後、JSON ファイルをアプリケーションと共に Firebase Test Lab にアップロードし、それに応じてテストを実行できます。

スクリプトを添付して Robo テストを実行すると、Robo テストは最初に事前にスクリプト化されたアクションを実行し、次に通常どおりアプリを探索します。

Android Studio で Robo スクリプトの JSON ファイルを作成するには、Android Studio でTest Lab を使用して Robo スクリプトを記録するの手順に従います。

Robo スクリプト アクション

次の共通のオプション属性は、すべてのアクションに適用されます。

  • description - Robo テスト出力でこの Robo スクリプト アクションの実行を追跡するのに役立ちます。

アサーション

アサートされた条件が true の場合、Robo スクリプトは次のアクションに進みます。これは別のアサーションである可能性があります。それ以外の場合、Robo スクリプトの実行はアサーションの失敗により停止し、テスト結果は FAILED になります。

次の表に、必須属性を示します。

属性説明
"eventType": "ASSERTION" --
contextDescriptorアサートされたコンテキストまたは条件を記述します。

コンテキスト記述子

コンテキスト記述子は、次の属性の 1 つまたは組み合わせを使用してコンテキスト/条件を定義します。

属性説明
"condition": "element_present" elementDescriptorsまたはvisionTextで指定されたテキストに一致する UI ウィジェットが画面に存在することを確認します。
"condition": "app_under_test_shown"テスト対象のアプリがフォアグラウンドで実行されていることを確認します。
"condition": "default_launcher_shown"デバイスのホーム画面が表示されていることを確認します。これは、アプリがフォアグラウンドで実行されていないことを意味します。
"condition": "non_roboscript_action_performed" Robo テストによって実行された最後のアクションが Robo スクリプト アクションではないことを確認します。
negateCondition trueに設定すると、 conditionが無効になります。たとえば、この属性を使用して、UI ウィジェットが画面に存在しないかどうか、またはテスト対象のアプリがフォアグラウンドで実行されていないかどうかを確認できます。
elementDescriptors画面上の UI ウィジェットを識別する 1 つ以上の要素記述子。 element_present条件と組み合わせて使用​​されます。 visionTextとは相互に排他的です。詳細については、要素記述子を参照してください。
visionText画面上のテキストは、光学式文字認識 (OCR) API を使用して検出されます。 visionTextは、 element_present条件と組み合わせて使用​​されます。 elementDescriptorsと相互に排他的です。

以下は、テスト対象のアプリがフォアグラウンドにあることを確認する Robo スクリプト アサーションの例です。

{
  "eventType": "ASSERTION",
  "contextDescriptor": {
    "condition": "app_under_test_shown"
  }
}

以下は、リソース ID が"com.google.samples.apps.topeka:id/done"の UI ウィジェットが画面上に存在することを確認する Robo スクリプト アサーションの例です。

{
  "eventType": "ASSERTION",
  "contextDescriptor": {
    "condition": "element_present",
    "elementDescriptors": [
      {
        "resourceId": "com.google.samples.apps.topeka:id/done"
      }
    ]
  }
}

以下は、OCR を使用して画面上で"Settings"が検出されないことを確認する Robo スクリプト アサーションの例です。

{
  "eventType": "ASSERTION",
  "contextDescriptor": {
    "condition": "element_present",
    "negateCondition": true,
    "elementDescriptors": [
      {
        "visionText": "Settings"
      }
    ]
  }
}

クリック

次の表に、必須属性を示します。

属性説明
eventType Robo スクリプト アクションのタイプを指定します。
"eventType": "VIEW_CLICKED"テスト対象アプリの対象要素をクリックします。
"eventType": "SOFT_KEYBOARD_CLICK"ソフト キーボードのターゲット要素をクリックします。
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK" maxNumberOfRuns回まで、ソフト キーボードのランダムな要素をクリックします。
"eventType": "LIST_ITEM_CLICKED"リスト項目をクリックするために、Android Studio の Robo スクリプト レコーダーによって使用されます。
elementDescriptors Android UI 階層を使用して、クリックされた UI ウィジェットを識別します。 visionTextとは相互に排他的です。
visionText OCR を使用して、クリックされた要素を識別します。 elementDescriptorsと相互に排他的です。
maxNumberOfRuns eventTypeSOFT_KEYBOARD_RANDOM_CLICKの場合、ソフト キーボードのランダム要素をクリックする回数を指定します。デフォルト値は1です。

以下は、リソース ID が"com.google.samples.apps.topeka:id/done"のボタンをクリックする Robo スクリプト アクションの例です。

{
  "eventType": "VIEW_CLICKED",
  "elementDescriptors": [
    {
      "resourceId": "com.google.samples.apps.topeka:id/done"
    }
  ]
}

以下は、OCR を使用して画面上で検出された"Privacy Policy"をクリックする Robo スクリプト アクションの例です。

{
  "eventType": "VIEW_CLICKED",
  "elementDescriptors": [
    {
      "visionText": "Privacy Policy"
    }
  ]
}

以下は、コンテンツの説明が"Emoji button"のソフト キーボード要素をクリックする Robo スクリプト アクションの例です。

{
  "eventType": "SOFT_KEYBOARD_CLICK",
  "elementDescriptors": [
    {
      "contentDescription": "Emoji button"
    }
  ]
}

以下は、ランダムなソフト キーボード要素を最大 5 回クリックする Robo スクリプト アクションの例です。

{
  "eventType": "SOFT_KEYBOARD_RANDOM_CLICK",
  "maxNumberOfRuns": 5
}

ソフトキーボードを無効にする

次の表に、必須属性を示します。

属性説明
"eventType": "DISABLE_KEYBOARD" --

以下は、ソフト キーボードを無効にする Robo スクリプト アクションの例です。

{
  "eventType": "DISABLE_KEYBOARD"
}

adbシェルコマンドを実行

次の表に、必須属性を示します。

属性説明
"eventType": "ADB_SHELL_COMMAND" --
command実行する Android Debug Bridge (adb) シェル コマンド。

以下は、テスト対象アプリのユーザー データを消去する Robo スクリプト アクションの例です。

{
  "eventType": "ADB_SHELL_COMMAND",
  "command": "pm clear __%APP_PACKAGE_NAME%__"
}

アクセス許可を付与する

このアクションは、 Espresso Test Recorderとの下位互換性のために、Android Studio の Robo スクリプト レコーダーによって記録されます。 Robo テストは、すべてのクロールの開始時にすべてのアクセス許可をテスト対象のアプリに付与するため、このアクションはノーオペレーションです。 Robo スクリプトでこのアクションを使用しないでください。

次の表に、必須属性を示します。

属性説明
"eventType": "PERMISSIONS_REQUEST" --

入力テキスト

次の表に、必須属性を示します。

属性説明
eventType Robo スクリプト アクションのタイプを指定します。
"eventType": "VIEW_TEXT_CHANGED"指定されたテキストをターゲット UI ウィジェットに入力します。
"eventType": "ENTER_TEXT"指定されたテキストをターゲット UI ウィジェットに入力し、 KEYCODE_ENTERイベントをこの UI ウィジェットに送信します。
elementDescriptors Android UI 階層を使用してターゲット UI ウィジェットを識別します。
replacementTextターゲット UI ウィジェットに入力するテキスト。

以下は、リソース ID が"com.google.samples.apps.topeka:id/first_name"の UI ウィジェットに"John"を入力する Robo スクリプト アクションの例です。

{
  "eventType": "VIEW_TEXT_CHANGED",
  "replacementText": "John",
  "elementDescriptors": [
    {
      "resourceId": "com.google.samples.apps.topeka:id/first_name"
    }
  ]
}

ロングクリック

次の表に、必須属性を示します。

属性説明
"eventType": "VIEW_LONG_CLICKED" --
elementDescriptors Android UI 階層を使用してターゲット UI ウィジェットを識別します。

次の属性はオプションです。

  • delayTime - 長いクリックの押下が続く時間をミリ秒単位で指定します。

以下は、コンテンツの説明が"Avatar 8"の UI ウィジェットで 5 秒間のクリックを実行する Robo スクリプト アクションの例です。

{
  "eventType": "VIEW_LONG_CLICKED",
  "elementDescriptors": [
    {
      "contentDescription": "Avatar 8"
    }
  ],
  "delayTime": 5000
}

ワンポイント ジェスチャを実行する

次の表に、必須属性を示します。

属性説明
"eventType": "ONE_POINT_GESTURE" --
coordinatesパーセンテージまたはピクセルとして "(x1,y1)->(x2,y2)" としてフォーマットされた、ワンポイント ジェスチャの 2 つの座標。

次の属性はオプションです。

  • dragAndDrop - trueに設定されている場合、ワンポイント ジェスチャはドラッグ アンド ドロップ アクションを実行します。デフォルトではfalseです。

以下は、スワイプダウンを実行する Robo スクリプトのワンポイント ジェスチャ アクションの例です。

{
  "eventType": "ONE_POINT_GESTURE",
  "coordinates": "(50%,25%)->(50%,75%)"
}

2 ポイント ジェスチャを実行する

次の表に、必須属性を示します。

属性説明
"eventType": "TWO_POINT_GESTURE" --
coordinatesパーセンテージまたはピクセルとして "(x1,y1)->(x2,y2),(x3,y3)->(x4,y4)" としてフォーマットされた、2 ポイント ジェスチャの 4 つの座標。

以下は、ピンチアウト ジェスチャを実行する Robo スクリプト アクションの例です。

{
  "eventType": "TWO_POINT_GESTURE",
  "coordinates": "(50%,50%)->(25%,50%),(50%,50%)->(75%,50%)"
}

IME アクションを実行する

このアクションは、指定されたターゲット UI ウィジェットの入力方式エディター (IME) で、現在のアクション ボタン (次へ、完了、検索など) を押します。

次の表に、必須属性を示します。

属性説明
"eventType": "PRESSED_EDITOR_ACTION" --
elementDescriptors Android UI 階層を使用してターゲット UI ウィジェットを識別します。

以下は、リソース ID が"com.google.samples.apps.topeka:id/first_name"の UI ウィジェットで IME アクションを実行する Robo スクリプト アクションの例です。

{
  "eventType": "PRESSED_EDITOR_ACTION",
  "elementDescriptors": [
    {
      "resourceId": "com.google.samples.apps.topeka:id/first_name"
    }
  ]
}

押し戻す

次の表に、必須属性を示します。

属性説明
eventType Robo スクリプト アクションのタイプを指定します。
"eventType": "PRESSED_BACK" KEYCODE_BACKイベントをデバイスに送信します。
"eventType": "PRESSED_BACK_EMULATOR_28" Android Studio の Robo スクリプト レコーダーで、エミュレータ API 28 を押し戻すために使用されます。

以下は、押し戻す Robo スクリプト アクションの例です。

{
  "eventType": "PRESSED_BACK"
}

ホームを押す

このアクションは、 KEYCODE_HOMEイベントをデバイスに送信します。

次の表に、必須属性を示します。

属性説明
"eventType": "GO_HOME" --

以下は、ホームを押す Robo スクリプト アクションの例です。

{
  "eventType": "GO_HOME"
}

要素をスクロールして表示する

このアクションにより、Robo テストは、指定されたchildElementDescriptorsに一致する UI ウィジェットが画面に表示されるか、スクロールされたウィジェットがスクロールできなくなるか、最大スクロール数の 50 に達するまで、指定されたelementDescriptorsに一致する UI ウィジェットを順方向にスクロールします。

次の表に、必須属性を示します。

属性説明
"eventType": "ELEMENT_SCROLL_INTO_VIEW" --
elementDescriptors Android UI 階層を使用して、スクロールされた UI ウィジェットを識別します。
childElementDescriptors Android UI 階層を使用してスクロールする UI ウィジェットを識別します。

次に示すのは、リソース ID "my.app.package:id/scrollable_card_container"を持つ UI ウィジェットを、 "Orange"テキストを持つ UI ウィジェットが画面に表示されるまで (またはそれ以上スクロールできなくなるまで) スクロールする Robo スクリプト アクションの例です。または、最大スクロール数の 50 に達している場合):

{
  "eventType": "ELEMENT_SCROLL_INTO_VIEW",
  "elementDescriptors": [
    {
      "resourceId": "my.app.package:id/scrollable_card_container"
    }
  ],
  "childElementDescriptors": [
    {
      "text": "Orange"
    }
  ]
}

スワイプ

次の表に、必須属性を示します。

属性説明
"eventType": "VIEW_SWIPED" --
swipeDirectionスワイプの方向を指定します:
  • Left
  • Right
  • Up
  • Down
  • Forward - ターゲット UI ウィジェットの垂直方向または水平方向のスクロール可能性に応じて、 DownまたはRightのいずれか。
  • Backward - ターゲット UI ウィジェットの垂直方向または水平方向のスクロール可能性に応じて、 UpまたはLeft
elementDescriptors Android UI 階層を使用してターゲット UI ウィジェットを識別します。

以下は、リソース ID "my.app.package:id/custom_content"を持つ UI ウィジェットを上にスワイプする Robo スクリプト アクションの例です。

{
  "eventType": "VIEW_SWIPED",
  "swipeDirection": "Up",
  "elementDescriptors": [
    {
      "resourceId": "my.app.package:id/custom_content"
    }
  ]
}

スクリーンショットを撮ります

次の表に、必須属性を示します。

属性説明
"eventType": "TAKE_SCREENSHOT" --
screenshotNameスクリーンショットのファイル名を指定します。

以下は、スクリーンショットを取得する Robo スクリプト アクションの例です。

{
  "eventType": "TAKE_SCREENSHOT",
  "screenshotName": "my_screenshot"
}

画面上のポイントをタップします

次の表に、必須属性を示します。

属性説明
"eventType": "POINT_TAP" --
pointTapXCoordinateタップされた点のピクセル X 座標。 pointTapXPercentおよびpointTapYPercentとは相互に排他的です。
pointTapYCoordinateタップされた点のピクセル Y 座標。 pointTapXPercentおよびpointTapYPercentとは相互に排他的です。
pointTapXPercentタップされたポイントのパーセンテージ X 座標。 pointTapXCoordinateおよびpointTapYCoordinateとは相互に排他的です。
pointTapYPercentタップされたポイントのパーセント Y 座標。 pointTapXCoordinateおよびpointTapYCoordinateとは相互に排他的です。

以下は、画面の中央をタップする Robo スクリプト アクションの例です。

{
  "eventType": "POINT_TAP",
  "pointTapXPercent": 50,
  "pointTapYPercent": 50
}

要素内のポイントをタップします

次の表に、必須属性を示します。

属性説明
"eventType": "POINT_TAP_ELEMENT" --
pointTapXPercentターゲット要素内の X 座標のパーセンテージ。
pointTapYPercentターゲット要素内の Y 座標のパーセンテージ。
elementDescriptors Android UI 階層を使用してターゲット UI ウィジェットを識別します。

以下は、シークバーのスライダーを右に移動する Robo スクリプト アクションの例です。

{
  "eventType": "POINT_TAP_ELEMENT",
  "pointTapXPercent": 80,
  "pointTapYPercent": 50,
  "elementDescriptors": [
    {
      "resourceId": "my.app.package:id/my_seekbar"
    }
  ]
}

クロールを終了する

このアクションにより、Robo テストが停止します。

次の表に、必須属性を示します。

属性説明
"eventType": "TERMINATE_CRAWL" --

以下は、Robo テストを停止する Robo スクリプト アクションの例です。

{
  "eventType": "TERMINATE_CRAWL"
}

待って

次の表に、必須属性を示します。

属性説明
"eventType": "DELAYED_MESSAGE_POSTED" --
delayTime待機する時間をミリ秒単位で指定します。

以下は、3 秒間待機する Robo スクリプト アクションの例です。

{
  "eventType": "DELAYED_MESSAGE_POSTED",
  "delayTime": 3000
}

要素を待つ

このアクションにより、Robo テストは、要素が画面に表示されるまで、指定されたタイムアウトまで待機します。

次の表に、必須属性を示します。

属性説明
"eventType": "WAIT_FOR_ELEMENT" --
delayTime待機タイムアウトをミリ秒単位で指定します。
elementDescriptors Android UI 階層を使用して、待機中の UI ウィジェットを識別します。

以下は、リソース ID "my.app.package:id/confirmation_button"を持つ UI ウィジェットが画面に表示されるまで最大 30 秒間待機する Robo スクリプト アクションの例です。

{
  "eventType": "WAIT_FOR_ELEMENT",
  "delayTime": 30000,
  "elementDescriptors": [
    {
      "resourceId": "my.app.package:id/confirmation_button"
    }
  ]
}

次のステップ