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, включая структуру, возможности, использование, запись и действия. Робо-скрипты — это тесты, которые автоматизируют ручные задачи обеспечения качества (QA) для мобильных приложений и обеспечивают непрерывную интеграцию (CI) и стратегии тестирования перед запуском. Сценарий Robo — это файл JSON, описывающий последовательность пользовательского интерфейса (UI) и других действий.

Вы можете создать Robo-скрипт следующими способами:

  • Используйте функцию записи сценария Robo.
  • Создайте скрипт Robo вручную.
  • Запишите сценарий Robo, а затем отредактируйте его вручную.

Дополнительные сведения об использовании сценариев Robo см. в разделе Запуск сценария Robo .

Сценарий Robo предоставляется для тестирования Robo вместе с другими входными данными, такими как тестируемый пакет приложений для Android (APK).

Ниже приведен пример сценария 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 Дескрипторы, идентифицирующие виджет пользовательского интерфейса. Требуется для всех действий, которые имеют целевой виджет пользовательского интерфейса, например нажатие определенной кнопки.
optional Если установлено значение true , это действие пропускается, если его невозможно выполнить. Например, это действие пропускается, если ему не удается найти на экране целевой виджет пользовательского интерфейса — без сбоя содержащего его скрипта Robo. По умолчанию значение равно false .
replacementText Текст для ввода в целевой виджет пользовательского интерфейса. Требуется для действий по редактированию текста.
swipeDirection Задает направление смахивания. Требуется для действий смахивания.
delayTime Указывает время ожидания в миллисекундах. Требуется для действий ожидания.
pointTapXCoordinate и pointTapYCoordinate Пиксельные координаты X и Y точки касания. Взаимоисключающие с pointTapXPercent и pointTapYPercent . Требуется для действий касания точки.
pointTapXPercent и pointTapYPercent Процент координат X и Y точки касания. Взаимоисключающее с pointTapXCoordinate и pointTapYCoordinate . Требуется для действий касания точки.

Ниже приведен пример сценария Robo с двумя действиями без целевых виджетов пользовательского интерфейса, что означает, что эти действия не работают с конкретным виджетом пользовательского интерфейса:

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

Дескрипторы элементов

Дескриптор элемента идентифицирует виджет пользовательского интерфейса, используя один или несколько из следующих идентифицирующих атрибутов:

Атрибут Описание
className
ancestorClassName Имя класса предка иерархии пользовательского интерфейса элемента. Предок — это любой из родительских узлов в иерархии пользовательского интерфейса элемента, включая сам элемент.
resourceId
resourceIdRegex Регулярное выражение Java для соответствия resourceId .
contentDescription
contentDescriptionRegex Регулярное выражение Java для соответствия contentDescription .
text (который появляется на экране)
textRegex Регулярное выражение Java для соответствия text .
groupViewChildPosition , recyclerViewChildPosition или adapterViewChildPosition Представляет дочернюю позицию виджета пользовательского интерфейса в зависимости от типа его родительского виджета.

Часто эти атрибуты не определены, например, кнопка может не иметь текста и описания содержимого. Даже если некоторые значения атрибутов присутствуют, они могут не быть уникальными на данном экране приложения (включая resourceId ).

Например, различие между элементами списка обычно возможно только с использованием их различных дочерних позиций в их родительском виджете. Это означает, что использования только одного дескриптора элемента для идентификации виджета пользовательского интерфейса обычно недостаточно. Таким образом, атрибут elementDescriptors действия содержит последовательность дескрипторов элементов, упорядоченных таким образом, что первый соответствует целевому виджету пользовательского интерфейса, второй соответствует родительскому виджету целевого виджета пользовательского интерфейса и так далее. Целевой виджет пользовательского интерфейса действия сопоставляется, когда все дескрипторы его элементов соответствуют соответствующей подиерархии виджета пользовательского интерфейса.

Ниже приведен пример скрипта Robo с изменением текста и действиями щелчка, которые требуют от вас идентификации целевого виджета пользовательского интерфейса с помощью предоставленных дескрипторов элементов:

[
  {
    "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 test прекращает сканирование после завершения Robo-скрипта.

Ниже приведен пример сценария Robo, выполняемого в strict режиме, который приостанавливается на три секунды, после чего сканирование прекращается:

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

Параметры шаблона

Параметр шаблона — это заполнитель в сценарии 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 test продолжает пытаться сопоставить действие сценария Robo всякий раз, когда он выбирает действие для выполнения. Робо-скрипт использует следующие методы для повышения надежности:

Техника Описание
Частичное совпадение Если текущее действие сценария Robo не может быть полностью сопоставлено, критерии сопоставления смягчаются, и сопоставление повторяется. Частичное сопоставление не учитывает дескриптор самого внешнего элемента при сопоставлении с целевым виджетом пользовательского интерфейса действия сценария Robo.

Если частичное сопоставление выполнено успешно, соответствующее действие Robo-скрипта выполняется как обычно. Этот метод поддерживает сценарии, в которых структура приложения меняется, например, между версиями приложения, когда элементы экрана переставляются.

Пропустить текущее действие Если текущее действие сценария Robo не может быть полностью или частично сопоставлено, Robo пытается сопоставить последующее действие сценария Robo. Если последующее действие полностью или частично совпадает, робо-тест пропускает (и никогда не возвращается) текущее действие робо-скрипта и выполняет последующее.

Этот метод поддерживает сценарии, когда поведение приложения меняется между версиями или нестабильно, например, когда прерывистый диалог может появляться на разных экранах во время записи или воспроизведения сценария Robo.

Приостановить Если ни текущие, ни последующие действия Robo-скрипта не могут быть полностью или частично сопоставлены, Robo-скрипт временно приостанавливается, и Robo-тест выбирает действие для выполнения, используя другие его стратегии. После завершения этого действия Robo test возобновляет выполнение Robo-скрипта.

Пока текущие или последующие действия робо-скрипта не могут быть сопоставлены, робо-скрипт остается приостановленным для любого количества действий. Таким образом, робо-скрипты не обязательно должны быть прологом для робо-теста, и вы можете чередовать действия робо-скрипта со стандартными действиями робо-теста. Этот метод поддерживает сценарии, когда поведение приложения неустойчиво или когда изменения между версиями приложения настолько велики, что тест Robo должен «заполнить пробелы» с помощью своих стандартных действий.

Поддержка RecyclerView и AdapterView

Дочерние элементы виджетов RecyclerView и AdapterView загружаются динамически и могут отображаться на расстоянии большого количества свайпов от текущего экрана. Поскольку размер экрана и количество пролистываний, необходимых для перехода к этому дочернему элементу, различаются для разных форм-факторов устройства, гораздо надежнее полагаться на положение данных дочернего элемента, которое является абсолютным. Менее надежный подход — полагаться на количество пролистываний, необходимых для вывода этого дочернего элемента на экран, а затем использовать его положение на экране.

Поэтому сценарий Robo фиксирует абсолютные позиции данных дочерних элементов RecyclerView, которые являются целевыми объектами действий сценария Robo, как recyclerViewChildPosition . Сценарий Robo также фиксирует абсолютные позиции данных дочерних элементов AdapterView, которые являются целевыми объектами действий сценария Robo, как adapterViewChildPosition .

Действия над дочерними элементами RecyclerView и AdapterView выполняются в следующих шагах:

  1. Робо-тест гарантирует, что соответствующий дочерний элемент отображается на экране посредством действия позиционирования на его содержащем RecyclerView или AdapterView.

  2. Робо-тест выполняет записанное действие непосредственно над дочерним элементом, так как он уже отображается на экране.

Ниже приведен пример действия щелчка в дочернем элементе 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
    }
  ]
}

Запишите скрипт Robo в Android Studio и запустите его в Test Lab.

Вы можете создать скрипт Robo в Android Studio, который сохранит скрипт в виде файла JSON. Затем вы можете загрузить файл JSON в тестовую лабораторию Firebase с приложением и соответствующим образом запустить тест.

Когда вы запускаете тест Robo с прикрепленным скриптом, тест Robo сначала выполняет заранее заданные действия, а затем исследует приложение, как обычно.

Чтобы создать JSON-файл Robo-скрипта в Android Studio, выполните действия, описанные в разделе Запись Robo-скрипта с помощью Test Lab в Android Studio .

Действия робоскрипта

Следующий общий необязательный атрибут применяется ко всем действиям:

  • description — помогает отслеживать выполнение этого действия сценария Robo в выходных данных теста Robo.

Утверждение

Если заявленное условие истинно, сценарий Robo переходит к следующему действию, которым может быть другое утверждение. В противном случае выполнение сценария Robo останавливается из-за ошибочного утверждения, а результат теста — НЕ ПРОШЕЛ.

