Robo komut dosyaları referans kılavuzu

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

Robo komut dosyası aşağıdaki yöntemlerle oluşturulabilir:

  • 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ı, test edilen uygulamanın Android uygulama paketi (APK) gibi diğer girişlerle birlikte Robo testine sağlanır.

Aşağıda, test edilen uygulama başlatılırken tetiklenen ve kullanıcının bir uygulamada oturum açmasını sağlayan 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 bu dosyada, yukarıdaki örnekte olduğu gibi varsayılan app_under_test_shown tetikleme koşulu varsa Robo komut dosyasını dosyada daha basit bir biçimde (yalnızca işlemlerinin sırası olarak) 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 ve sonraki sürümler desteği

iOS+ için Robo (Beta), Robo komut dosyaları için sınırlı destek sunar. iOS ve sonraki sürümler için Robo komut dosyası söz dizimi, Android söz dizimine benzer. Ayrıca, desteklenen iOS ve sonraki sürümler özellikleri, Android'deki benzerlerine benzer şekilde çalışır.

iOS ve sonraki sürümlerde aşağıdaki işlemler desteklenir:

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

Öğe tanımlayıcılarındaki aşağıdaki tanımlayıcı özellikler iOS ve sonraki sürümlerde desteklenir:

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

iOS ve sonraki sürümlerde aşağıdaki bağlam tanımlayıcılarında tetikleyici koşullar desteklenir:

  • Test altındaki uygulama gösteriliyor
  • Öğe mevcut
  • Robo dışı komut dosyası işlemi 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ğerlere sahip isteğe bağlı özelliklerdir:

Özellik Açıklama
id Tarama çıkışlarında bu Robo komut dosyasını izlemeye yardımcı olan tam sayı. Robo'da kendi id'lerine sahip yerleşik Robo komut dosyaları vardır. Farklı Robo komut dosyalarında aynı id, bu komut dosyalarının davranışını etkilemese de tarama çıkışlarında bu Robo komut dosyalarından gelen işlemleri ayırt etmek zor olabilir. Çakışmaları önlemek için Robo komut dosyalarınıza 1000 veya daha yüksek bir id atamanız önerilir.
description id'e benzer ancak daha açıklayıcı.
crawlStage Robo'nun bu Robo komut dosyasını uyguladığı tarama aşaması. Varsayılan olarak, ana tarama aşamasıdır.
priority Bu Robo komut dosyasının diğer Robo komut dosyalarına kıyasla önceliği. Varsayılan olarak tüm Robo komut dosyalarının önceliği 1 şeklindedir.
maxNumberOfRuns Robo'nun bir tarama sırasında 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şulunun her zaman karşılandığı kabul edilir.
actions Bu Robo komut dosyasının tüm işlemleri.

Tek bir dosya, bir veya daha fazla Robo komut dosyasından oluşan bir koleksiyon içerir.

Aşağıda, her biri bir taramanın başında bir kez yürütülen tek bir işlem içeren 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 tanımlayıcısı

Bağlam tanımlayıcısı, bir RoboScript'i tetikleyen bağlamı veya koşulu bir veya birkaç özelliğin kombinasyonunu kullanarak 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" elementDescriptors ile eşleşen bir kullanıcı arayüzü widget'ının ekranda bulunduğundan ve işaretli olduğundan emin olur.
"condition": "app_under_test_shown" Test edilen uygulamanın ön planda çalışıp çalışmadığını kontrol eder.
"condition": "default_launcher_shown" Cihazın ana ekranının gösterilip gösterilmediğini (yani ön planda uygulama çalışıp çalışmadığını) kontrol eder.
"condition": "non_roboscript_action_performed" Robo test tarafından gerçekleştirilen son nonRoboscriptActionCount art arda işlemin, Robo komut dosyası işlemleri olmadığından emin olur.
negateCondition true olarak ayarlanırsa condition değerini reddeder. Örneğin, bir kullanıcı arayüzü widget'ının ekranda OLMADIĞINI veya test edilen uygulamanın ön planda OLMADIĞ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 birlikte kullanılamaz. Daha fazla bilgi için Öğe tanımlayıcılar bölümüne bakın.
visionText Ekrandaki metin, Optik Karakter Tanıma (OCR) API'si kullanılarak algılanır. visionText, element_present koşuluyla birlikte kullanılır. elementDescriptors ile birlikte kullanılamaz.
nonRoboscriptActionCount Önceden gerçekleştirilen ardışık Robo dışı komut dosyası işlemlerinin sayısı. Her nonRoboscriptActionCount Robo işleminden sonra bir 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ü belirtir (ör. tıklama, metin düzenleme vb.). Her işlem için gereklidir.
elementDescriptors Kullanıcı arayüzü widget'ını tanımlayan tanımlayıcılardır. Belirli bir düğmeyi tıklamak gibi hedef kullanıcı arayüzü widget'ı olan tüm işlemler için gereklidir.
optional true olarak ayarlanırsa bu işlem yapılamadığında atlanır. Örneğin, bu işlem, hedef kullanıcı arayüzü widget'ını ekranda bulamadığı zaman atlanır. Bu durumda, içeren RoboScript başarısız olmaz. Varsayılan değer false'tür.
replacementText Hedef kullanıcı arayüzü widget'ına girilmesi gereken metin. Metin düzenleme işlemleri için gereklidir.
swipeDirection Kaydırma yönünü belirtir. Kaydırma işlemleri için gereklidir.
delayTime Milisaniye cinsinden ne kadar bekleneceğini belirtir. Bekleme işlemleri için gereklidir.
pointTapXCoordinate ve pointTapYCoordinate Dokunulan noktanın piksel X ve Y koordinatları. pointTapXPercent ve pointTapYPercent ile birbirini dışlar. Noktaya dokunma işlemleri için gereklidir.
pointTapXPercent ve pointTapYPercent Dokunulan noktanın yüzde X ve Y koordinatları. pointTapXCoordinate ve pointTapYCoordinate ile karşılıklı olarak birbirini dışlar. Üzerine dokunma işlemleri için gereklidir.

