Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Guida di riferimento agli script Robo

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questo documento fornisce informazioni di riferimento sugli script Robo tra cui struttura, capacità, utilizzo, registrazione e azioni. Gli script Robo sono test che automatizzano le attività di controllo qualità manuale (QA) per le app mobili e consentono l'integrazione continua (CI) e le strategie di test pre-lancio. Uno script Robo è un file JSON che descrive una sequenza di interfaccia utente (UI) e altre azioni.

Puoi creare uno script Robo nei seguenti modi:

  • Usa la funzione di registrazione degli script Robo.
  • Crea manualmente lo script Robo.
  • Registra lo script Robo e poi modificalo manualmente.

Per ulteriori informazioni sull'utilizzo degli script Robo, consulta Eseguire uno script Robo .

Lo script Robo viene fornito per il test di Robo insieme ad altri input come l'app Android Application Package (APK) sotto test.

Quello che segue è un esempio di uno script Robo che registra un utente in un'app:

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

Struttura

Ogni azione in uno script Robo è rappresentata come un insieme di una o più coppie attributo-valore, descritte nella tabella seguente:

Attributo Descrizione
eventType Specifica il tipo di azione, ad esempio clic, modifica del testo e così via. Necessario per ogni azione.
elementDescriptors Descrittori che identificano un widget dell'interfaccia utente. Necessario per tutte le azioni che hanno un widget dell'interfaccia utente di destinazione, come fare clic su un pulsante particolare.
optional Se impostata su true , questa azione viene ignorata quando non può essere eseguita. Ad esempio, questa azione viene saltata quando non riesce a trovare il widget dell'interfaccia utente di destinazione su uno schermo, senza fallire lo script Robo contenente. Per impostazione predefinita, il valore è false .
replacementText Il testo da inserire nel widget dell'interfaccia utente di destinazione. Necessario per le azioni di modifica del testo.
swipeDirection Specifica la direzione dello scorrimento. Necessario per le azioni di scorrimento.
delayTime Specifica quanto tempo attendere, in millisecondi. Necessario per le azioni di attesa.
pointTapXCoordinate e pointTapYCoordinate Le coordinate X e Y del pixel del punto toccato. Mutuamente esclusivi con pointTapXPercent e pointTapYPercent . Necessario per le azioni di tocco del punto.
pointTapXPercent e pointTapYPercent Le coordinate X e Y percentuali del punto toccato. Mutuamente esclusivo con pointTapXCoordinate e pointTapYCoordinate . Necessario per le azioni di tocco del punto.

Quello che segue è un esempio di uno script Robo con due azioni senza widget dell'interfaccia utente di destinazione, il che significa che queste azioni non operano su un widget dell'interfaccia utente specifico:

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

Descrittori di elementi

Un descrittore di elemento identifica un widget dell'interfaccia utente utilizzando uno o più dei seguenti attributi di identificazione:

Attributo Descrizione
className
ancestorClassName Nome della classe dell'antenato della gerarchia dell'interfaccia utente dell'elemento. Un predecessore è uno qualsiasi dei nodi principali nella gerarchia dell'interfaccia utente dell'elemento, incluso l'elemento stesso.
resourceId
resourceIdRegex Espressione regolare Java in modo che corrisponda a resourceId .
contentDescription
contentDescriptionRegex Espressione regolare Java che corrisponda a contentDescription .
text (che appare sullo schermo)
textRegex Espressione regolare Java per abbinare il text .
groupViewChildPosition , recyclerViewChildPosition o adapterViewChildPosition Rappresenta la posizione figlio di un widget dell'interfaccia utente a seconda del tipo di widget padre.

Spesso questi attributi non sono definiti, ad esempio un pulsante potrebbe non avere testo e descrizione del contenuto. Anche se sono presenti alcuni valori di attributo, potrebbero non essere univoci in una determinata schermata dell'app (incluso resourceId ).

Ad esempio, la differenziazione tra gli elementi di un elenco è generalmente possibile solo utilizzando le diverse posizioni figlie all'interno del widget padre. Ciò significa che l'utilizzo di un solo descrittore di elemento per identificare un widget dell'interfaccia utente è generalmente insufficiente. Pertanto, l'attributo elementDescriptors di un'azione contiene una sequenza di descrittori di elementi ordinati in modo tale che il primo corrisponda al widget dell'interfaccia utente di destinazione, il secondo corrisponda al widget padre del widget dell'interfaccia utente di destinazione e così via. Il widget dell'interfaccia utente di destinazione di un'azione viene abbinato quando tutti i suoi descrittori di elemento corrispondono alla sottogerarchia del widget dell'interfaccia utente corrispondente.