В следующей таблице перечислены обязательные атрибуты:

Атрибут Описание
"eventType": "ASSERTION" --
contextDescriptor Описывает заявленный контекст или условие.

Дескриптор контекста

Дескриптор контекста определяет контекст/условие, используя один или комбинацию следующих атрибутов:

Атрибут Описание
"condition": "element_present" Проверяет, присутствует ли на экране виджет пользовательского интерфейса, соответствующий elementDescriptors или тексту, указанному в visionText .
"condition": "element_disabled" Проверяет, что виджет пользовательского интерфейса, соответствующий elementDescriptors , присутствует на экране и с ним нельзя взаимодействовать.
"condition": "app_under_test_shown" Проверяет, что тестируемое приложение работает на переднем плане.
"condition": "default_launcher_shown" Проверяет, отображается ли главный экран устройства, что означает, что приложения не запущены на переднем плане.
"condition": "non_roboscript_action_performed" Проверяет, что последнее действие, выполненное Robo-тестом, не является действием Robo-скрипта.
negateCondition Если установлено значение true , condition отменяется . Например, вы можете использовать этот атрибут, чтобы проверить, НЕ присутствует ли виджет пользовательского интерфейса на экране или что тестируемое приложение НЕ работает на переднем плане.
elementDescriptors Один или несколько дескрипторов элементов, идентифицирующих виджет пользовательского интерфейса на экране. Он используется в сочетании с условиями element_present и element_disabled . Взаимоисключающий с visionText . Дополнительные сведения см. в разделе Дескрипторы элементов .
visionText Текст на экране обнаруживается с помощью API оптического распознавания символов (OCR). visionText используется в сочетании с условием element_present . Взаимоисключающий с elementDescriptors .

Ниже приведен пример утверждения сценария Robo, который проверяет, находится ли тестируемое приложение на переднем плане:

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

Ниже приведен пример утверждения сценария Robo, который проверяет наличие на экране виджета пользовательского интерфейса с идентификатором ресурса "com.google.samples.apps.topeka:id/done" :

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

Ниже приведен пример утверждения сценария Robo, который проверяет, что "Settings" НЕ обнаружены на экране с помощью OCR:

{
  "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" Используется средством записи сценариев Robo в Android Studio для выбора элементов списка.
elementDescriptors Идентифицирует выбранный виджет пользовательского интерфейса с помощью иерархии пользовательского интерфейса Android. Взаимоисключающий с visionText .
visionText Идентифицирует выбранный элемент с помощью OCR. Взаимоисключающий с elementDescriptors .
maxNumberOfRuns Указывает, сколько раз нужно щелкнуть случайный элемент программной клавиатуры, если SOFT_KEYBOARD_RANDOM_CLICK eventType Значение по умолчанию — 1 .

Ниже приведен пример действия сценария Robo, которое нажимает кнопку с идентификатором ресурса "com.google.samples.apps.topeka:id/done" :

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

Ниже приведен пример действия сценария Robo, которое нажимает на "Privacy Policy" , обнаруженную на экране с помощью OCR:

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

В следующей таблице перечислены обязательные атрибуты:

Атрибут Описание
"eventType": "ADB_SHELL_COMMAND" --
command Выполняемая команда оболочки Android Debug Bridge (adb).

Ниже приведен пример действия сценария Robo, которое очищает пользовательские данные тестируемого приложения:

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

Предоставление разрешений

Это действие записывается рекордером сценариев Robo в Android Studio для обратной совместимости с Espresso Test Recorder . Робо-тест предоставляет все разрешения тестируемому приложению в начале каждого сканирования, поэтому это действие не выполняется. НЕ используйте это действие в своих скриптах Robo.

В следующей таблице перечислены обязательные атрибуты:

Атрибут Описание
"eventType": "PERMISSIONS_REQUEST" --

Введите текст

В следующей таблице перечислены обязательные атрибуты:

Атрибут Описание
eventType Указывает тип действия скрипта Robo.
"eventType": "VIEW_TEXT_CHANGED" Вводит данный текст в целевой виджет пользовательского интерфейса.
"eventType": "ENTER_TEXT" вводит данный текст в целевой виджет пользовательского интерфейса, а затем отправляет событие KEYCODE_ENTER этому виджету пользовательского интерфейса.
elementDescriptors Идентифицирует целевой виджет пользовательского интерфейса с помощью иерархии пользовательского интерфейса Android.
replacementText Текст для ввода в целевой виджет пользовательского интерфейса.

Ниже приведен пример действия сценария Robo, которое вводит "John" в виджет пользовательского интерфейса с идентификатором ресурса "com.google.samples.apps.topeka:id/first_name" :

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

Длинный щелчок

В следующей таблице перечислены обязательные атрибуты:

Атрибут Описание
"eventType": "VIEW_LONG_CLICKED" --
elementDescriptors Идентифицирует целевой виджет пользовательского интерфейса с помощью иерархии пользовательского интерфейса Android.

Следующий атрибут является необязательным:

  • delayTime — указывает, как долго должно длиться нажатие длинного клика в миллисекундах.

Ниже приведен пример действия сценария Robo, которое выполняет пятисекундный щелчок по виджету пользовательского интерфейса с описанием содержимого "Avatar 8" :

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

Это действие нажимает кнопку текущего действия, например, «Далее», «Готово» и «Поиск» в редакторе метода ввода (IME) для указанного целевого виджета пользовательского интерфейса.

В следующей таблице перечислены обязательные атрибуты:

Атрибут Описание
"eventType": "PRESSED_EDITOR_ACTION" --
elementDescriptors Идентифицирует целевой виджет пользовательского интерфейса с помощью иерархии пользовательского интерфейса Android.

Ниже приведен пример действия сценария Robo, которое выполняет действие IME для виджета пользовательского интерфейса с идентификатором ресурса "com.google.samples.apps.topeka:id/first_name" :

{
  "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" Используется регистратором сценариев Robo в Android Studio для возврата к эмуляторам API 28.

Ниже приведен пример действия скрипта Robo, которое нажимает назад:

{
  "eventType": "PRESSED_BACK"
}

Нажмите домой

Это действие отправляет на устройство событие KEYCODE_HOME .

В следующей таблице перечислены обязательные атрибуты:

Атрибут Описание
"eventType": "GO_HOME" --

Ниже приведен пример действия скрипта Robo, которое нажимает кнопку «Домой»:

{
  "eventType": "GO_HOME"
}

Прокрутить элемент в поле зрения

Это действие заставляет Robo test прокручивать вперед виджет пользовательского интерфейса, соответствующий указанным elementDescriptors до тех пор, пока на экране не появится виджет пользовательского интерфейса, соответствующий указанным childElementDescriptors дочерних элементов, или прокручиваемый виджет больше нельзя будет прокручивать, или будет достигнуто максимальное число прокруток в 50.

В следующей таблице перечислены обязательные атрибуты:

Атрибут Описание
"eventType": "ELEMENT_SCROLL_INTO_VIEW" --
elementDescriptors Идентифицирует прокручиваемый виджет пользовательского интерфейса с помощью иерархии пользовательского интерфейса Android.
childElementDescriptors Идентифицирует виджет пользовательского интерфейса для прокрутки с использованием иерархии пользовательского интерфейса Android.

Ниже приведен пример действия сценария Robo, которое прокручивает виджет пользовательского интерфейса с идентификатором ресурса "my.app.package:id/scrollable_card_container" до тех пор, пока на экране не появится виджет пользовательского интерфейса с текстом "Orange" (или больше не будет прокрутки). быть выполнено, или достигнуто максимальное количество прокруток в 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
  • ForwardDown или Right в зависимости от вертикальной или горизонтальной прокрутки целевого виджета пользовательского интерфейса.
  • BackwardUp или Left в зависимости от вертикальной или горизонтальной прокрутки целевого виджета пользовательского интерфейса.
elementDescriptors Идентифицирует целевой виджет пользовательского интерфейса с помощью иерархии пользовательского интерфейса Android.

Ниже приведен пример действия сценария Robo, которое пролистывает виджет пользовательского интерфейса с идентификатором ресурса "my.app.package:id/custom_content" :

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

Ниже приведен пример действия скрипта 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 test ожидать появления элемента на экране до указанного тайм-аута.

В следующей таблице перечислены обязательные атрибуты:

Атрибут Описание
"eventType": "WAIT_FOR_ELEMENT" --
delayTime Задает время ожидания в миллисекундах.
elementDescriptors Идентифицирует ожидаемый виджет пользовательского интерфейса, используя иерархию пользовательского интерфейса Android.

Ниже приведен пример действия сценария Robo, которое ожидает появления на экране виджета пользовательского интерфейса с идентификатором ресурса "my.app.package:id/confirmation_button" до 30 секунд:

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

Следующие шаги