Robo komut dosyaları referans kılavuzu

Bu belgede, yapı, özellikler, kullanım, kayıt ve işlemler dahil olmak üzere Robo komut dosyaları hakkında referans bilgiler sağlanmaktadır. Robo komut dosyaları, mobil uygulamalar için manuel kalite güvencesi (QA) görevlerini otomatikleştiren ve sürekli entegrasyon (CI) ve lansman öncesi test stratejilerine imkan tanıyan testlerdir. Robo komut dosyası, bir kullanıcı arayüzü (UI) dizisini ve diğer işlemleri açıklayan bir JSON dosyasıdır.

Robo komut dosyasını aşağıdaki şekillerde oluşturabilirsiniz:

  • Robo komut dosyası kayıt özelliğini kullanın. (Yalnızca Android)

  • Robo komut dosyasını manuel olarak oluşturun. (Android ve iOS+)

  • Robo komut dosyasını kaydedip manuel olarak düzenleyin. (Yalnızca Android)

Robo komut dosyalarını kullanma hakkında daha fazla bilgi edinmek için Robo komut dosyası çalıştırma bölümüne bakın.

Giriş

Robo komut dosyası, "uygulama altında test edilen Android uygulama paketi" (APK) gibi diğer girişlerin yanı sıra Robo test'e sağlanır.

Aşağıda, kullanıcıyı bir uygulamada oturum açan ve "under-test" çalıştırıldığında tetiklenen bir Robo komut dosyası örneği verilmiştir:

[
  {
    "crawlStage": "crawl",
    "contextDescriptor": {
      "condition": "app_under_test_shown"
    },
    "actions": [
      {
        "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"
          }
        ]
      }
    ]
  }
]

Bir dosyada tek bir Robo komut dosyası varsa ve varsayılan app_under_test_shown tetikleme koşuluna sahipse yukarıdaki örnekte olduğu gibi, Robo komut dosyasını daha basit bir biçimde (tıpkı eylemlerinin ardından olduğu gibi) dosyada belirtebilirsiniz:

[
  {
    "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 komut dosyaları için iOS+ desteği

iOS+ için Robo (Beta), Robo komut dosyaları için sınırlı desteğe sahiptir. iOS+ için Robo komut dosyası söz dizimi, Android söz dizimine benzerdir ve desteklenen iOS+ özellikleri Android'deki muadillerine benzer şekilde davranır.

Aşağıdaki işlemler iOS+'ta desteklenir:

  • Onaylama
  • Tıklama
  • Uzun tıklama
  • Kaydırma
  • Tüm öğeleri yoksay
  • Bekle
  • Ekran görüntüsü al
  • Taramayı sonlandır

Öğe tanımlayıcılarındaki aşağıdaki tanımlayıcı özellikler iOS+'ta desteklenir:

  • Sınıf adı
  • Üst sınıf adı
  • İçerik açıklaması (ve normal ifade)
  • Metin (ve normal ifade)

Bağlam tanımlayıcılarında aşağıdaki tetikleme koşulları iOS+'ta desteklenir:

  • Test altındaki uygulama gösteriliyor
  • Öğe mevcut
  • Robo komut dosyası olmayan işlem gerçekleştirildi

Yapı

Robo komut dosyalarının Robo'nun komut dosyasını nasıl yürüttüğünü açıklayan birkaç özelliği vardır. Bu özelliklerin çoğu önceden tanımlanmış varsayılan değerlerle isteğe bağlıdır:

Özellik Açıklama
id Tarama çıkışlarında bu Robo komut dosyasının izlenmesine yardımcı olan bir tam sayı. Robo'nun kendi id'leri olan yerleşik Robo komut dosyaları vardır. Farklı Robo komut dosyalarındaki aynı id, bunların davranışını etkilemese de, tarama çıkışlarında işlemlerin bu Robo komut dosyalarından ayırt edilmesi zor olabilir. Çakışmaları önlemek için Robo komut dosyalarınıza 1000 veya daha yüksek bir id değeri atamanızı öneririz.
description id özelliğine benzer ancak daha açıklayıcıdır.
crawlStage Tarama Robo'nun aşaması, bu Robo komut dosyasını uygular. Varsayılan olarak ana tarama aşamasıdır.
priority Bu Robo komut dosyasının diğer Robo komut dosyalarına göre önceliği. Varsayılan olarak tüm Robo komut dosyalarının önceliği 1 şeklindedir.
maxNumberOfRuns Tarama sırasında Robo'nun bu Robo komut dosyasını kaç kez yürütebileceğini belirtir. Robo varsayılan olarak Robo komut dosyasını bir defa yürütebilir.
contextDescriptor Bu Robo komut dosyasını tetikleyen bağlamı veya koşulu açıklar. Atlanırsa bu Robo komut dosyasının tetikleme koşulu her zaman karşılanmış olarak kabul edilir; diğer bir deyişle Robo komut dosyası koşulsuzdur.
actions Bu Robo komut dosyasının tüm işlemleri.

Tek bir dosyada, bir veya daha fazla Robo komut dosyası koleksiyonu bulunur.

Aşağıda, her biri taramanın başında bir kez yürütülen tek bir eyleme sahip iki koşulsuz Robo komut dosyası içeren bir dosya örneği verilmiştir:

[
  {
    "id": 1000,
    "description": "My first Robo script",
    "actions": [
      {
        "eventType": "DISABLE_KEYBOARD"
      }
    ]
  },
  {
    "id": 1001,
    "description": "My second Robo script",
    "actions": [
      {
        "eventType": "PRESSED_BACK"
      }
    ]
  }
]

Bağlam açıklayıcı

Bağlam açıklayıcısı, birkaç özellikten birini veya bunların bir kombinasyonunu kullanarak Robo komut dosyasını tetikleyen bağlamı ya da koşulu tanımlar:

Özellik Açıklama
"condition": "always" Her zaman bir Robo komut dosyasını tetikler.
"condition": "element_present" Ekranda elementDescriptors ile eşleşen bir kullanıcı arayüzü widget'ının veya visionText tarafından belirtilen metnin olup olmadığını kontrol eder.
"condition": "element_disabled" Ekranda elementDescriptors ile eşleşen bir kullanıcı arayüzü widget'ının bulunduğunu ve etkileşimde bulunulamayacağını kontrol eder.
"condition": "element_checked" Ekranda elementDescriptors ile eşleşen bir kullanıcı arayüzü widget'ının bulunduğunu ve kontrol edilip edilmediğini kontrol eder.
"condition": "app_under_test_shown" Altta uygulama testinin ön planda çalışıp çalışmadığını kontrol eder.
"condition": "default_launcher_shown" Cihazın ana ekranının gösterilip gösterilmediğini kontrol eder. Bu, hiçbir uygulamanın ön planda çalışmadığı anlamına gelir.
"condition": "non_roboscript_action_performed" Robo testi tarafından gerçekleştirilen son nonRoboscriptActionCount ardışık işlemin Robo komut dosyası işlemi olup olmadığını kontrol eder.
negateCondition true olarak ayarlanırsa condition geçersiz kılınır. Örneğin, ekranda bir kullanıcı arayüzü widget'ı YOK veya test altındaki uygulamanın ön planda ÇALIŞMADIĞINI kontrol etmek için bu özelliği kullanabilirsiniz.
elementDescriptors Ekranda bir kullanıcı arayüzü widget'ını tanımlayan bir veya daha fazla öğe tanımlayıcısı. element_present, element_disabled ve element_checked koşullarıyla birlikte kullanılır. visionText ile karşılıklı olarak hariç. Daha fazla bilgi için Öğe tanımlayıcıları bölümüne bakın.
visionText Ekrandaki metinler, Optik Karakter Tanıma (OCR) API'si kullanılarak algılanır. visionText, element_present koşuluyla birlikte kullanılır. elementDescriptors ile karşılıklı olarak hariç.
nonRoboscriptActionCount Daha önce gerçekleştirilen art arda Robo olmayan komut dosyası işlemlerinin sayısı. Her nonRoboscriptActionCount Robo işleminden sonra Robo komut dosyasını tetiklemek için non_roboscript_action_performed koşuluyla birlikte kullanılır. Bu değer varsayılan olarak 1 şeklindedir.

Aşağıda, ekranda "my.app.package:id/page_header" kaynak kimliğine sahip bir kullanıcı arayüzü widget'ı tarafından tetiklenen bir Robo komut dosyası örneği verilmiştir:

{
  "id": 1000,
  "contextDescriptor": {
    "condition": "element_present",
    "elementDescriptors": [
      {
        "resourceId": "my.app.package:id/page_header"
      }
    ]
  },
  "actions": [
    {
      "eventType": "VIEW_CLICKED",
      "elementDescriptors": [
        {
          "text": "Settings"
        }
      ]
    }
  ]
}

Aşağıda, optik karakter tanıma (OCR) tarafından tespit edilen "Privacy Policy" tarafından tetiklenen bir Robo komut dosyası örneği verilmiştir:

{
  "id": 1000,
  "description": "Vision text Robo script",
  "contextDescriptor": {
    "condition": "element_present",
    "visionText": "Privacy Policy"
  },
  "actions": [
    {
      "eventType": "VIEW_CLICKED",
      "visionText": "Privacy Policy"
    }
  ]
}

Aşağıda, komut dosyası olmayan her Robo işleminden sonra 5 saniye bekleyen bir Robo komut dosyası örneği verilmiştir:

{
  "contextDescriptor": {
    "condition": "non_roboscript_action_performed"
  },
  "maxNumberOfRuns" : 1000,
  "actions" : [
    {
      "eventType" : "DELAYED_MESSAGE_POSTED",
      "delayTime" : 5000
    }]
}

İşlemler

Robo komut dosyasındaki her işlem, aşağıdaki tabloda açıklanan bir veya daha fazla özellik-değer çiftinden oluşan bir paket olarak temsil edilir:

Özellik Açıklama
eventType İşlemin türünü (ör. tıklama, metin düzenleme vb.) belirtir. Her işlem için gereklidir.
elementDescriptors Bir kullanıcı arayüzü widget'ını tanımlayan tanımlayıcılar. Belirli bir düğmeyi tıklama gibi hedef kullanıcı arayüzü widget'ı olan tüm işlemler için gereklidir.
optional true olarak ayarlanırsa bu işlem gerçekleştirilemediğinde atlanır. Örneğin, bu işlem, içerdiği Robo komut dosyası hatası olmadan, bir ekranda hedef kullanıcı arayüzü widget'ını bulamadığında atlanır. Varsayılan olarak bu değer false şeklindedir.
replacementText Hedef kullanıcı arayüzü widget'ına girilecek metin. Metin düzenleme işlemleri için gereklidir.
swipeDirection Kaydırmanın yönünü belirtir. Kaydırma işlemleri için gereklidir.
delayTime Ne kadar süre bekleneceğini (milisaniye cinsinden) belirtir. Bekleme işlemleri için gereklidir.
pointTapXCoordinate ve pointTapYCoordinate Dokunulan noktanın X ve Y pikseli koordinatları. pointTapXPercent ve pointTapYPercent ile karşılıklı olarak hariç. Üzerine dokunma işlemleri için gereklidir.
pointTapXPercent ve pointTapYPercent Dokunulan noktanın X ve Y koordinatlarının yüzdesi. pointTapXCoordinate ve pointTapYCoordinate ile karşılıklı olarak özelleştirilebilir. Üzerine dokunma işlemleri için gereklidir.

Aşağıda, hedef kullanıcı arayüzü widget'ları bulunmayan iki işlem içeren bir Robo komut dosyası örneği verilmiştir. Bu, bu işlemlerin belirli bir kullanıcı arayüzü widget'ında çalışmadığı anlamına gelir:

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

Öğe tanımlayıcıları

Bir öğe tanımlayıcı, aşağıdaki tanımlayıcı özelliklerden birini veya daha fazlasını kullanarak bir kullanıcı arayüzü widget'ını tanımlar:

Özellik Açıklama
className
ancestorClassName Öğenin kullanıcı arayüzü hiyerarşisi üst öğesinin sınıf adı. Üst düğüm, öğenin kendisi de dahil olmak üzere öğenin kullanıcı arayüzü hiyerarşisindeki üst düğümlerden herhangi biridir.
resourceId
resourceIdRegex resourceId ile eşleşecek Java normal ifadesi.
contentDescription
contentDescriptionRegex contentDescription ile eşleşecek Java normal ifadesi.
text (ekranda görünür)
textRegex text ile eşleşecek Java normal ifadesi.
groupViewChildPosition, recyclerViewChildPosition veya adapterViewChildPosition Bir kullanıcı arayüzü widget'ının üst widget'ının türüne bağlı olarak alt konumunu temsil eder.

Bu özellikler genellikle tanımlanmamış olur. Örneğin, bir düğmede metin ve içerik açıklaması bulunmayabilir. Bazı özellik değerleri mevcut olsa bile belirli bir uygulama ekranında benzersiz olmayabilirler (resourceId dahil).

Örneğin, bir listedeki öğeler arasında ayrım yapmak genellikle yalnızca üst widget'ta bu öğelerin farklı alt konumlarını kullanarak mümkündür. Bu, bir kullanıcı arayüzü widget'ını tanımlamak için yalnızca bir öğe tanımlayıcı kullanmanın genellikle yeterli olmadığı anlamına gelir. Bu nedenle, bir işlemin elementDescriptors özelliği, ilki hedef kullanıcı arayüzü widget'ına, ikincisi hedef kullanıcı arayüzü widget'ının üst widget'ına karşılık gelecek ve bu şekilde devam edecek şekilde sıralanmış bir öğe tanımlayıcılar dizisi içerir. Bir işlemin hedef kullanıcı arayüzü widget'ı, tüm öğe tanımlayıcıları ilgili kullanıcı arayüzü widget'ı alt hiyerarşisiyle eşleştiğinde eşleştirilir.

Aşağıda, metin değişikliği ve tıklama işlemleri içeren bir Robo komut dosyası örneği verilmiştir. Bunların her ikisi de, sağlanan öğe tanımlayıcılarını kullanarak hedef kullanıcı arayüzü widget'ını tanımlamanızı gerektirir:

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

Yürütme seçenekleri

İsteğe bağlı olarak, Robo komut dosyasındaki işlemler listesinin önüne, söz konusu Robo komut dosyasının yürütme seçeneklerini belirten bir JSON nesnesi ekleyebilirsiniz. Bu yapılandırma başlığı, roboscript anahtar kelimesiyle başlar ve ardından istenen yürütme seçeneklerinin JSON gösterimi gelir.

Robo komut dosyaları aşağıdaki yürütme seçeneklerini destekler:

  • executionMode - Robo komut dosyası çalışırken yürütme seçenekleri uygulanır:
    • strict: true değerine ayarlanırsa Robo komut dosyası kısmi eşleme, geçerli işlemi atlama ve askıya alma özelliklerini kullanmaz. Yani Robo komut dosyası normal bir araç testi olarak yürütülür ve işlemlerinden herhangi biri gerçekleştirilemediği anda başarısız olur. Varsayılan olarak bu değer false'tır.
    • dismiss_popups - true değerine ayarlanırsa Robo test, strict modunda bile Robo komut dosyasını gerçekleştirirken beklenmedik iletişim kutularını kapatır. strict modunda değilken bu seçeneğin hiçbir etkisi yoktur. Varsayılan olarak false şeklindedir.
    • notify - false değerine ayarlanırsa Robo komut dosyası yürütme işleminin başında ve sonunda ekran bildirimlerini göstermez. Varsayılan olarak bu, true şeklindedir.
  • postscript - Robo komut dosyası tamamlandıktan sonra uygulanan yürütme seçenekleri:
    • terminate - true olarak ayarlanırsa Robo testi, Robo komut dosyası tamamlandıktan sonra taramayı durdurur. Bu değer varsayılan olarak false şeklindedir.

Aşağıda, strict modunda yürütülen ve üç saniye boyunca uyuyan ve taramanın durdurulduğu, ekran bildirimleri olmadan çalışan bir Robo komut dosyası örneği verilmiştir:

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

Şablon parametreleri

Şablon parametresi, Robo komut dosyasında bulunan ve Robo test tarafından çalıştırılmak üzere yüklenen gerçek değerle değiştirilen bir yer tutucudur. Şablon parametrelerine ön ek olarak çift alt çizgi, ardından yüzde işareti eklenir ve bu parametrelerin sonuna yüzde işareti ve ardından çift alt çizgi eklenir.

Robo komut dosyaları aşağıdaki şablon parametresini destekler:

  • __%APP_PACKAGE_NAME%__ - test altında uygulamanın paket adı.

Aşağıda, uygulama altında test sürecini durduran bir Robo komut dosyası örneği verilmiştir:

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

Yorum sayısı

Robo komut dosyaları, # veya // ile başlayan satırlar olan yorum satırları içerebilir.

Aşağıda, birkaç yorum içeren bir Robo komut dosyası örneği verilmiştir:

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

Özellikler

Varsayılan olarak, Robo komut dosyasının tüm işlemleri tamamlanana (veya en azından yapılmaya çalışılana) kadar Robo komut dosyası etkin kalır. Robo test, gerçekleştirilecek bir işlem seçerken Robo komut dosyası işlemini eşleştirmeye çalışıyor. Robo komut dosyası, dayanıklılığı artırmak için aşağıdaki teknikleri kullanır:

Teknik Açıklama
Kısmi eşleme Mevcut Robo komut dosyası işlemi tam olarak eşleştirilemiyorsa eşleşme ölçütleri gevşetilir ve eşleştirme yeniden denenir. Kısmi eşleme, Robo komut dosyası işleminin hedef kullanıcı arayüzü widget'ıyla eşleşirken en dıştaki öğe tanımlayıcısını dikkate almaz.

Kısmi eşleme başarılı olursa ilgili Robo komut dosyası işlemi her zamanki gibi gerçekleştirilir. Bu teknik, ekran öğelerinin yeniden düzenlenmesi gibi durumlarda uygulama yapısının değiştiği (ör. uygulama sürümleri arasında) senaryoları destekler.

Geçerli işlemi atla Mevcut Robo komut dosyası işlemi tamamen veya kısmen eşleştirilemezse Robo sonraki Robo komut dosyası işlemini eşleştirmeye çalışır. Sonraki işlem tamamen veya kısmen eşleşirse Robo test mevcut Robo komut dosyası işlemini atlar (ve hiçbir zaman geri dönmez) ve sonrakini gerçekleştirir.

Bu teknik, uygulama davranışının sürümler arasında değişiklik gösterdiği veya kesintili olduğu senaryoları destekler. Örneğin, kayıt sırasında Robo komut dosyası yeniden oynatılırken ve farklı ekranlarda aralıklı bir iletişim gösterilebilir.

Askıya al Mevcut veya sonraki Robo komut dosyası işlemlerinin hiçbiri tamamen veya kısmen eşleştirilemiyorsa Robo komut dosyası geçici olarak askıya alınır ve Robo test, diğer stratejilerini kullanarak gerçekleştireceği bir işlem seçer. Bu işlem tamamlandıktan sonra Robo testi, Robo komut dosyasını yürütmeye devam eder.

Mevcut veya sonraki Robo komut dosyası işlemleri eşleştirilemediği sürece Robo komut dosyası, istenen sayıda işlem için askıya alınmış olarak kalır. Bu nedenle, Robo komut dosyalarının Robo testi için başlangıç noktası olması gerekmez. Ayrıca Robo komut dosyası işlemlerini standart Robo test işlemleriyle birlikte kullanabilirsiniz. Bu teknik, uygulama davranışında kesinti yaşanan veya uygulama sürümleri arasındaki değişikliklerin Robo test'in standart işlemleriyle "boşlukları doldurması"na yetecek kadar büyük olduğu senaryoları destekler.

Öncelikler

Bir Robo komut dosyası maxNumberOfRuns değerine ulaşırsa artık belirli bir taramada tetiklenemez. Mevcut bağlam tarafından birden fazla Robo komut dosyası tetiklenebiliyorsa öncelik, aşağıdaki sırayla seçilerek verilir:

  1. contextDescriptor özelliği var.
  2. En yüksek priority değerine sahiptir (varsayılan olarak tüm Robo komut dosyaları aynı yürütme işlemine priority/1 sahiptir).
  3. Robo komut dosyalarının öncelikleri aynıysa Robo komut dosyaları listesinde en önce görünür.

Aşağıda, aynı işlemi gerçekleştiren ve aynı koşulla (app-under-test ön planda olmak üzere) tetiklenen üç Robo komut dosyası içeren bir dosya örneği verilmiştir:

[
  {
    "id": 1000,
    "description": "Robo script 1",
    "contextDescriptor": {
      "condition": "app_under_test_shown"
    },
    "actions": [
      {
        "eventType": "DELAYED_MESSAGE_POSTED",
        "delayTime": 3000
      }
    ]
  },
  {
    "id": 1001,
    "description": "Robo script 2",
    "priority": "2",
    "contextDescriptor": {
      "condition": "app_under_test_shown"
    },
    "actions": [
      {
        "eventType": "DELAYED_MESSAGE_POSTED",
        "delayTime": 3000
      }
    ]
  },
  {
    "id": 1002,
    "description": "Robo script 3",
    "contextDescriptor": {
      "condition": "app_under_test_shown"
    },
    "actions": [
      {
        "eventType": "DELAYED_MESSAGE_POSTED",
        "delayTime": 3000
      }
    ]
  }
]

Ap-under-test ön planda olduğunda Robo sırayla şu komutu tetikler:

  1. "Robo script 2" en yüksek önceliğe sahip olduğu için.
  2. "Robo script 1" çünkü aynı önceliğe sahip diğer geçerli Robo komut dosyaları arasında daha önce yer alır.
  3. "Robo script 3", geçerli son Robo komut dosyası olarak değiştirildi.

Tekrarlanan çalıştırmalar

Robo varsayılan olarak tarama sırasında bir Robo komut dosyasını en fazla bir kez tetikler. Bu, maxNumberOfRuns özelliği aracılığıyla ayarlanabilir.

Aşağıda, uygulama altında test uygulamasını 10 kereye kadar arka plana taşıyan bir Robo komut dosyası örneği verilmiştir:

{
  "id": 1000,
  "maxNumberOfRuns": 10,
  "contextDescriptor": {
    "condition": "app_under_test_shown"
  },
  "actions": [
    {
      "eventType": "GO_HOME"
    }
  ]
}

Tarama aşaması

Robo komut dosyaları, belirli bir Robo taramasının farklı aşamalarında uygulanabilir:

Tarama aşaması Açıklama
pre_crawl Robo başlatılıp test altındaki uygulamayı taramaya başlamadan önce.
post_crawl Robo, test altında uygulamayı taramayı bitirdikten sonra.
crawl Robo'nun test altında uygulamayı taradığı ana tarama aşaması.
close_screen Robo belirli bir ekrandan geri dönmeye (geri izleme) çalıştığında, bu ekrandaki olası tüm işlemler incelenirken. Robo varsayılan olarak geri basar. Bu, bazı senaryolarda istenmeyen bir durumdur.

Bir Robo komut dosyasının crawlStage özelliği belirtilmemişse crawl olduğu ima edilir.

Aşağıda, Robo tarafından taramaya başlamadan önce test altındaki uygulama kullanıcı verilerini temizleyen bir Robo komut dosyası örneği verilmiştir:

{
  "id": 1000,
  "crawlStage": "pre_crawl",
  "actions": [
    {
      "eventType": "ADB_SHELL_COMMAND",
      "command": "pm clear __%APP_PACKAGE_NAME%__"
    }
  ]
}

Aşağıda, Robo'ya bir onay iletişim kutusundan geri dönmeye (geri dönüş) "Cancel" tıklamasını söyleyen bir Robo komut dosyası örneği verilmiştir:

{
  "id": 1000,
  "crawlStage": "close_screen",
  "maxNumberOfRuns": 999,
  "contextDescriptor": {
    "condition": "element_present",
    "elementDescriptors": [
      {
        "resourceId": "my.app.package:id/confirmation_dialog"
      }
    ]
  },
  "actions": [
    {
      "eventType": "VIEW_CLICKED",
      "elementDescriptors": [
        {
          "text": "Cancel"
        }
      ]
    }
  ]
}

Koşullu eylemler

Robo komut dosyası koşullu işlemler içerebilir. Koşullu eylemler, Robo'nun bu işlemleri nasıl gerçekleştireceğini açıklayan üç ek özelliğe sahiptir:

Özellik Açıklama
priority Bu koşullu işlemin, Robo komut dosyası içeren içindeki diğer koşullu işlemlere kıyasla önceliği. Varsayılan olarak, tüm koşullu işlemlerin önceliği 1 şeklindedir.
maxNumberOfRuns Bu koşullu işlemin, kapsayıcı Robo komut dosyasının bir yürütülmesi sırasında kaç kez gerçekleştirilebileceği. Varsayılan olarak tüm koşullu eylemler, Robo komut dosyasını içeren tek bir yürütmede en fazla bir kez gerçekleştirilebilir.
contextDescriptor Bu koşullu işlemi tetikleyen bağlam/koşul. [Robo komut dosyasınıncontextDescriptor](#context-descriptor) ile aynı yapıya sahiptir ve benzer özellikler sunar.

Bir Robo komut dosyası tetiklendiğinde, koşullu olmayan işlemlerini göründükleri sırayla teker teker gerçekleştirir. Robo komut dosyası koşullu işlemler içeriyorsa gerçekleştirilecek koşulsuz işlem seçilmeden önce her seferinde bunlar dikkate alınır. Herhangi bir koşullu işlem, önceliğine ve kalan çalıştırma sayısına göre tetiklenip seçilirse Robo komut dosyası bu koşullu işlemi gerçekleştirir. Aksi takdirde, Robo komut dosyası aşağıdaki koşulsuz işlemi gerçekleştirir. Robo komut dosyalarının geçerli olabilmesi için en az bir tane koşulsuz işlem içermesi gerekir.

Aşağıda, Robo komut dosyası yürütülürken herhangi bir noktada ortaya çıkan pop-up iletişim kutularını kapatan koşullu eyleme sahip koşulsuz bir Robo komut dosyası örneği verilmiştir:

{
  "id": 1000,
  "actions": [
    {
      "description": "Dismiss popup",
      "maxNumberOfRuns": 100,
      "contextDescriptor": {
        "condition": "default_launcher_shown",
        "negateCondition": true
      },
      "eventType": "GO_HOME"
    },
    {
      "description": "Screen off",
      "eventType": "ADB_SHELL_COMMAND",
      "command": "input keyevent 26"
    },
    {
      "description": "Wait for 10 seconds",
      "eventType": "DELAYED_MESSAGE_POSTED",
      "delayTime": 10000
    },
    {
      "description": "Screen on",
      "eventType": "ADB_SHELL_COMMAND",
      "command": "input keyevent 82"
    },
    {
      "description": "Wait for 10 seconds",
      "eventType": "DELAYED_MESSAGE_POSTED",
      "delayTime": 10000
    }
}

İşlemler yoksayılıyor

Robo komut dosyası, Robo'nun belirli bir ekrandaki belirli kullanıcı arayüzü widget'larını veya tüm kullanıcı arayüzü widget'larını yoksayması için talimatlar içerebilir. Bu talimatlar, sırasıyla eventType ELEMENT_IGNORED ve ALL_ELEMENTS_IGNORED ile yapılan "işlemlerin" yoksayıldığı anlamına gelir.

Yoksayma işlemleri içeren bir Robo komut dosyasının contextDescriptor özelliği belirli bir ekranla eşleştiğinde, Robo yok sayma eylemleriyle hedeflenen kullanıcı arayüzü widget'larıyla etkileşimde bulunmaz (başka bir Robo komut dosyası işlemi, yoksayılan kullanıcı arayüzü widget'larından biri üzerinde işlem yapmasına neden olmadığı sürece).

Robo komut dosyaları; yoksayma, koşullu ve koşulsuz eylemlerin bir karışımını içerebilir. Diğer Robo komut dosyası işlemlerinden farklı olarak, priority ve maxNumberOfRuns özelliklerinin değerlerinden bağımsız olarak, Robo komut dosyasının contextDescriptor öğesini içeren işlemler Robo taraması sırasında bir ekranla eşleştiği sürece işlemler yok sayılır.

Aşağıda iki Robo komut dosyası içeren bir dosya örneği verilmiştir. İlk Robo komut dosyası, Robo'nun kaynak kimliği "my.app.package:id/ignored_screen" olan bir kullanıcı arayüzü widget'ı içeren ekrandaki tüm kullanıcı arayüzü widget'larını yoksaymasını sağlar. İkinci Robo komut dosyası, Robo'nun kaynak kimliğine sahip bir kullanıcı arayüzü widget'ı içeren bir ekranda kaynak kimlikleri ".*:id/done" Java normal ifadesiyle eşleşen kullanıcı arayüzü widget'larını yoksaymasını sağlar "my.app.package:id/main_screen":

[
  {
    "id": 1000,
    "contextDescriptor": {
      "condition": "element_present",
      "elementDescriptors": [
        {
          "resourceId": "my.app.package:id/ignored_screen"
        }
      ]
    },
    "actions": [
      {
        "eventType": "ALL_ELEMENTS_IGNORED"
      }
    ]
  },
  {
    "id": 1001,
    "contextDescriptor": {
      "condition": "element_present",
      "elementDescriptors": [
        {
          "resourceId": "my.app.package:id/main_screen"
        }
      ]
    },
    "actions": [
      {
        "eventType": "ELEMENT_IGNORED",
        "elementDescriptors": [
          {
            "resourceIdRegex": ".*:id/done"
          }
        ]
      }
    ]
  }
]

RecyclerView ve AdapterView desteği

RecyclerView ve AdapterView widget'larının alt öğeleri dinamik olarak yüklenir ve geçerli ekrandan uzakta hızlıca kaydırmayla görüntülenebilir. Ekranın boyutu ve bu çocuğa ulaşmak için gereken kaydırma sayısı, farklı cihaz form faktörleri için farklı olduğundan, çocuğun veri konumuna (mutlak veri) güvenmek çok daha güçlüdür. Bu, çocuğu ekrana getirmek ve daha sonra ekranın konumunu kullanmak için gereken kaydırma sayısı ile daha az sağlam bir yaklaşımdır.

Bu nedenle Robo komut dosyası, Robo komut dosyası işlemlerinin hedefi olan RecyclerView alt öğelerinin mutlak veri konumlarını recyclerViewChildPosition olarak yakalar. Robo komut dosyası ayrıca Robo komut dosyası işlemlerinin hedefi olan AdapterView alt öğelerinin mutlak veri konumlarını da adapterViewChildPosition olarak yakalar.

RecyclerView ve AdapterView alt alanlarındaki işlemler aşağıdaki adımlarla gerçekleştirilir:

  1. Robo testi, karşılık gelen alt öğenin RecyclerView veya AdapterView içeren öğelerindeki bir konumlandırma işlemiyle ekranda görüntülenmesini sağlar.

  2. Robo test, kaydedilen işlemi zaten ekranda gösterildiği için doğrudan alt öğe üzerinde gerçekleştirir.

Aşağıda, AdapterView (android.widget.GridView) alt öğesindeki bir tıklama işlemi örneği verilmiştir:

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

Aşağıda, RecyclerView (android.support.v7.widget.RecyclerView) alt öğelerindeki tıklama işlemine bir örnek verilmiştir:

{
  "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'da Robo komut dosyası kaydetme ve Test Lab'de çalıştırma

Android Studio'da, komut dosyasını JSON dosyası olarak kaydeden bir Robo komut dosyası oluşturabilirsiniz. Daha sonra JSON dosyasını uygulamayla Firebase Test Lab'e yükleyebilir ve testi uygun şekilde çalıştırabilirsiniz.

Komut dosyası ekli bir Robo testi çalıştırdığınızda Robo ilk olarak önceden belirlediğiniz işlemleri test eder ve ardından uygulamayı her zamanki gibi keşfeder.

Android Studio'da Robo komut dosyası JSON dosyası oluşturmak için Android Studio'da Test Lab'i kullanarak Robo komut dosyası kaydetme bölümündeki adımları uygulayın.

Robo komut dosyası işlemleri

Aşağıdaki yaygın isteğe bağlı özellik tüm işlemler için geçerlidir:

  • description - bu Robo komut dosyası işleminin Robo test çıkışlarında yürütülmesinin izlenmesine yardımcı olur.

Onaylama

Bildirilen koşul doğruysa Robo komut dosyası başka bir onay olabilecek bir sonraki işleme devam eder. Aksi takdirde, Robo komut dosyası yürütme işlemi başarısız bir onay nedeniyle durdurulur.

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
"eventType": "ASSERTION" --
contextDescriptor İddia edilen bağlamı veya koşulu açıklar. Aynı yapıya sahiptir ve Robo komut dosyasınıncontextDescriptor'ına benzer özellikler sunar.

Aşağıda, app-under-test değerinin ön planda olup olmadığını kontrol eden bir Robo komut dosyası onayı örneği verilmiştir:

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

Aşağıda, "com.google.samples.apps.topeka:id/done" kaynak kimliğine sahip bir kullanıcı arayüzü widget'ının ekranda olup olmadığını kontrol eden bir Robo komut dosyası onayı örneği verilmiştir:

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

Aşağıda, OCR kullanarak ekranda "Settings" tespit EDİLMEDİĞİNİ kontrol eden Robo komut dosyası onayına bir örnek verilmiştir:

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

Tıklama

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
eventType Robo komut dosyası işleminin türünü belirtir.
"eventType": "VIEW_CLICKED" Uygulama altında test edilen uygulamanın hedef öğesini tıklar.
"eventType": "SOFT_KEYBOARD_CLICK" Yazılım klavyesinin hedef öğesini tıklar.
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK" Yazılım klavyesinin rastgele öğelerini maxNumberOfRuns defaya kadar tıklar.
"eventType": "LIST_ITEM_CLICKED" Android Studio'da Robo komut dosyası kaydedicisi tarafından liste öğelerini tıklamak için kullanılır.
elementDescriptors Android kullanıcı arayüzü hiyerarşisini kullanarak tıklanan kullanıcı arayüzü widget'ını tanımlar. visionText ile karşılıklı olarak hariç.
visionText OCR kullanarak tıklanan öğeyi tanımlar. elementDescriptors ile karşılıklı olarak hariç.
maxNumberOfRuns eventType değeri SOFT_KEYBOARD_RANDOM_CLICK olduğunda, sanal klavyenin rastgele bir öğesinin kaç kez tıklanacağını belirtir. Varsayılan değer 1 değeridir.

Aşağıda, "com.google.samples.apps.topeka:id/done" kaynak kimliğine sahip bir düğmeyi tıklayan Robo komut dosyası işlemine bir örnek verilmiştir:

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

Aşağıda, OCR kullanan bir ekranda "Privacy Policy" üzerini tıklayan Robo komut dosyası işlemine bir örnek verilmiştir:

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

Aşağıda, "Emoji button" içerik açıklamasına sahip yumuşak klavye öğesini tıklayan Robo komut dosyası işlemi örneği verilmiştir:

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

Aşağıda, rastgele yumuşak klavye öğelerini beş defaya kadar tıklayan Robo komut dosyası işlemine bir örnek verilmiştir:

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

Yazılım klavyesini devre dışı bırak

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
"eventType": "DISABLE_KEYBOARD" --

Aşağıda, yazılım klavyesini devre dışı bırakan bir Robo komut dosyası işlemi örneği verilmiştir:

{
  "eventType": "DISABLE_KEYBOARD"
}

Adb kabuk komutunu yürütme

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
"eventType": "ADB_SHELL_COMMAND" --
command Yürütülecek Android Debug Bridge (adb) kabuk komutu.

Aşağıdaki özellik isteğe bağlıdır:

  • expectedOutputRegex - Java normal ifadesi olarak komutun beklenen çıkışı. Çıkış eşleşmezse Robo komut dosyası işlemi başarısız olur. Bu, varsayılan olarak boş bir dizedir. Yani çıkış kontrol edilmez.

Aşağıda, test altındaki uygulama kullanıcı verilerini temizleyen bir Robo komut dosyası işlemi örneği verilmiştir:

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

İzin ver

Bu işlem, Espresso Test Kaydedici ile geriye dönük uyumluluk için Android Studio'da Robo komut dosyası kaydedicisi tarafından kaydedilir. Robo test her taramanın başında uygulama altındaki test için tüm izinleri verdiğinden, bu işlem herhangi bir işlemsizdir. Robo komut dosyalarınızda bu işlemi KULLANMAYIN.

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
"eventType": "PERMISSIONS_REQUEST" --

Ekrandaki tüm öğeleri yoksay

Bu işlem, Robo'nun içeren Robo komut dosyasını tetikleyen herhangi bir ekranda tüm öğeleri yoksaymasını sağlar.

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
"eventType": "ALL_ELEMENTS_IGNORED" --

Aşağıda, Robo'nun bir ekrandaki tüm öğeleri yoksaymasını sağlayan Robo komut dosyası işlemine bir örnek verilmiştir:

{
  "eventType": "ALL_ELEMENTS_IGNORED"
}

Bir öğeyi yoksay

Bu işlem, Robo'nun belirtilen elementDescriptors ile eşleşen bir öğeyi (veya öğeleri) yoksaymasını sağlar.

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
"eventType": "ELEMENT_IGNORED" --
elementDescriptors Android kullanıcı arayüzü hiyerarşisini kullanarak yoksayılan kullanıcı arayüzü widget'larını tanımlar.

Aşağıdaki özellik isteğe bağlıdır:

  • ignoreChildren - true değerine ayarlanırsa Robo, yoksayılan kullanıcı arayüzü widget'larının tüm alt öğelerini de yoksayar. Bu değer varsayılan olarak false şeklindedir.

Aşağıda, Robo'nun içerik açıklamaları "Avatar" ile başlayan tüm öğeleri yoksaymasına neden olan Robo komut dosyası işlemine bir örnek verilmiştir:

{
  "eventType": "ELEMENT_IGNORED",
  "elementDescriptors": [
    {
      "contentDescriptionRegex": "Avatar.*"
    }
  ]
}

Girdi metni

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
eventType Robo komut dosyası işleminin türünü belirtir.
"eventType": "VIEW_TEXT_CHANGED" Belirtilen metni hedef kullanıcı arayüzü widget'ına girer.
"eventType": "ENTER_TEXT" belirtilen metni hedef kullanıcı arayüzü widget'ına girer ve ardından bu kullanıcı arayüzü widget'ına bir KEYCODE_ENTER etkinliği gönderir.
elementDescriptors Android kullanıcı arayüzü hiyerarşisini kullanarak hedef kullanıcı arayüzü widget'ını tanımlar.
replacementText Hedef kullanıcı arayüzü widget'ına girilecek metin.

Aşağıda, "com.google.samples.apps.topeka:id/first_name" kaynak kimliğine sahip bir kullanıcı arayüzü widget'ına "John" giren Robo komut dosyası işlemi örneği verilmiştir:

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

Uzun tıklama

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
"eventType": "VIEW_LONG_CLICKED" --
elementDescriptors Android kullanıcı arayüzü hiyerarşisini kullanarak hedef kullanıcı arayüzü widget'ını tanımlar. visionText ile karşılıklı olarak hariç.
visionText OCR kullanarak uzun tıklanan öğeyi tanımlar. elementDescriptors ile karşılıklı olarak hariç.

Aşağıdaki özellik isteğe bağlıdır:

  • delayTime - Uzun bir tıklamada basılı tutma işleminin ne kadar süreceğini milisaniye cinsinden belirtir.

Aşağıda, "Avatar 8" içerik açıklamasına sahip kullanıcı arayüzü widget'ında beş saniye uzunluğunda tıklama gerçekleştiren Robo komut dosyası işlemine bir örnek verilmiştir:

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

Tek noktalı hareketi gerçekleştirme

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
"eventType": "ONE_POINT_GESTURE" --
coordinates Bir noktalı hareket için, yüzde veya piksel olarak "(x1,y1)->(x2,y2)" şeklinde biçimlendirilmiş iki koordinat.

Aşağıdaki özellik isteğe bağlıdır:

  • dragAndDrop - true değerine ayarlanırsa tek noktalı hareket, sürükleme ve bırakma işlemi gerçekleştirir. Bu değer varsayılan olarak false şeklindedir.

Aşağıda, aşağı kaydırma işlemi gerçekleştiren Robo komut dosyası tek noktalı hareket işlemi örneği verilmiştir:

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

İki noktalı hareket yap

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
"eventType": "TWO_POINT_GESTURE" --
coordinates İki noktalı hareket için, yüzde veya piksel olarak "(x1,y1)->(x2,y2),(x3,y3)->(x4,y4)" şeklinde biçimlendirilmiş dört koordinat.

Aşağıda, sıkıştırma hareketi yapan Robo komut dosyası işlemine bir örnek verilmiştir:

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

IME işlemi gerçekleştirme

Bu işlem, belirtilen hedef kullanıcı arayüzü widget'ı için Giriş Yöntemi Düzenleyici'de (IME) geçerli işlem düğmesine (ör. sonraki, bitti ve arama) basar.

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
"eventType": "PRESSED_EDITOR_ACTION" --
elementDescriptors Android kullanıcı arayüzü hiyerarşisini kullanarak hedef kullanıcı arayüzü widget'ını tanımlar.

Aşağıda, "com.google.samples.apps.topeka:id/first_name" kaynak kimliğine sahip kullanıcı arayüzü widget'ında IME işlemi gerçekleştiren Robo komut dosyası işlemine bir örnek verilmiştir:

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

Geri'ye bas

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
eventType Robo komut dosyası işleminin türünü belirtir.
"eventType": "PRESSED_BACK" Cihaza bir KEYCODE_BACK etkinliği gönderir.
"eventType": "PRESSED_BACK_EMULATOR_28" Android Studio'da Robo komut dosyası kaydedici tarafından emülatörler API'si 28'e geri basmak için kullanılır.

Aşağıda, geri basan Robo komut dosyası işlemine bir örnek verilmiştir:

{
  "eventType": "PRESSED_BACK"
}

Ana sayfaya basın

Bu işlem, cihaza bir KEYCODE_HOME etkinliği gönderir.

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
"eventType": "GO_HOME" --

Aşağıda, ana sayfa düğmesine basan Robo komut dosyası işlemine bir örnek verilmiştir:

{
  "eventType": "GO_HOME"
}

Bir öğeyi görünüme kaydırma

Bu işlem, Robo testin belirtilen elementDescriptors ile eşleşen kullanıcı arayüzü widget'ı ekranda görünene, kaydırılan widget'ın kaydırılamayacağına veya maksimum 50 kaydırma sınırına ulaşılana kadar, belirtilen elementDescriptors ile eşleşen kullanıcı arayüzü widget'ını ileri kaydırmasını sağlar.childElementDescriptors

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
"eventType": "ELEMENT_SCROLL_INTO_VIEW" --
elementDescriptors Android kullanıcı arayüzü hiyerarşisini kullanarak kaydırılan kullanıcı arayüzü widget'ını tanımlar.
childElementDescriptors Android kullanıcı arayüzü hiyerarşisini kullanarak kaydırmak için kullanıcı arayüzü widget'ını tanımlar.

Aşağıda, kullanıcı arayüzü widget'ını "my.app.package:id/scrollable_card_container" kaynak kimliğiyle kaydıran ve ekranda "Orange" metnini içeren kullanıcı arayüzü widget'ı görünene (veya daha fazla kaydırma yapılamayan ya da maksimum 50 kaydırma sayısına ulaşılıncaya) kadar kaydıran bir Robo komut dosyası işlemine bir örnek verilmiştir:

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

Kaydırma

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
"eventType": "VIEW_SWIPED" --
swipeDirection Kaydırma işleminin yönünü belirtir:
  • Left
  • Right
  • Up
  • Down
  • Forward - hedef kullanıcı arayüzü widget'ının dikey veya yatay kaydırılabilirliğine bağlı olarak Down veya Right.
  • Backward - hedef kullanıcı arayüzü widget'ının dikey veya yatay kaydırılabilirliğine bağlı olarak Up veya Left.
elementDescriptors Android kullanıcı arayüzü hiyerarşisini kullanarak hedef kullanıcı arayüzü widget'ını tanımlar.

Aşağıda, "my.app.package:id/custom_content" kaynak kimliğine sahip bir kullanıcı arayüzü widget'ını yukarı kaydıran Robo komut dosyası işlemine bir örnek verilmiştir:

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

Ekran görüntüsü al

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
"eventType": "TAKE_SCREENSHOT" --
screenshotName Ekran görüntüsü dosyasının adını belirtir.

Aşağıda, ekran görüntüsü alan Robo komut dosyası işlemine bir örnek verilmiştir:

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

Ekranda bir noktaya dokunun

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
"eventType": "POINT_TAP" --
pointTapXCoordinate Dokunulan noktanın piksel X koordinatı. pointTapXPercent ve pointTapYPercent ile karşılıklı hariç.
pointTapYCoordinate Dokunulan noktanın piksel Y koordinatı. pointTapXPercent ve pointTapYPercent ile karşılıklı hariç.
pointTapXPercent Dokunulan noktanın yüzde X koordinatı. pointTapXCoordinate ve pointTapYCoordinate ile karşılıklı hariç.
pointTapYPercent Dokunulan noktanın Y koordinatı. pointTapXCoordinate ve pointTapYCoordinate ile karşılıklı hariç.

Aşağıda, bir ekranın ortasına dokunan Robo komut dosyası işlemi örneği verilmiştir:

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

Bir öğenin içindeki bir noktaya dokunun

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
"eventType": "POINT_TAP_ELEMENT" --
pointTapXPercent Hedef öğedeki X koordinatı.
pointTapYPercent Hedef öğe içindeki Y koordinatı.
elementDescriptors Android kullanıcı arayüzü hiyerarşisini kullanarak hedef kullanıcı arayüzü widget'ını tanımlar.

Aşağıda, arama çubuğunun kaydırma çubuğunu sağa taşıyan Robo komut dosyası işlemine bir örnek verilmiştir:

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

Taramayı sonlandır

Bu işlem Robo testini durdurur.

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
"eventType": "TERMINATE_CRAWL" --

Aşağıda, Robo testini durduran Robo komut dosyası işlemine bir örnek verilmiştir:

{
  "eventType": "TERMINATE_CRAWL"
}

Bekle

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
"eventType": "DELAYED_MESSAGE_POSTED" --
delayTime Ne kadar süre bekleneceğini (milisaniye cinsinden) belirtir.

Aşağıda, üç saniye bekleyen Robo komut dosyası işlemine bir örnek verilmiştir:

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

Bir öğe bekleyin

Bu işlem, Robo test'in bir öğenin ekranda görünmesi için belirtilen zaman aşımı süresine kadar beklemesini sağlar.

Aşağıdaki tabloda gerekli özellikler listelenmiştir:

Özellik Açıklama
"eventType": "WAIT_FOR_ELEMENT" --
delayTime Bekleme zaman aşımını milisaniye cinsinden belirtir.
elementDescriptors Android kullanıcı arayüzü hiyerarşisini kullanarak beklenen kullanıcı arayüzü widget'ını tanımlar.

Aşağıda, kaynak kimliği "my.app.package:id/confirmation_button" olan bir kullanıcı arayüzü widget'ının ekranda görünmesi için 30 saniye bekleyen Robo komut dosyası işlemine bir örnek verilmiştir:

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

Sonraki adımlar