Quello che segue è un esempio di uno script Robo con una modifica del testo e azioni di clic, che richiedono entrambi di identificare il widget dell'interfaccia utente di destinazione utilizzando i descrittori di elementi forniti:

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

Opzioni di esecuzione

Puoi facoltativamente anteporre all'elenco delle azioni in uno script Robo un oggetto JSON che specifica le opzioni di esecuzione per quello script Robo. Questa intestazione di configurazione inizia con la parola chiave roboscript seguita da una rappresentazione JSON delle opzioni di esecuzione desiderate.

Gli script Robo supportano le seguenti opzioni di esecuzione:

  • executionMode - opzioni di esecuzione applicate quando uno script Robo è in esecuzione:
  • postscript - opzioni di esecuzione applicate dopo il completamento di uno script Robo:
    • terminate - se impostato su true , il test Robo interrompe la scansione dopo il completamento dello script Robo.

Quello che segue è un esempio di uno script Robo eseguito in modalità strict che rimane inattivo per tre secondi, dopodiché la scansione si interrompe:

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

Parametri del modello

Un parametro modello è un segnaposto in uno script Robo che viene sostituito con il valore effettivo quando Robo test carica lo script Robo per l'esecuzione. I parametri del modello sono preceduti da un doppio trattino basso seguito da un segno di percentuale e sono postfissi da un segno di percentuale seguito da un doppio trattino di sottolineatura.

Gli script Robo supportano il seguente parametro del modello:

  • __%APP_PACKAGE_NAME%__ - il nome del pacchetto dell'app sottoposta a test.

Quello che segue è un esempio di uno script Robo che interrompe il processo di test dell'app:

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

Commenti

Uno script Robo può contenere righe di commento, che sono righe che iniziano con # o // .

Quello che segue è un esempio di uno script Robo con un paio di commenti:

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

Capacità

Per impostazione predefinita, finché tutte le azioni di uno script Robo non sono state completate (o almeno tentate), lo script Robo rimane attivo. Robo test continua a provare a far corrispondere un'azione di script Robo ogni volta che seleziona un'azione da eseguire. Lo script Robo utilizza le seguenti tecniche per aumentare la robustezza:

Tecnica Descrizione
Abbinamento parziale Se l'azione dello script Robo corrente non può essere completamente soddisfatta, i criteri di corrispondenza vengono allentati e la corrispondenza viene ripetuta. La corrispondenza parziale non considera il descrittore dell'elemento più esterno mentre corrisponde al widget dell'interfaccia utente di destinazione di un'azione di script Robo.

Se la corrispondenza parziale ha esito positivo, l'azione dello script Robo corrispondente viene eseguita come di consueto. Questa tecnica supporta scenari in cui la struttura dell'app cambia, ad esempio tra le versioni dell'app, quando gli elementi dello schermo vengono riorganizzati.

Salta l'azione corrente Se l'azione di script Robo corrente non può essere abbinata in tutto o in parte, Robo cerca di abbinare l'azione di script Robo successiva. Se l'azione successiva corrisponde in tutto o in parte, il test Robo salta (e non torna mai) all'azione dello script Robo corrente ed esegue quella successiva.

Questa tecnica supporta scenari in cui il comportamento dell'app cambia tra le versioni o è instabile, ad esempio, quando una finestra di dialogo intermittente potrebbe apparire su schermi diversi durante la registrazione rispetto alla riproduzione di uno script Robo.

Sospendere Se né le azioni dello script Robo attuali né quelle successive possono essere abbinate in tutto o in parte, lo script Robo viene temporaneamente sospeso e il test Robo sceglie un'azione da eseguire utilizzando le sue altre strategie. Dopo che questa azione è stata completata, il test Robo riprende l'esecuzione dello script Robo.

