Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Robo 腳本參考指南

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

本文檔提供有關 Robo 腳本的參考信息,包括結構、功能、用法、記錄和操作。 Robo 腳本是自動執行移動應用程序的手動質量保證 (QA) 任務並啟用持續集成 (CI) 和發布前測試策略的測試。 Robo 腳本是一個 JSON 文件,描述了一系列用戶界面 (UI) 和其他操作。

您可以通過以下方式創建 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 腳本中的每個操作都表示為一個或多個屬性值對的捆綁包,如下表所述:

屬性描述
eventType指定操作的類型,例如單擊、文本編輯等。每個操作都需要。
elementDescriptors標識 UI 小部件的描述符。對於具有目標 UI 小部件的所有操作(例如單擊特定按鈕)都是必需的。
optional如果設置為true ,則在無法執行時跳過此操作。例如,當它無法在屏幕上找到其目標 UI 小部件時,將跳過此操作,而不會使包含的 Robo 腳本失敗。默認情況下,該值為false
replacementText要輸入到目標 UI 小部件的文本。文本編輯操作所必需的。
swipeDirection指定滑動的方向。滑動操作需要。
delayTime指定等待多長時間,以毫秒為單位。等待操作是必需的。
pointTapXCoordinatepointTapYCoordinate點擊點的像素 X 和 Y 坐標。與pointTapXPercentpointTapYPercent 。點敲擊操作需要。
pointTapXPercentpointTapYPercent點擊點的百分比 X 和 Y 坐標。與pointTapXCoordinatepointTapYCoordinate 。點敲擊操作需要。

以下是一個 Robo 腳本示例,其中包含兩個沒有目標 UI 小部件的操作,這意味著這些操作不會對特定的 UI 小部件進行操作:

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

元素描述符

元素描述符使用以下一個或多個標識屬性來標識 UI 小部件:

屬性描述
className
ancestorClassName元素的 UI 層次結構祖先的類名。祖先是元素的 UI 層次結構中的任何父節點,包括元素本身。
resourceId
resourceIdRegex用於匹配resourceId的 Java 正則表達式。
contentDescription
contentDescriptionRegex用於匹配contentDescription的 Java 正則表達式。
text (出現在屏幕上)
textRegex用於匹配text的 Java 正則表達式。
groupViewChildPositionrecyclerViewChildPositionadapterViewChildPosition表示 UI 小部件的子位置,具體取決於其父小部件的類型。

通常,這些屬性是未定義的,例如,按鈕可能沒有文本和內容描述。即使存在某些屬性值,它們在給定的應用程序屏幕上也可能不是唯一的(包括resourceId )。

例如,通常只能通過在其父窗口小部件中使用它們不同的子位置來區分列表中的項目。這意味著僅使用一個元素描述符來識別 UI 小部件通常是不夠的。因此,動作的elementDescriptors屬性包含一系列元素描述符,這些元素描述符按順序排列,第一個對應於目標 UI 小部件,第二個對應於目標 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 腳本中的操作列表添加一個 JSON 對象的前綴,該對象指定該 Robo 腳本的執行選項。此配置標頭以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
  }
]

模板參數

模板參數是 Robo 腳本中的佔位符,當 Robo 測試加載該 Robo 腳本以執行時,該佔位符將替換為實際值。模板參數的前綴是雙下劃線,後跟一個百分號,後綴是一個百分號,後跟一個雙下劃線。

Robo 腳本支持以下模板參數:

  • __%APP_PACKAGE_NAME%__ - 被測應用的包名。

以下是停止被測應用進程的 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

對 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 腳本並在測試實驗室中運行它

您可以在 Android Studio 中創建一個 Robo 腳本,將腳本保存為 JSON 文件。然後,您可以將 JSON 文件與應用程序一起上傳到 Firebase 測試實驗室並相應地運行測試。

當您在附加腳本的情況下運行 Robo 測試時,Robo 測試首先會執行您預先編寫好的操作,然後像往常一樣探索應用程序。

