Participe do Firebase Summit on-line e presencialmente em 18 de outubro de 2022. Veja como usar o Firebase pode ajudar você a acelerar o desenvolvimento de apps, a lançar seu aplicativo com confiança e a fazer o escalonamento com facilidade. Inscreva-se agora

Guia de referência de scripts Robo

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Este documento fornece informações de referência sobre scripts Robo, incluindo estrutura, recursos, uso, gravação e ações. Os scripts Robo são testes que automatizam tarefas manuais de garantia de qualidade (QA) para aplicativos móveis e permitem integração contínua (CI) e estratégias de teste de pré-lançamento. Um script Robo é um arquivo JSON que descreve uma sequência de interface do usuário (UI) e outras ações.

Você pode criar um script Robo das seguintes maneiras:

  • Use o recurso de gravação de script Robo.
  • Crie o script Robo manualmente.
  • Grave o script Robo e edite-o manualmente.

Para saber mais sobre como usar scripts Robo, consulte Executar um script Robo .

O script Robo é fornecido para o teste Robo juntamente com outras entradas, como o Android Application Package (APK) do aplicativo em teste.

Veja a seguir um exemplo de script Robo que conecta um usuário a um aplicativo:

[
  {
    "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"
      }
    ]
  }
]

Estrutura

Cada ação em um script Robo é representada como um pacote de um ou mais pares atributo-valor, que são descritos na tabela a seguir:

Atributo Descrição
eventType Especifica o tipo de ação, por exemplo, clique, edição de texto etc. Necessário para cada ação.
elementDescriptors Descritores que identificam um widget de interface do usuário. Obrigatório para todas as ações que têm um widget de IU de destino, como clicar em um botão específico.
optional Se definido como true , essa ação será ignorada quando não puder ser executada. Por exemplo, esta ação é ignorada quando não consegue encontrar seu widget de UI de destino em uma tela – sem falhar no script Robo que o contém. Por padrão, o valor é false .
replacementText O texto a ser inserido no widget de interface do usuário de destino. Necessário para ações de edição de texto.
swipeDirection Especifica a direção do deslize. Necessário para ações de furto.
delayTime Especifica quanto tempo esperar, em milissegundos. Necessário para ações de espera.
pointTapXCoordinate e pointTapYCoordinate As coordenadas X e Y do pixel do ponto tocado. Mutuamente exclusivo com pointTapXPercent e pointTapYPercent . Necessário para ações de toque de ponto.
pointTapXPercent e pointTapYPercent A porcentagem de coordenadas X e Y do ponto tocado. Mutuamente exclusivo com pointTapXCoordinate e pointTapYCoordinate . Necessário para ações de toque de ponto.

Veja a seguir um exemplo de script Robo com duas ações sem widgets de IU de destino, o que significa que essas ações não operam em um widget de IU específico:

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

Descritores de elemento

Um descritor de elemento identifica um widget de IU usando um ou mais dos seguintes atributos de identificação:

Atributo Descrição
className
ancestorClassName Nome da classe do ancestral da hierarquia da interface do usuário do elemento. Um ancestral é qualquer um dos nós pai na hierarquia da interface do usuário do elemento, incluindo o próprio elemento.
resourceId
resourceIdRegex Expressão regular Java para corresponder a resourceId .
contentDescription
contentDescriptionRegex Expressão regular Java para corresponder a contentDescription .
text (que aparece na tela)
textRegex Expressão regular Java para corresponder ao text .
groupViewChildPosition , recyclerViewChildPosition ou adapterViewChildPosition Representa a posição filho de um widget de interface do usuário, dependendo do tipo de widget pai.

Frequentemente, esses atributos são indefinidos, por exemplo, um botão pode não ter texto e descrição de conteúdo. Mesmo que alguns valores de atributo estejam presentes, eles podem não ser exclusivos em uma determinada tela de aplicativo (incluindo resourceId ).