Aşağıda, hedef kullanıcı arayüzü widget'ları içermeyen 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

Öğe tanımlayıcısı, aşağıdaki tanımlama özelliklerinden birini veya daha fazlasını kullanarak kullanıcı arayüzü widget'ını tanımlar:

Özellik Açıklama
className
ancestorClassName Öğenin kullanıcı arayüzü hiyerarşisi atasal sınıfının 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ımlanmaz. Örneğin, bir düğmede metin ve içerik açıklaması olmayabilir. Bazı özellik değerleri mevcut olsa bile belirli bir uygulama ekranında (resourceId dahil) benzersiz olmayabilir.

Örneğin, bir listenin öğeleri arasında ayrım yapmak genellikle yalnızca üst widget'larındaki farklı alt konumlarını kullanarak mümkündür. Bu, bir kullanıcı arayüzü widget'ını tanımlamak için genellikle tek bir öğe tanımlayıcısı kullanılmasının yeterli olmadığı anlamına gelir. Bu nedenle, bir işlemin elementDescriptors özelliği, ilk öğenin hedef kullanıcı arayüzü widget'ına, ikinci öğenin hedef kullanıcı arayüzü widget'ının üst widget'ına karşılık gelecek şekilde sıralanmış bir dizi öğe tanımlayıcısı 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. 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, bir Robo komut dosyasında işlem 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 uygulanan yürütme seçenekleri:
    • strict: true olarak ayarlanırsa Robo komut dosyası kısmi eşleştirme, mevcut işlemi atlama ve askıya alma işlemlerini kullanmaz. Yani Robo komut dosyası normal bir enstrümantasyon testi olarak yürütülür ve işlemlerinden herhangi biri yapılamadığında hemen başarısız olur. Varsayılan olarak false'tir.
    • dismiss_popups: true olarak ayarlanırsa Robo testi, strict modunda bile Robo komut dosyasını gerçekleştirirken beklenmedik tüm iletişim kutularını kapatır. Bu seçenek, strict modunda değilken etkisizdir. Varsayılan olarak false şeklindedir.
    • notify: false olarak ayarlanırsa Robo komut dosyası, yürütülmesinin başında ve sonunda ekranda bildirim göstermez. Varsayılan olarak true değerini alır.
  • 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 ardından tarama durdurulan ekran bildirimleri olmadan yürütülen 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 testinde bir Robo komut dosyasında yer tutucu olarak kullanılır ve Robo testi, yürütülmek üzere bu Robo komut dosyasını yüklediğinde gerçek değerle değiştirilir. Şablon parametrelerinin başına çift alt çizgi ve ardından yüzde işareti, sonuna ise yüzde işareti ve ardından çift alt çizgi eklenir.

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

  • __%APP_PACKAGE_NAME%__: Test edilen uygulamanın paket adı.

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

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