Finché le azioni dello script Robo attuali o successive non possono essere abbinate, lo script Robo rimane sospeso per qualsiasi numero di azioni. Pertanto, gli script Robo non devono necessariamente essere un prologo per un test Robo e puoi alternare le azioni di script Robo con le azioni di test Robo standard. Questa tecnica supporta scenari in cui il comportamento dell'app è instabile o quando le modifiche tra le versioni dell'app sono sufficientemente grandi da richiedere a Robo test di "riempire le lacune" con le sue azioni standard.

Supporto RecyclerView e AdapterView

I widget secondari di RecyclerView e AdapterView vengono caricati dinamicamente e potrebbero essere visualizzati a molti passaggi dalla schermata corrente. Poiché le dimensioni di uno schermo e il numero di passaggi necessari per raggiungere questo bambino sono diversi per i diversi fattori di forma del dispositivo, è molto più affidabile fare affidamento sulla posizione dei dati del bambino, che è assoluta. È un approccio meno affidabile fare affidamento sul numero di passaggi necessari per portare questo bambino sullo schermo e quindi utilizzare la sua posizione sullo schermo.

Pertanto, lo script Robo acquisisce le posizioni dei dati assolute dei figli RecyclerView che sono obiettivi delle azioni dello script Robo come recyclerViewChildPosition . Lo script Robo acquisisce anche le posizioni dei dati assolute dei figli AdapterView che sono obiettivi delle azioni dello script Robo come adapterViewChildPosition .

Le azioni sui figli RecyclerView e AdapterView vengono eseguite nei passaggi seguenti:

  1. Il test robotico assicura che il bambino corrispondente venga visualizzato sullo schermo attraverso un'azione di posizionamento sul suo RecyclerView o AdapterView contenente.

  2. Robo test esegue l'azione registrata direttamente sull'elemento figlio, poiché è già visualizzata sullo schermo.

Di seguito è riportato un esempio di un'azione di clic su un figlio 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
    }
  ]
}

Quello che segue è un esempio di un'azione di clic su un figlio 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
    }
  ]
}

Registra uno script Robo in Android Studio ed eseguilo in Test Lab

Puoi creare uno script Robo in Android Studio, che salva lo script come file JSON. Puoi quindi caricare il file JSON su Firebase Test Lab con l'applicazione ed eseguire il test di conseguenza.

Quando esegui un test Robo con uno script allegato, Robo verifica prima i passaggi attraverso le tue azioni predefinite, quindi esplora l'app come al solito.

Per creare un file JSON di script Robo in Android Studio, segui i passaggi in Registrare uno script Robo utilizzando Test Lab in Android Studio .

Azioni di script Robo

Il seguente attributo facoltativo comune si applica a tutte le azioni:

  • description - aiuta a tenere traccia dell'esecuzione di questa azione dello script Robo negli output di test di Robo.

Asserzione

Se la condizione asserita è vera, lo script Robo continua con l'azione successiva, che potrebbe essere un'altra asserzione. In caso contrario, l'esecuzione dello script Robo viene interrotta a causa di un'asserzione non riuscita e il risultato del test è FALLITO.

La tabella seguente elenca gli attributi obbligatori:

Attributo Descrizione
"eventType": "ASSERTION" --
contextDescriptor Descrive il contesto o la condizione dichiarata.

Descrittore di contesto

Un descrittore di contesto definisce il contesto/la condizione utilizzando uno o una combinazione dei seguenti attributi:

Attributo Descrizione
"condition": "element_present" Verifica che sullo schermo sia presente un widget dell'interfaccia utente che corrisponde elementDescriptors o al testo specificato da visionText .
"condition": "app_under_test_shown" Verifica che l'app sottoposta a test sia in esecuzione in primo piano.
"condition": "default_launcher_shown" Verifica che venga visualizzata la schermata iniziale di un dispositivo, il che significa che nessuna app è in esecuzione in primo piano.
"condition": "non_roboscript_action_performed" Verifica che l'ultima azione eseguita da Robo test non sia un'azione di script Robo.
negateCondition Se impostato su true , nega la condition . Ad esempio, puoi utilizzare questo attributo per verificare se un widget dell'interfaccia utente NON è presente sullo schermo o che l'app in prova NON è in esecuzione in primo piano.
elementDescriptors Uno o più descrittori di elementi che identificano un widget dell'interfaccia utente sullo schermo. Viene utilizzato in combinazione con la condizione element_present . Mutuamente esclusivo con visionText . Per ulteriori informazioni, vedere descrittori di elementi .
visionText Il testo sullo schermo viene rilevato utilizzando l'API OCR (Optical Character Recognition). visionText viene utilizzato in combinazione con la condizione element_present . Si escludono a vicenda con elementDescriptors .