Por exemplo, a diferenciação entre itens de uma lista geralmente é possível apenas usando suas diferentes posições filho dentro de seu widget pai. Isso significa que usar apenas um descritor de elemento para identificar um widget de interface do usuário geralmente é insuficiente. Portanto, o atributo elementDescriptors de uma ação contém uma sequência de descritores de elemento que são ordenados de forma que o primeiro corresponda ao widget de UI de destino, o segundo corresponda ao widget pai do widget de UI de destino e assim por diante. O widget de interface do usuário de destino de uma ação é correspondido quando todos os seus descritores de elemento correspondem à subhierarquia do widget de interface do usuário correspondente.

Veja a seguir um exemplo de um script Robo com uma mudança de texto e ações de clique, as quais exigem que você identifique o widget de interface do usuário de destino usando os descritores de elemento fornecidos:

[
  {
    "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"
      }
    ]
  }
]

Opções de execução

Opcionalmente, você pode prefixar a lista de ações em um script Robo com um objeto JSON que especifica as opções de execução para esse script Robo. Esse cabeçalho de configuração começa com a palavra-chave roboscript seguida por uma representação JSON das opções de execução desejadas.

Os scripts Robo suportam as seguintes opções de execução:

  • executionMode - opções de execução aplicadas quando um script Robo está em execução:
  • postscript - opções de execução aplicadas após a conclusão de um script Robo:
    • terminate - se definido como true , o teste Robo interrompe o rastreamento após a conclusão do script Robo.

Veja a seguir um exemplo de um script Robo executado em modo strict que fica suspenso por três segundos, após os quais o rastreamento é interrompido:

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

Parâmetros do modelo

Um parâmetro de modelo é um espaço reservado em um script Robo que é substituído pelo valor real quando o teste Robo carrega esse script Robo para execução. Os parâmetros do modelo são prefixados com um sublinhado duplo seguido de um sinal de porcentagem e são pós-fixados com um sinal de porcentagem seguido de um sublinhado duplo.

Os scripts Robo são compatíveis com o seguinte parâmetro de modelo:

  • __%APP_PACKAGE_NAME%__ - o nome do pacote do aplicativo em teste.

Veja a seguir um exemplo de um script Robo que interrompe o processo de aplicativo em teste:

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

Comentários

Um script Robo pode conter linhas de comentários, que são linhas que começam com # ou // .

O seguinte é um exemplo de um script Robo com alguns comentários:

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

Capacidades

Por padrão, até que todas as ações de um script Robo sejam concluídas (ou pelo menos tentadas), o script Robo permanece ativo. O teste Robo continua tentando corresponder a uma ação de script Robo sempre que está escolhendo uma ação para executar. O script Robo emprega as seguintes técnicas para aumentar a robustez:

Técnica Descrição
Correspondência parcial Se a ação do script Robo atual não puder ser totalmente correspondida, os critérios de correspondência serão relaxados e a correspondência será repetida. A correspondência parcial não considera o descritor de elemento mais externo ao corresponder ao widget de interface do usuário de destino de uma ação de script Robo.

Se a correspondência parcial for bem-sucedida, a ação de script Robo correspondente será executada normalmente. Essa técnica oferece suporte a cenários em que a estrutura do aplicativo é alterada, por exemplo, entre as versões do aplicativo, quando os elementos da tela são reorganizados.

Pular a ação atual Se a ação de script Robo atual não puder ser correspondida total ou parcialmente, o Robo tentará corresponder à ação de script Robo subsequente. Se a ação subsequente corresponder total ou parcialmente, o teste Robo pula (e nunca retorna) a ação atual do script Robo e executa a ação subsequente.

Essa técnica oferece suporte a cenários em que o comportamento do aplicativo muda entre as versões ou é instável, por exemplo, quando uma caixa de diálogo intermitente pode aparecer em telas diferentes durante a gravação versus a reprodução de um script Robo.

Suspender Se nem as ações do script Robo atuais nem as subsequentes puderem ser correspondidas total ou parcialmente, o script Robo será temporariamente suspenso e o teste Robo escolherá uma ação a ser executada usando suas outras estratégias. Após a conclusão desta ação, o teste Robo retoma a execução do script Robo.