要在 Android Studio 中創建 Robo 腳本 JSON 文件,請按照使用 Android Studio 中的測試實驗室錄製 Robo 腳本中的步驟操作。

Robo 腳本操作

以下通用可選屬性適用於所有操作:

  • description - 幫助在 Robo 測試輸出中跟踪此 Robo 腳本操作的執行。

斷言

如果斷言條件為真,Robo 腳本將繼續執行下一個動作,這可能是另一個斷言。否則,由於斷言失敗,Robo 腳本執行將停止,並且測試結果為 FAILED。

下表列出了必需的屬性:

屬性描述
"eventType": "ASSERTION" --
contextDescriptor描述斷言的上下文或條件。

上下文描述符

上下文描述符使用以下屬性之一或組合定義上下文/條件:

屬性描述
"condition": "element_present"檢查屏幕上是否存在與elementDescriptors或由visionText指定的文本匹配的 UI 小部件。
"condition": "element_disabled"檢查與elementDescriptors匹配的 UI 小部件是否存在於屏幕上並且無法與之交互。
"condition": "app_under_test_shown"檢查被測應用程序是否在前台運行。
"condition": "default_launcher_shown"檢查是否顯示了設備的主屏幕,這意味著沒有應用程序在前台運行。
"condition": "non_roboscript_action_performed"檢查 Robo 測試執行的最後一個操作是否不是 Robo 腳本操作。
negateCondition如果設置為true ,則否定condition 。例如,您可以使用此屬性檢查屏幕上是否不存在 UI 小部件,或者被測應用程序是否未在前台運行。
elementDescriptors一個或多個元素描述符,用於標識屏幕上的 UI 小部件。它與element_presentelement_disabled條件結合使用。與visionText 。有關詳細信息,請參閱元素描述符
visionText使用光學字符識別 (OCR) API 檢測屏幕上的文本。 visionTextelement_present條件結合使用。與elementDescriptors互斥。

以下是檢查被測應用程序是否在前台的 Robo 腳本斷言示例:

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

下面是一個 Robo 腳本斷言示例,它檢查屏幕上是否存在資源 ID 為"com.google.samples.apps.topeka:id/done"的 UI 小部件:

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

以下是一個 Robo 腳本斷言示例,它使用 OCR 檢查是否在屏幕上未檢測到"Settings"