Quello che segue è un esempio di un'asserzione di script Robo che verifica che l'app-under-test sia in primo piano:

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

Quello che segue è un esempio di un'asserzione di script Robo che verifica che un widget dell'interfaccia utente con l'ID risorsa "com.google.samples.apps.topeka:id/done" sia presente su uno schermo:

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

Quello che segue è un esempio di un'asserzione di script Robo che controlla che "Settings" NON venga rilevato su uno schermo utilizzando l'OCR:

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

Clic

La tabella seguente elenca gli attributi obbligatori:

Attributo Descrizione
eventType Specifica il tipo di azione dello script Robo.
"eventType": "VIEW_CLICKED" Fa clic sull'elemento di destinazione dell'app sottoposta a test.
"eventType": "SOFT_KEYBOARD_CLICK" Fa clic sull'elemento di destinazione della tastiera virtuale.
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK" Fa clic su elementi casuali della tastiera virtuale fino a maxNumberOfRuns volte.
"eventType": "LIST_ITEM_CLICKED" Utilizzato dal registratore di script Robo in Android Studio per fare clic sugli elementi dell'elenco.
elementDescriptors Identifica il widget dell'interfaccia utente su cui si è fatto clic utilizzando la gerarchia dell'interfaccia utente Android. Mutuamente esclusivo con visionText .
visionText Identifica l'elemento cliccato usando l'OCR. Si escludono a vicenda con elementDescriptors .
maxNumberOfRuns Specifica quante volte fare clic su un elemento casuale della tastiera virtuale, quando eventType è SOFT_KEYBOARD_RANDOM_CLICK . Il valore predefinito è 1 .

Quello che segue è un esempio di un'azione di script Robo che fa clic su un pulsante con l'ID risorsa "com.google.samples.apps.topeka:id/done" :

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

Quello che segue è un esempio di un'azione di script Robo che fa clic su "Privacy Policy" rilevata su uno schermo utilizzando l'OCR:

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

Quello che segue è un esempio di un'azione di script Robo che fa clic su un elemento della tastiera virtuale con una descrizione del contenuto "Emoji button" :

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

Quello che segue è un esempio di un'azione di script Robo che fa clic su elementi casuali della tastiera virtuale fino a cinque volte:

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

Disabilita la tastiera software

La tabella seguente elenca gli attributi obbligatori:

Attributo Descrizione
"eventType": "DISABLE_KEYBOARD" --

Quello che segue è un esempio di un'azione di script Robo che disabilita la tastiera software:

{
  "eventType": "DISABLE_KEYBOARD"
}

Esegui il comando adb shell

La tabella seguente elenca gli attributi obbligatori:

Attributo Descrizione
"eventType": "ADB_SHELL_COMMAND" --
command Il comando della shell Android Debug Bridge (adb) da eseguire.

Quello che segue è un esempio di un'azione di script Robo che cancella i dati utente dell'app in fase di test:

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

Concedi autorizzazioni

Questa azione viene registrata dal registratore di script Robo in Android Studio per la compatibilità con le versioni precedenti di Espresso Test Recorder . Robo test concede tutte le autorizzazioni all'app sottoposta a test all'inizio di ogni scansione e, pertanto, questa azione non è operativa. NON utilizzare questa azione nei tuoi script Robo.

La tabella seguente elenca gli attributi obbligatori:

Attributo Descrizione
"eventType": "PERMISSIONS_REQUEST" --

Testo di input

La tabella seguente elenca gli attributi obbligatori:

Attributo Descrizione
eventType Specifica il tipo di azione dello script Robo.
"eventType": "VIEW_TEXT_CHANGED" Immette il testo specificato nel widget dell'interfaccia utente di destinazione.
"eventType": "ENTER_TEXT" inserisce il testo specificato nel widget dell'interfaccia utente di destinazione e quindi invia un evento KEYCODE_ENTER a questo widget dell'interfaccia utente.
elementDescriptors Identifica il widget dell'interfaccia utente di destinazione utilizzando la gerarchia dell'interfaccia utente Android.
replacementText Il testo da inserire nel widget dell'interfaccia utente di destinazione.