Enquanto as ações de script Robo atuais ou subsequentes não puderem ser correspondidas, o script Robo permanecerá suspenso para qualquer número de ações. Assim, os scripts Robo não precisam necessariamente ser um prólogo para um teste Robo, e você pode intercalar ações de script Robo com ações de teste Robo padrão. Essa técnica oferece suporte a cenários em que o comportamento do aplicativo é instável ou quando as alterações entre as versões do aplicativo são grandes o suficiente para que o teste Robo precise "preencher as lacunas" com suas ações padrão.

Suporte para RecyclerView e AdapterView

Os filhos dos widgets RecyclerView e AdapterView são carregados dinamicamente e podem ser exibidos a muitos toques de distância da tela atual. Como o tamanho de uma tela e o número de passadas necessárias para chegar a esse filho são diferentes para diferentes fatores de forma do dispositivo, é muito mais robusto confiar na posição dos dados do filho, que é absoluta. É uma abordagem menos robusta contar com o número de furtos necessários para trazer essa criança para a tela e, em seguida, usar sua posição na tela.

Portanto, o script Robo captura as posições de dados absolutas dos filhos RecyclerView que são alvos das ações do script Robo como recyclerViewChildPosition . O script Robo também captura as posições de dados absolutas dos filhos AdapterView que são destinos das ações do script Robo como adapterViewChildPosition .

As ações nos filhos RecyclerView e AdapterView são executadas nas seguintes etapas:

  1. O teste Robo garante que o filho correspondente seja exibido na tela por meio de uma ação de posicionamento em seu RecyclerView ou AdapterView.

  2. O teste Robo realiza a ação gravada diretamente no elemento filho, pois já é exibido na tela.

Veja a seguir um exemplo de uma ação de clique em um filho 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
    }
  ]
}

Veja a seguir um exemplo de uma ação de clique em um filho 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
    }
  ]
}

Grave um script Robo no Android Studio e execute-o no Test Lab

Você pode criar um script Robo no Android Studio, que salva o script como um arquivo JSON. Em seguida, você pode fazer upload do arquivo JSON para o Firebase Test Lab com o aplicativo e executar o teste de acordo.

Quando você executa um teste Robo com um script anexado, o teste Robo primeiro percorre suas ações pré-criadas e, em seguida, explora o aplicativo como de costume.

Para criar um arquivo JSON de script Robo no Android Studio, siga as etapas em Gravar um script Robo usando o Test Lab no Android Studio .

Ações de script Robo

O seguinte atributo opcional comum se aplica a todas as ações:

  • description - ajuda a rastrear a execução desta ação de script Robo nas saídas de teste Robo.

Afirmação

Se a condição declarada for verdadeira, o script Robo continua para a próxima ação, que pode ser outra asserção. Caso contrário, a execução do script Robo será interrompida devido a uma asserção com falha e o resultado do teste será FAILED.

A tabela a seguir lista os atributos necessários:

Atributo Descrição
"eventType": "ASSERTION" --
contextDescriptor Descreve o contexto ou condição declarada.

Descritor de contexto

Um descritor de contexto define o contexto/condição usando um ou uma combinação dos seguintes atributos:

Atributo Descrição
"condition": "element_present" Verifica se um widget de interface do usuário que corresponde a elementDescriptors ou texto especificado por visionText está presente na tela.
"condition": "app_under_test_shown" Verifica se o aplicativo em teste está sendo executado em primeiro plano.
"condition": "default_launcher_shown" Verifica se a tela inicial de um dispositivo é exibida, o que significa que nenhum aplicativo está sendo executado em primeiro plano.
"condition": "non_roboscript_action_performed" Verifica se a última ação executada pelo teste Robo não é uma ação de script Robo.
negateCondition Se definido como true , nega a condition . Por exemplo, você pode usar esse atributo para verificar se um widget de interface do usuário NÃO está presente na tela ou se o aplicativo em teste NÃO está sendo executado em primeiro plano.
elementDescriptors Um ou mais descritores de elementos que identificam um widget de interface do usuário na tela. É usado em combinação com a condição element_present . Mutuamente exclusivo com visionText . Para obter mais informações, consulte Descritores de elemento .
visionText O texto na tela é detectado usando a API Optical Character Recognition (OCR). visionText é usado em combinação com a condição element_present . Mutuamente exclusivo com elementDescriptors .

