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 스크립트의 각 작업은 다음 표에 설명된 하나 이상의 속성-값 쌍의 번들로 표시됩니다.

기인하다 설명
eventType 클릭, 텍스트 편집 등과 같은 작업 유형을 지정합니다. 모든 작업에 필요합니다.
elementDescriptors UI 위젯을 식별하는 설명자. 특정 버튼 클릭과 같이 대상 UI 위젯이 있는 모든 작업에 필요합니다.
optional true 로 설정하면 이 작업을 수행할 수 없을 때 건너뜁니다. 예를 들어 이 작업은 포함된 Robo 스크립트에 실패하지 않고 화면에서 대상 UI 위젯을 찾을 수 없는 경우 건너뜁니다. 기본적으로 값은 false 입니다.
replacementText 대상 UI 위젯에 입력할 텍스트입니다. 텍스트 편집 작업에 필요합니다.
swipeDirection 스와이프 방향을 지정합니다. 스와이프 작업에 필요합니다.
delayTime 대기 시간을 밀리초 단위로 지정합니다. 대기 작업에 필요합니다.
pointTapXCoordinatepointTapYCoordinate 탭한 지점의 픽셀 X 및 Y 좌표입니다. pointTapXPercentpointTapYPercent 와 상호 배타적입니다. 포인트 탭 작업에 필요합니다.
pointTapXPercentpointTapYPercent 탭된 지점의 백분율 X 및 Y 좌표입니다. pointTapXCoordinatepointTapYCoordinate 와 상호 배타적입니다. 포인트 탭 작업에 필요합니다.

다음은 대상 UI 위젯이 없는 두 개의 작업이 있는 Robo 스크립트의 예입니다. 즉, 이러한 작업은 특정 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 정규식 .
groupViewChildPosition , recyclerViewChildPosition 또는 adapterViewChildPosition 상위 위젯의 종류에 따라 UI 위젯의 하위 위치를 나타냅니다.

종종 이러한 속성은 정의되지 않습니다. 예를 들어 버튼에 텍스트 및 콘텐츠 설명이 없을 수 있습니다. 일부 속성 값이 존재하더라도 지정된 앱 화면에서 고유하지 않을 수 있습니다( resourceId 포함).

예를 들어, 목록의 항목을 구별하는 것은 일반적으로 상위 위젯 내에서 서로 다른 하위 위치를 사용해야만 가능합니다. 이것은 UI 위젯을 식별하기 위해 하나의 요소 설명자를 사용하는 것만으로는 일반적으로 충분하지 않다는 것을 의미합니다. 따라서 작업의 elementDescriptors 속성에는 첫 번째 항목이 대상 UI 위젯에 해당하고 두 번째 항목이 대상 UI 위젯의 상위 위젯에 해당하는 식으로 순서가 지정된 일련의 요소 설명자가 포함됩니다. 작업의 대상 UI 위젯은 모든 요소 설명자가 해당 UI 위젯 하위 계층과 일치할 때 일치합니다.

다음은 제공된 요소 설명자를 사용하여 대상 UI 위젯을 식별해야 하는 텍스트 변경 및 클릭 작업이 있는 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 스크립트가 완료된 후 Robo 테스트가 크롤링을 중지합니다.

다음은 크롤링이 중지된 후 3초 동안 휴면하는 strict 모드에서 실행된 Robo 스크립트의 예입니다.

"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 스크립트를 기록하고 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 어설션된 컨텍스트 또는 조건을 설명합니다.

컨텍스트 설명자

컨텍스트 설명자는 다음 속성 중 하나 또는 조합을 사용하여 컨텍스트/조건을 정의합니다.

기인하다 설명
"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 위젯을 식별하는 하나 이상의 요소 설명자. element_present 조건과 함께 사용됩니다. visionText 와 상호 배타적입니다. 자세한 내용은 요소 설명자를 참조하십시오.
visionText 화면의 텍스트는 광학 문자 인식(OCR) API를 사용하여 감지됩니다. visionTextelement_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 디버그 브리지(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 위젯에 입력한 다음 이 UI 위젯에 KEYCODE_ENTER 이벤트를 보냅니다.
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)" 형식의 원포인트 제스처에 대한 두 좌표입니다.

다음 속성은 선택 사항입니다.

  • 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"
}

요소를 스크롤하여 보기

이 작업은 지정된 childElementDescriptors 와 일치하는 UI 위젯이 화면에 표시되거나 스크롤된 위젯을 더 이상 스크롤할 수 없거나 최대 스크롤 수 50개에 도달할 때까지 Robo 테스트가 지정된 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 좌표입니다. 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 대기 시간을 밀리초 단위로 지정합니다.

다음은 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"
    }
  ]
}

다음 단계