Quello che segue è un esempio di un'azione di script Robo che inserisce "John" in un widget dell'interfaccia utente con l'ID risorsa "com.google.samples.apps.topeka:id/first_name" :

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

Clic lungo

La tabella seguente elenca gli attributi obbligatori:

Attributo Descrizione
"eventType": "VIEW_LONG_CLICKED" --
elementDescriptors Identifica il widget dell'interfaccia utente di destinazione utilizzando la gerarchia dell'interfaccia utente Android.

Il seguente attributo è facoltativo:

  • delayTime : specifica la durata della pressione di un clic lungo, in millisecondi.

Quello che segue è un esempio di un'azione di script Robo che esegue un clic di cinque secondi su un widget dell'interfaccia utente con la descrizione del contenuto "Avatar 8" :

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

Esegui un gesto in un punto

La tabella seguente elenca gli attributi obbligatori:

Attributo Descrizione
"eventType": "ONE_POINT_GESTURE" --
coordinates Due coordinate per un gesto a un punto, formattato come "(x1,y1)->(x2,y2)" come percentuali o pixel.

Il seguente attributo è facoltativo:

  • dragAndDrop - se impostato su true , il gesto a un punto esegue un'azione di trascinamento della selezione. Per impostazione predefinita, è false .

Quello che segue è un esempio di un'azione gestuale in un punto di Robo script che esegue uno scorrimento verso il basso:

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

Esegui un gesto in due punti

La tabella seguente elenca gli attributi obbligatori:

Attributo Descrizione
"eventType": "TWO_POINT_GESTURE" --
coordinates Quattro coordinate per un gesto a due punti, formattato come "(x1,y1)->(x2,y2),(x3,y3)->(x4,y4)" come percentuali o pixel.

Quello che segue è un esempio di un'azione di script Robo che esegue un gesto di chiusura:

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

Eseguire un'azione IME

Questa azione preme il pulsante dell'azione corrente, ad esempio Avanti, Fatto e Cerca, nell'Input Method Editor (IME) per il widget dell'interfaccia utente di destinazione specificato.

La tabella seguente elenca gli attributi obbligatori:

Attributo Descrizione
"eventType": "PRESSED_EDITOR_ACTION" --
elementDescriptors Identifica il widget dell'interfaccia utente di destinazione utilizzando la gerarchia dell'interfaccia utente Android.

Quello che segue è un esempio di un'azione di script Robo che esegue un'azione IME su un widget dell'interfaccia utente con l'ID risorsa "com.google.samples.apps.topeka:id/first_name" :

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

Premi indietro

La tabella seguente elenca gli attributi obbligatori:

Attributo Descrizione
eventType Specifica il tipo di azione dello script Robo.
"eventType": "PRESSED_BACK" Invia un evento KEYCODE_BACK al dispositivo.
"eventType": "PRESSED_BACK_EMULATOR_28" Utilizzato dal registratore di script Robo in Android Studio per riattivare gli emulatori API 28.

Quello che segue è un esempio di un'azione di script Robo che preme indietro:

{
  "eventType": "PRESSED_BACK"
}

Premi a casa

Questa azione invia un evento KEYCODE_HOME al dispositivo.

La tabella seguente elenca gli attributi obbligatori:

Attributo Descrizione
"eventType": "GO_HOME" --

Quello che segue è un esempio di un'azione di script Robo che preme home:

{
  "eventType": "GO_HOME"
}

Scorri un elemento in vista

Questa azione consente a Robo test di scorrere in avanti il ​​widget dell'interfaccia utente che corrisponde agli elementDescriptors specificati fino a quando il widget dell'interfaccia utente che corrisponde ai childElementDescriptors specificati non è presente sullo schermo, oppure non è più possibile scorrere il widget scorrevole o viene raggiunto il numero massimo di 50 pergamene.

La tabella seguente elenca gli attributi obbligatori:

Attributo Descrizione
"eventType": "ELEMENT_SCROLL_INTO_VIEW" --
elementDescriptors Identifica il widget dell'interfaccia utente scorrevole utilizzando la gerarchia dell'interfaccia utente Android.
childElementDescriptors Identifica il widget dell'interfaccia utente su cui scorrere utilizzando la gerarchia dell'interfaccia utente Android.