Veja a seguir um exemplo de uma declaração de script Robo que verifica se o aplicativo em teste está em primeiro plano:

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

Veja a seguir um exemplo de uma declaração de script Robo que verifica se um widget de IU com o ID de recurso "com.google.samples.apps.topeka:id/done" está presente em uma tela:

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

Veja a seguir um exemplo de uma declaração de script Robo que verifica se "Settings" NÃO é detectada em uma tela usando OCR:

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

Clique

A tabela a seguir lista os atributos necessários:

Atributo Descrição
eventType Especifica o tipo de ação do script Robo.
"eventType": "VIEW_CLICKED" Clica no elemento de destino do aplicativo em teste.
"eventType": "SOFT_KEYBOARD_CLICK" Clica no elemento de destino do teclado virtual.
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK" Clica em elementos aleatórios do teclado virtual até maxNumberOfRuns vezes.
"eventType": "LIST_ITEM_CLICKED" Usado pelo gravador de script Robo no Android Studio para clicar em itens da lista.
elementDescriptors Identifica o widget de IU clicado usando a hierarquia de IU do Android. Mutuamente exclusivo com visionText .
visionText Identifica o elemento clicado usando OCR. Mutuamente exclusivo com elementDescriptors .
maxNumberOfRuns Especifica quantas vezes clicar em um elemento aleatório do teclado virtual, quando eventType for SOFT_KEYBOARD_RANDOM_CLICK . O valor padrão é 1 .

Veja a seguir um exemplo de ação de script Robo que clica em um botão com o ID do recurso "com.google.samples.apps.topeka:id/done" :

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

Veja a seguir um exemplo de ação de script Robo que clica em "Privacy Policy" detectada em uma tela usando OCR:

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

Veja a seguir um exemplo de uma ação de script Robo que clica em um elemento de teclado virtual com uma descrição de conteúdo "Emoji button" :

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

Veja a seguir um exemplo de uma ação de script Robo que clica em elementos aleatórios do teclado virtual até cinco vezes:

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

Desativar teclado virtual

A tabela a seguir lista os atributos necessários:

Atributo Descrição
"eventType": "DISABLE_KEYBOARD" --

Veja a seguir um exemplo de uma ação de script Robo que desativa o teclado virtual:

{
  "eventType": "DISABLE_KEYBOARD"
}

Execute o comando shell adb

A tabela a seguir lista os atributos necessários:

Atributo Descrição
"eventType": "ADB_SHELL_COMMAND" --
command O comando shell do Android Debug Bridge (adb) a ser executado.

Veja a seguir um exemplo de uma ação de script Robo que limpa os dados do usuário do aplicativo em teste:

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

Conceder permissões

Essa ação é gravada pelo gravador de script Robo no Android Studio para compatibilidade com versões anteriores com o Espresso Test Recorder . O teste Robo concede todas as permissões ao aplicativo em teste no início de cada rastreamento e, portanto, essa ação não é operacional. NÃO use esta ação em seus scripts Robo.

A tabela a seguir lista os atributos necessários:

Atributo Descrição
"eventType": "PERMISSIONS_REQUEST" --

Entrada de texto

A tabela a seguir lista os atributos necessários:

Atributo Descrição
eventType Especifica o tipo de ação do script Robo.
"eventType": "VIEW_TEXT_CHANGED" Insere o texto fornecido no widget de interface do usuário de destino.
"eventType": "ENTER_TEXT" insere o texto fornecido no widget de interface do usuário de destino e, em seguida, envia um evento KEYCODE_ENTER para esse widget de interface do usuário.
elementDescriptors Identifica o widget de IU de destino usando a hierarquia de IU do Android.
replacementText O texto a ser inserido no widget de interface do usuário de destino.