Yorumlar

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, bir Robo komut dosyasının tüm işlemleri tamamlanana (veya en azından denenene) kadar Robo komut dosyası etkin kalır. Robo testi, gerçekleştirilecek bir işlem seçerken Robo komut dosyası işlemiyle eşleştirme yapmaya devam eder. Robo komut dosyası, sağlamlığı 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ştirilemezse eşleşme ölçütleri gevşetilir ve eşleşme yeniden denenir. Kısmi eşleme, bir Robo komut dosyası işleminin hedef kullanıcı arayüzü widget'ını eşlerken en dıştaki öğe tanımlayıcısı dikkate alınmaz.

Kısmi eşleşme başarılı olursa ilgili Robo komut dosyası işlemi normal şekilde 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.

Mevcut işlemi atla Mevcut Robo komut dosyası işlemi tam 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 testi, mevcut Robo komut dosyası işlemini atlar (ve asla geri dönmez) ve sonraki işlemi gerçekleştirir.

Bu teknik, uygulama davranışının sürümler arasında değiştiği veya kararsız olduğu senaryoları destekler. Örneğin, bir Robo komut dosyasının kaydedilmesi ve yeniden oynatılması sırasında aralıklı bir iletişim kutusunun farklı ekranlarda görünmesi gibi.

Askıya al Mevcut veya sonraki Robo komut dosyası işlemleri tamamen veya kısmen eşleşemezse Robo komut dosyası geçici olarak askıya alınır ve Robo testi, 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ı herhangi bir sayıda işlem için askıya alınır. Bu nedenle, Robo komut dosyalarının bir Robo testi için mutlaka prolog olması gerekmez ve Robo komut dosyası işlemlerini standart Robo testi işlemlerine ekleyebilirsiniz. Bu teknik, uygulama davranışının kararsız olduğu veya uygulama sürümleri arasındaki değişikliklerin Robo testin standart işlemleriyle "boşlukları doldurması" gerektiği 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ğine sahip olmalıdır.
  2. En yüksek priority değerine sahip (varsayılan olarak tüm Robo komut dosyaları, 1 için aynı yürütme priority değerine 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
      }
    ]
  }
]

Test edilen uygulama ön plandayken Robo aşağıdakileri sırayla tetikler:

  1. "Robo script 2" en yüksek önceliğe sahip olduğu için.
  2. "Robo script 1", aynı önceliğe sahip kalan geçerli Robo komut dosyaları arasında daha önce göründüğü için
  3. "Robo script 3" uygun son Robo komut dosyası olarak kullanılacak.

Tekrarlanan koşular

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

Aşağıda, test edilen uygulamayı 10 kata kadar arka plana alan 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ılmadan ve test edilen uygulamayı taramaya başlamadan önce.
post_crawl Robo, test edilen uygulamayı taramayı tamamladıktan sonra. post_crawl Robo komut dosyası 15 saniyeyi aşmamalıdır. Aksi takdirde tarama zaman aşımıyla sonlandırılabilir.
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 tüm olası işlemler keşfedilir. Robo, varsayılan olarak geri tuşuna basar. Bu, bazı senaryolarda istenmeyen bir durumdur.

Bir Robo komut dosyasının crawlStage özelliği belirtilmemişse crawl olduğu varsayılır.

Aşağıda, Robo'nun taramaya başlamasından önce test edilen uygulamanın 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 işlemler

Robo komut dosyası koşullu işlemler içerebilir. Koşullu işlemlerin, Robo'nun bunları nasıl gerçekleştirdiğini açıklayan üç ek özelliği vardır:

Özellik Açıklama
priority Bu koşullu işlemin, içeren Robo komut dosyasındaki diğer koşullu işlemlere kıyasla önceliği. Varsayılan olarak tüm koşullu işlemlerin önceliği 1'tür.
maxNumberOfRuns Bu koşullu işlemin, kapsayıcı Robo komut dosyasının bir yürütmesi sırasında kaç kez yapılabileceğ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ın contextDescriptor ile aynı yapıya sahiptir ve benzer özellikler sunar.

Robo komut dosyası tetiklendiğinde, koşulsuz işlemlerini görünme sırasına göre tek tek gerçekleştirir. Robo komut dosyası koşullu işlemler içeriyorsa gerçekleştirilecek koşullu olmayan işlem seçilmeden önce her seferinde bunlar dikkate alınır. Herhangi bir koşullu işlem tetiklenirse ve önceliğine ve kalan çalıştırma sayısına göre 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. Bir Robo komut dosyasının geçerli olması için en az bir koşulsuz işlem içermesi gerekir.

Aşağıda, Robo komut dosyası yürütülmesi sırasında herhangi bir noktada gösterilen pop-up iletişim kutularını kapatan koşullu bir işlem içeren 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
    }
}