Quello che segue è un esempio di un'azione di script Robo che scorre il widget dell'interfaccia utente con l'ID risorsa "my.app.package:id/scrollable_card_container" fino a quando il widget dell'interfaccia utente con il testo "Orange" è presente sullo schermo (o non è possibile da eseguire, oppure si raggiunge il numero massimo di 50 scroll):

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

Scorri

La tabella seguente elenca gli attributi obbligatori:

Attributo Descrizione
"eventType": "VIEW_SWIPED" --
swipeDirection Specifica la direzione dello scorrimento:
  • Left
  • Right
  • Up
  • Down
  • Forward : verso il Down o verso Right a seconda della possibilità di scorrimento verticale o orizzontale del widget dell'interfaccia utente di destinazione.
  • Backward : in Up o a Left a seconda della possibilità di scorrimento verticale o orizzontale del widget dell'interfaccia utente di destinazione.
elementDescriptors Identifica il widget dell'interfaccia utente di destinazione utilizzando la gerarchia dell'interfaccia utente Android.

Quello che segue è un esempio di un'azione di script Robo che scorre verso l'alto un widget dell'interfaccia utente con l'ID risorsa "my.app.package:id/custom_content" :

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

Fai uno screenshot

La tabella seguente elenca gli attributi obbligatori:

Attributo Descrizione
"eventType": "TAKE_SCREENSHOT" --
screenshotName Specifica il nome del file dello screenshot.

Quello che segue è un esempio di un'azione di script Robo che acquisisce uno screenshot:

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

Tocca un punto sullo schermo

La tabella seguente elenca gli attributi obbligatori:

Attributo Descrizione
"eventType": "POINT_TAP" --
pointTapXCoordinate La coordinata pixel X del punto toccato. Mutuamente esclusivi con pointTapXPercent e pointTapYPercent .
pointTapYCoordinate La coordinata Y del pixel del punto toccato. Mutuamente esclusivi con pointTapXPercent e pointTapYPercent .
pointTapXPercent La coordinata percentuale X del punto toccato. Mutuamente esclusivo con pointTapXCoordinate e pointTapYCoordinate .
pointTapYPercent La coordinata Y percentuale del punto toccato. Mutuamente esclusivo con pointTapXCoordinate e pointTapYCoordinate .

Quello che segue è un esempio di un'azione di script Robo che tocca nel mezzo di uno schermo:

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

Tocca un punto all'interno di un elemento

La tabella seguente elenca gli attributi obbligatori:

Attributo Descrizione
"eventType": "POINT_TAP_ELEMENT" --
pointTapXPercent La coordinata X percentuale all'interno dell'elemento di destinazione.
pointTapYPercent La coordinata Y percentuale all'interno dell'elemento di destinazione.
elementDescriptors Identifica il widget dell'interfaccia utente di destinazione utilizzando la gerarchia dell'interfaccia utente Android.

Quello che segue è un esempio di un'azione di script Robo che sposta il cursore di una barra di ricerca a destra:

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

Termina la scansione

Questa azione interrompe il test Robo.

La tabella seguente elenca gli attributi obbligatori:

Attributo Descrizione
"eventType": "TERMINATE_CRAWL" --

Quello che segue è un esempio di un'azione di script Robo che interrompe un test Robo:

{
  "eventType": "TERMINATE_CRAWL"
}

Attesa

La tabella seguente elenca gli attributi obbligatori:

Attributo Descrizione
"eventType": "DELAYED_MESSAGE_POSTED" --
delayTime Specifica quanto tempo attendere, in millisecondi.

Quello che segue è un esempio di un'azione di script Robo che attende tre secondi:

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

Aspetta un elemento

Questa azione fa sì che Robo test aspetti che un elemento appaia sullo schermo fino al timeout specificato.

La tabella seguente elenca gli attributi obbligatori:

Attributo Descrizione
"eventType": "WAIT_FOR_ELEMENT" --
delayTime Specifica il timeout di attesa, in millisecondi.
elementDescriptors Identifica il widget dell'interfaccia utente atteso utilizzando la gerarchia dell'interfaccia utente Android.

Quello che segue è un esempio di un'azione di script Robo che attende fino a 30 secondi prima che un widget dell'interfaccia utente con l'ID risorsa "my.app.package:id/confirmation_button" appaia sullo schermo:

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

Prossimi passi