Veja a seguir um exemplo de uma ação de script Robo que insere "John" em um widget de IU com o ID do recurso "com.google.samples.apps.topeka:id/first_name" :

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

Clique longo

A tabela a seguir lista os atributos necessários:

Atributo Descrição
"eventType": "VIEW_LONG_CLICKED" --
elementDescriptors Identifica o widget de IU de destino usando a hierarquia de IU do Android.

O seguinte atributo é opcional:

  • delayTime - especifica quanto tempo deve durar a pressão de um clique longo, em milissegundos.

Veja a seguir um exemplo de uma ação de script Robo que executa um clique de cinco segundos em um widget de interface do usuário com a descrição de conteúdo "Avatar 8" :

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

Execute um gesto de um ponto

A tabela a seguir lista os atributos necessários:

Atributo Descrição
"eventType": "ONE_POINT_GESTURE" --
coordinates Duas coordenadas para um gesto de um ponto, formatado como "(x1,y1)->(x2,y2)" como porcentagens ou pixels.

O seguinte atributo é opcional:

  • dragAndDrop - se definido como true , o gesto de um ponto executa uma ação de arrastar e soltar. Por padrão, é false .

Veja a seguir um exemplo de uma ação de gesto de um ponto do script Robo que executa um deslize para baixo:

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

Execute um gesto de dois pontos

A tabela a seguir lista os atributos necessários:

Atributo Descrição
"eventType": "TWO_POINT_GESTURE" --
coordinates Quatro coordenadas para um gesto de dois pontos, formatado como "(x1,y1)->(x2,y2),(x3,y3)->(x4,y4)" como porcentagens ou pixels.

Veja a seguir um exemplo de uma ação de script Robo que executa um gesto de pinça:

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

Executar uma ação de IME

Essa ação pressiona o botão de ação atual, por exemplo, próximo, concluído e pesquisa, no Editor de método de entrada (IME) para o widget de interface do usuário de destino especificado.

A tabela a seguir lista os atributos necessários:

Atributo Descrição
"eventType": "PRESSED_EDITOR_ACTION" --
elementDescriptors Identifica o widget de IU de destino usando a hierarquia de IU do Android.

Veja a seguir um exemplo de uma ação de script Robo que executa uma ação IME em um widget de IU com o ID do recurso "com.google.samples.apps.topeka:id/first_name" :

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

Pressione para trás

A tabela a seguir lista os atributos necessários:

Atributo Descrição
eventType Especifica o tipo de ação do script Robo.
"eventType": "PRESSED_BACK" Envia um evento KEYCODE_BACK para o dispositivo.
"eventType": "PRESSED_BACK_EMULATOR_28" Usado pelo gravador de script Robo no Android Studio para pressionar a API 28 dos emuladores.

Veja a seguir um exemplo de uma ação de script Robo que pressiona de volta:

{
  "eventType": "PRESSED_BACK"
}

Pressione home

Esta ação envia um evento KEYCODE_HOME para o dispositivo.

A tabela a seguir lista os atributos necessários:

Atributo Descrição
"eventType": "GO_HOME" --

O seguinte é um exemplo de uma ação de script Robo que pressiona home:

{
  "eventType": "GO_HOME"
}

Rolar um elemento para exibição

Essa ação faz o Robo test rolar para frente o widget da interface do usuário que corresponde aos elementDescriptors especificados até que o widget da interface do usuário que corresponda aos childElementDescriptors especificados esteja presente na tela ou o widget rolado não possa mais ser rolado ou o número máximo de 50 rolagens seja atingido.

A tabela a seguir lista os atributos necessários:

Atributo Descrição
"eventType": "ELEMENT_SCROLL_INTO_VIEW" --
elementDescriptors Identifica o widget de IU rolado usando a hierarquia de IU do Android.
childElementDescriptors Identifica o widget de IU para rolar usando a hierarquia de IU do Android.