{
  "eventType": "ASSERTION",
  "contextDescriptor": {
    "condition": "element_present",
    "negateCondition": true,
    "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互斥。
maxNumberOfRunseventTypeSOFT_KEYBOARD_RANDOM_CLICK時,指定單擊軟鍵盤的隨機元素的次數。默認值為1

以下是一個 Robo 腳本操作示例,該操作單擊資源 ID 為"com.google.samples.apps.topeka:id/done"的按鈕:

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

以下是使用 OCR 在屏幕上檢測到的單擊"Privacy Policy"的 Robo 腳本操作示例:

{
  "eventType": "VIEW_CLICKED",
  "visionText": "Privacy Policy"
}

以下是一個 Robo 腳本操作示例,該操作單擊內容描述為"Emoji button"的軟鍵盤元素:

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

以下是一個 Robo 腳本操作示例,該操作最多單擊隨機軟鍵盤元素五次:

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

禁用軟鍵盤

下表列出了必需的屬性:

屬性描述
"eventType": "DISABLE_KEYBOARD" --

以下是禁用軟鍵盤的 Robo 腳本操作示例:

{
  "eventType": "DISABLE_KEYBOARD"
}

執行 adb shell 命令

下表列出了必需的屬性:

屬性描述
"eventType": "ADB_SHELL_COMMAND" --
command要執行的 Android Debug Bridge (adb) shell 命令。

以下是清除被測應用用戶數據的 Robo 腳本操作示例:

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

授予權限

此操作由 Android Studio 中的 Robo 腳本記錄器記錄,以向後兼容Espresso 測試記錄器。 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 小部件的文本。

以下是一個 Robo 腳本操作示例,該操作將"John"輸入到資源 ID 為"com.google.samples.apps.topeka:id/first_name"的 UI 小部件中:

{
  "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 - 指定長按的按下應該持續多長時間,以毫秒為單位。

以下是一個 Robo 腳本操作示例,該操作在內容描述為"Avatar 8"的 UI 小部件上執行 5 秒長的點擊:

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

執行單點手勢

下表列出了必需的屬性:

屬性描述
"eventType": "ONE_POINT_GESTURE" --
coordinates單點手勢的兩個坐標,格式為“(x1,y1)->(x2,y2)”,表示為百分比或像素。

以下屬性是可選的:

  • dragAndDrop - 如果設置為true ,則單點手勢執行拖放操作。默認情況下,它是false

以下是執行向下滑動的 Robo 腳本單點手勢動作示例:

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

執行兩點手勢

下表列出了必需的屬性:

屬性描述
"eventType": "TWO_POINT_GESTURE" --
coordinates兩點手勢的四個坐標,格式為“(x1,y1)->(x2,y2),(x3,y3)->(x4,y4)”,表示為百分比或像素。

以下是執行捏合手勢的 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 小部件。

以下是 Robo 腳本操作示例,該操作對資源 ID 為"com.google.samples.apps.topeka:id/first_name"的 UI 小部件執行 IME 操作:

{
  "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" --

以下是按下 home 鍵的 Robo 腳本操作示例:

{
  "eventType": "GO_HOME"
}

將元素滾動到視圖中

此操作使 Robo 測試向前滾動匹配指定elementDescriptors的 UI 小部件,直到屏幕上出現與指定childElementDescriptors匹配的 UI 小部件,或者滾動的小部件無法再滾動,或者達到最大滾動次數 50。

下表列出了必需的屬性:

屬性描述
"eventType": "ELEMENT_SCROLL_INTO_VIEW" --
elementDescriptors使用 Android UI 層次結構標識滾動的 UI 小部件。
childElementDescriptors使用 Android UI 層次結構標識要滾動到的 UI 小部件。

下面是一個 Robo 腳本操作示例,它滾動資源 ID 為"my.app.package:id/scrollable_card_container"的 UI 小部件,直到屏幕上出現帶有文本"Orange"的 UI 小部件(或者不再可以滾動執行,或達到最大捲軸數 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 - DownRight取決於目標 UI 小部件的垂直或水平可滾動性。
  • Backward - UpLeft取決於目標 UI 小部件的垂直或水平可滾動性。
elementDescriptors使用 Android UI 層次結構標識目標 UI 小部件。

下面是一個 Robo 腳本操作示例,它向上滑動資源 ID 為"my.app.package:id/custom_content"的 UI 小部件:

{
  "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 坐標。與pointTapXPercentpointTapYPercent
pointTapYCoordinate點擊點的像素 Y 坐標。與pointTapXPercentpointTapYPercent
pointTapXPercent點擊點的百分比 X 坐標。與pointTapXCoordinatepointTapYCoordinate
pointTapYPercent點擊點的百分比 Y 坐標。與pointTapXCoordinatepointTapYCoordinate

以下是在屏幕中間點擊的 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指定等待多長時間,以毫秒為單位。

以下是等待三秒鐘的 Robo 腳本操作示例:

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

等待一個元素

此操作使 Robo 測試等待元素出現在屏幕上,直到指定的超時。

下表列出了必需的屬性:

屬性描述
"eventType": "WAIT_FOR_ELEMENT" --
delayTime指定等待超時,以毫秒為單位。
elementDescriptors使用 Android UI 層次結構標識等待的 UI 小部件。

以下是 Robo 腳本操作的示例,該操作最多等待 30 秒以使資源 ID 為"my.app.package:id/confirmation_button"的 UI 小部件出現在屏幕上:

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

下一步