İşlemleri yoksayma

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 "işlemleri" yoksayıyor olarak gösterilir.

Atlama işlemleri içeren bir Robo komut dosyasının contextDescriptor özelliği belirli bir ekranla eşleştiğinde Robo, atlama işlemleri tarafından hedeflenen kullanıcı arayüzü widget'larıyla etkileşime girmez (Başka bir Robo komut dosyası işlemi Robo'nun, atlanan kullanıcı arayüzü widget'larından birinde işlem yapmasını sağlamadığı sürece).

Robo komut dosyası, yok sayma, koşullu ve koşulsuz işlemlerin bir karışımını içerebilir. Diğer Robo komut dosyası işlemlerinin aksine, yoksayma işlemleri, priority ve maxNumberOfRuns özelliklerinin değerlerine bakılmaksızın, içeren Robo komut dosyasının contextDescriptor değeri bir Robo taraması sırasında bir ekranla eşleştiğinde uygulanır.

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

[
  {
    "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 çocukları dinamik olarak yüklenir ve mevcut ekrandan çok uzakta gösterilebilir. 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 öğeyi ekrana getirmek için gereken kaydırma sayısına güvenmek ve ardından öğenin ekrandaki konumunu kullanmak 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 klasörlerindeki işlemler, aşağıdaki adımlarla gerçekleştirilir:

  1. Robo test, ilgili alt öğenin, içeren RecyclerView veya AdapterView'da bir konumlandırma işlemi aracılığıyla ekranda gösterilmesini sağlar.

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

Aşağıda, bir AdapterView (android.widget.GridView) alt öğesinde 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, bir RecyclerView (android.support.v7.widget.RecyclerView) alt öğesinde tıklama işlemi örneği 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ı kaydedip bunu Test Lab uygulamasında çalıştırın

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 konumuna yükleyebilir ve testi uygun şekilde çalıştırabilirsiniz.

Komut dosyası ekli bir Robo testi çalıştırdığınızda Robo test, önce önceden komut verilmiş işlemlerinizi uygular, ardından uygulamayı normal bir şekilde keşfeder.

Android Studio'da Robo komut dosyası JSON dosyası oluşturmak için Android Studio'da Test Lab kullanarak Robo komut dosyası kaydetme başlıklı makaledeki adımları uygulayın.

Robo komut dosyası işlemleri

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

  • description: Bu Robo komut dosyası işleminin Robo testi çıkışlarında yürütülmesini izlemeye yardımcı olur.

Onaylama

İddia edilen koşul doğruysa Robo komut dosyası bir sonraki işleme devam eder. Bu işlem başka bir iddia olabilir. Aksi takdirde, Robo komut dosyası yürütme işlemi başarısız bir onay nedeniyle durdurulur.

Aşağıdaki tabloda zorunlu ö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 bulunup bulunmadığını kontrol eden bir Robo komut dosyası beyanı ö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 zorunlu özellikler listelenmiştir:

Özellik Açıklama
eventType Robo komut dosyası işleminin türünü belirtir.
"eventType": "VIEW_CLICKED" Test edilen uygulamanın hedef öğesini tıklar.
"eventType": "SOFT_KEYBOARD_CLICK" Dokunmatik klavyenin 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 birlikte kullanılamaz.
visionText OCR'yi kullanarak tıklanan öğeyi tanımlar. elementDescriptors ile birlikte kullanılamaz.
matchIndex Hedef öğe visionText kullanılarak tanımlandığında eşleşen hedef öğenin oluşumunun dizesini belirtir. 0 ise Robo komut dosyası işlemi, eşleşen ilk öğeyi seçer. 1 ise Robo komut dosyası işlemi, eşleşen ikinci öğeyi seçer ve bu şekilde devam eder. Sıralama soldan sağa, yukarıdan aşağıya doğru belirlenir. Varsayılan değer 0'tür (ilk eşleşme seçilir).
maxNumberOfRuns eventType SOFT_KEYBOARD_RANDOM_CLICK olduğunda, dokunmatik klavyenin rastgele bir öğesinin kaç kez tıklanacağını belirtir. Varsayılan değer: 1.

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 kullanılarak bir ekranda algılanan "Search" kelimesinin ikinci oluşumunu tıklayan bir Robo komut dosyası işlemi örneği verilmiştir:

{
  "eventType": "VIEW_CLICKED",
  "visionText": "Search",
  "matchIndex": 1
}

Aşağıda, "Emoji button" içerik açıklaması içeren bir sanal klavye öğesini tıklayan bir 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, dokunmatik klavyeyi 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. Varsayılan olarak boş bir dizedir. Bu, çıktının kontrol edilmediği anlamına gelir.

Aşağıda, test edilen uygulamanın 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 verin

Bu işlem, Espresso Test Recorder ile geriye dönük uyumluluk için Android Studio'daki Robo komut dosyası kaydedici 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 zorunlu özellikler listelenmiştir:

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

Ekrandaki tüm öğeleri yoksayma

Bu işlem, Robo'nun herhangi bir ekrandaki Robo komut dosyasını tetikleyen tüm öğeleri yoksaymasına neden olur.

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

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

Aşağıda, Robo'nun ekrandaki tüm öğeleri yok saymasını sağlayan bir Robo komut dosyası işlemi örneği verilmiştir:

{
  "eventType": "ALL_ELEMENTS_IGNORED"
}

Öğeleri yoksayma

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

Aşağıdaki tabloda zorunlu ö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 olarak ayarlanırsa Robo, göz ardı edilen 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 zorunlu ö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" kullanıcı, belirli bir 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 girilmesi gereken 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 birbirine
visionText Uzun süre tıklanan öğeyi OCR kullanarak tanımlar. elementDescriptors ile birlikte kullanılamaz.
matchIndex Hedef öğe visionText kullanılarak tanımlandığında eşleşen hedef öğenin oluşumunun dizesini belirtir. 0 ise Robo komut dosyası işlemi, eşleşen ilk öğeyi seçer. 1 ise Robo komut dosyası işlemi, eşleşen ikinci öğeyi seçer ve bu şekilde devam eder. Sıralama, soldan sağa, yukarıdan aşağıya, yukarıdan aşağıya belirlenir. Varsayılan değer 0'tür (ilk eşleşme seçilir).

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 bir kullanıcı arayüzü widget'ını beş saniye boyunca tıklayan bir Robo komut dosyası işlemi örneği verilmiştir:

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

Tek noktalı hareket yapma

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 olarak ayarlanırsa tek noktalı hareket, sürükle ve bırak işlemi gerçekleştirir. Varsayılan olarak false değerini alır.

Aşağı kaydırma yapan bir Robo komut dosyası tek noktalı hareket işlemi örneği aşağıda verilmiştir:

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

İki parmakla yapılan hareketleri gerçekleştirme

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

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

Aşağıda, yakınlaştırma hareketi gerçekleştiren bir Robo komut dosyası işlemi örneği 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'ının Giriş Yöntemi Düzenleyicisi'nde (IME) geçerli işlem düğmesine (ör. sonraki, bitti ve arama) basar.

Aşağıdaki tabloda zorunlu ö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 bir kullanıcı arayüzü widget'ında IME işlemi gerçekleştiren bir Robo komut dosyası işlemi örneği verilmiştir:

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

Geri tuşuna basın

Aşağıdaki tabloda zorunlu ö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'daki Robo komut dosyası kaydedici tarafından API 28'li emülatörlerde geri tuşuna basmak için kullanılır.

Aşağıda, geri tuşuna basan bir Robo komut dosyası işlemi örneği verilmiştir:

{
  "eventType": "PRESSED_BACK"
}

Ana ekrana basın

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

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

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

Aşağıda, ana ekrana basan bir Robo komut dosyası işlemi örneği verilmiştir:

{
  "eventType": "GO_HOME"
}

Bir öğeyi kaydırarak görüntüleme

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

Aşağıdaki tabloda zorunlu ö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 Robo komut dosyası işlemine bir örnek verilmiştir. Bu işlem, 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 sınırına ulaşılana) kadar devam eder:

{
  "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 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ırma özelliğine bağlı olarak Up veya Left değerini alır.
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 bir Robo komut dosyası işlemi örneği verilmiştir:

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

Ekran görüntüsü alma

Aşağıdaki tabloda zorunlu ö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 zorunlu özellikler listelenmiştir:

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

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

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

Bir öğedeki bir noktaya dokunma

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 zorunlu özellikler listelenmiştir:

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

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

{
  "eventType": "TERMINATE_CRAWL"
}

Bekle

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

Özellik Açıklama
"eventType": "DELAYED_MESSAGE_POSTED" --
delayTime Beklemenin ne kadar süreceğ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 testin belirtilen zaman aşımına kadar bir öğenin ekranda görünmesini 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, "my.app.package:id/confirmation_button" kaynak kimliğine sahip bir kullanıcı arayüzü widget'ının ekranda görünmesi için 30 saniyeye kadar bekleyen bir Robo komut dosyası işlemi örneği verilmiştir:

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

Sonraki adımlar