Veja a seguir um exemplo de uma ação de script Robo que rola o widget da interface do usuário com o ID do recurso "my.app.package:id/scrollable_card_container" até que o widget da interface do usuário com o texto "Orange" esteja presente na tela (ou nenhuma outra rolagem pode ser executado, ou o número máximo de 50 pergaminhos é atingido):

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

Deslizar

A tabela a seguir lista os atributos necessários:

Atributo Descrição
"eventType": "VIEW_SWIPED" --
swipeDirection Especifica a direção do deslize:
  • Left
  • Right
  • Up
  • Down
  • Forward - para Down ou para a Right , dependendo da capacidade de rolagem vertical ou horizontal do widget de interface do usuário de destino.
  • Para Backward - para Up ou para a Left , dependendo da capacidade de rolagem vertical ou horizontal do widget de interface do usuário de destino.
elementDescriptors Identifica o widget de IU de destino usando a hierarquia de IU do Android.

Veja a seguir um exemplo de uma ação de script Robo que desliza para cima um widget de IU com o ID do recurso "my.app.package:id/custom_content" :

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

Tirar captura de tela

A tabela a seguir lista os atributos necessários:

Atributo Descrição
"eventType": "TAKE_SCREENSHOT" --
screenshotName Especifica o nome do arquivo de captura de tela.

Veja a seguir um exemplo de uma ação de script Robo que faz uma captura de tela:

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

Toque em um ponto na tela

A tabela a seguir lista os atributos necessários:

Atributo Descrição
"eventType": "POINT_TAP" --
pointTapXCoordinate A coordenada X do pixel do ponto tocado. Mutuamente exclusivo com pointTapXPercent e pointTapYPercent .
pointTapYCoordinate A coordenada do pixel Y do ponto tocado. Mutuamente exclusivo com pointTapXPercent e pointTapYPercent .
pointTapXPercent A coordenada X percentual do ponto rosqueado. Mutuamente exclusivo com pointTapXCoordinate e pointTapYCoordinate .
pointTapYPercent A coordenada Y percentual do ponto rosqueado. Mutuamente exclusivo com pointTapXCoordinate e pointTapYCoordinate .

Veja a seguir um exemplo de uma ação de script Robo que toca no meio de uma tela:

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

Toque em um ponto dentro de um elemento

A tabela a seguir lista os atributos necessários:

Atributo Descrição
"eventType": "POINT_TAP_ELEMENT" --
pointTapXPercent A coordenada X percentual dentro do elemento de destino.
pointTapYPercent A coordenada Y percentual dentro do elemento de destino.
elementDescriptors Identifica o widget de IU de destino usando a hierarquia de IU do Android.

Veja a seguir um exemplo de uma ação de script Robo que move o controle deslizante de uma barra de busca para a direita:

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

Encerrar rastreamento

Esta ação interrompe o teste Robo.

A tabela a seguir lista os atributos necessários:

Atributo Descrição
"eventType": "TERMINATE_CRAWL" --

Veja a seguir um exemplo de uma ação de script Robo que interrompe um teste Robo:

{
  "eventType": "TERMINATE_CRAWL"
}

Espere

A tabela a seguir lista os atributos necessários:

Atributo Descrição
"eventType": "DELAYED_MESSAGE_POSTED" --
delayTime Especifica quanto tempo esperar, em milissegundos.

Veja a seguir um exemplo de uma ação de script Robo que aguarda três segundos:

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

Aguarde um elemento

Esta ação faz com que o teste Robo espere que um elemento apareça na tela até o tempo limite especificado.

A tabela a seguir lista os atributos necessários:

Atributo Descrição
"eventType": "WAIT_FOR_ELEMENT" --
delayTime Especifica o tempo limite de espera, em milissegundos.
elementDescriptors Identifica o widget de IU esperado usando a hierarquia de IU do Android.

Veja a seguir um exemplo de uma ação de script Robo que aguarda até 30 segundos para que um widget de IU com o ID de recurso "my.app.package:id/confirmation_button" apareça na tela:

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

Próximos passos