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ı kaydı ö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 başlıklı makaleyi inceleyin.

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 bir kullanıcının 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 regex)

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

  • Test edilen uygulama gösterilir.
  • Öğe mevcut
  • Robo dışı komut dosyası işlemi gerçekleştirildi

Yapı

Robo komut dosyalarında, Robo'nun komut dosyasını nasıl yürüttüğünü açıklayan çeşitli özellikler bulunur. 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'tür.
maxNumberOfRuns Bir tarama sırasında Robo'nun bu Robo komut dosyasını kaç kez yürütebileceğini belirtir. Robo, varsayılan olarak bir Robo komut dosyasını bir kez 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 veya visionText tarafından belirtilen metinle eşleşen bir kullanıcı arayüzü widget'ının olup olmadığını kontrol eder.
"condition": "element_disabled" elementDescriptors ile eşleşen bir kullanıcı arayüzü widget'ının ekranda olup olmadığını ve bu widget ile etkileşim kurulamadığı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 bulunup bulunmadığını veya test edilen uygulamanın ön planda çalışıp çalışmadığını 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ıyor. 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. Varsayılan olarak 1 değerini alır.

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 algılanan "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

Bir Robo komut dosyasında her işlem, aşağıdaki tabloda açıklanan bir veya daha fazla özellik-değer çifti paketi 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. Bekle işlemler için gereklidir.
pointTapXCoordinate ve pointTapYCoordinate Dokunulan noktanın piksel X ve Y koordinatları. pointTapXPercent ve pointTapYPercent ile karşılıklı olarak birbirini dışlar. Noktaya dokunma işlemleri için gereklidir.
pointTapXPercent ve pointTapYPercent Dokunulan noktanın yüzdelik X ve Y koordinatları. pointTapXCoordinate ve pointTapYCoordinate ile karşılıklı olarak birbirini dışlar. Noktaya dokunma işlemleri için gereklidir.

Aşağıda, hedef kullanıcı arayüzü widget'ı 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ı. Ata, öğenin kendisi de dahil olmak üzere öğenin kullanıcı arayüzü hiyerarşisindeki üst öğelerden 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österilir)
textRegex text ile eşleşecek Java normal ifadesi.
groupViewChildPosition, recyclerViewChildPosition veya adapterViewChildPosition Üst widget'ının türüne bağlı olarak kullanıcı arayüzü widget'ının 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şisi ile 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 temsili 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 değerini alır.
    • 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. Varsayılan olarak false değerini alır.

Aşağıda, ekranda bildirim gösterilmeden strict modunda çalıştırılan ve üç saniye bekledikten sonra taramanın durduğu 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 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 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, uygulama yapısının değiştiği senaryoları destekler. Örneğin, ekran öğeleri yeniden düzenlendiğinde uygulama sürümleri arasında.

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ı tetiklenebilirse aşağıdaki sırayla aşağıdaki Robo komut dosyası seçilerek öncelik 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 dosyası listesinde en erken görünen komut dosyasıdır.

Aşağıda, aynı işlemi gerçekleştiren ve aynı koşul tarafından (test edilen uygulamanın ön planda olması) tetiklenen üç Robo komut dosyasının bulunduğu 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" olarak ayarlanır.

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 geçerlidir:

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 edilen 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, bir onay iletişim kutusundan geri dönmeye (geri izleme) çalıştığında Robo'ya "Cancel" düğmesini tıklamasını bildiren 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, içeren Robo komut dosyasının bir yürütmesi sırasında kaç kez yapılabileceği. Varsayılan olarak tüm koşullu işlemler, bunları içeren Robo komut dosyasının tek bir yürütmesinde 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. Bir Robo komut dosyası koşullu işlemler içeriyorsa, koşullu olmayan bir işlem seçilmeden önce her seferinde bu işlemler 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 kullanıcı arayüzü widget'larını veya belirli bir ekrandaki tüm kullanıcı arayüzü widget'larını yoksaymasına yönelik talimatlar içerebilir. Bu talimatlar, "işlemleri" eventType ELEMENT_IGNORED ve ALL_ELEMENTS_IGNORED ile 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 boyutu ve bu çocuğa ulaşmak için gereken kaydırma sayısı farklı cihaz form faktörlerinde farklı olduğundan, çocuğun mutlak olan veri konumuna güvenmek çok daha sağlam bir yaklaşımdı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ı, Robo komut dosyası işlemlerinin hedefi olan AdapterView alt öğelerinin mutlak veri konumlarını da adapterViewChildPosition olarak yakalar.

RecyclerView ve AdapterView alt öğelerindeki işlemler aşağıdaki adımlarda gerçekleştirilir:

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

  2. Robo test, kaydedilen işlemi zaten ekranda gösterildiği için doğrudan alt öğede 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 bir Robo komut dosyası kaydedip Test Lab

Android Studio'da Robo komut dosyası oluşturabilirsiniz. Bu komut dosyası, JSON dosyası olarak kaydedilir. Ardından, JSON dosyasını uygulamayla birlikte 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 testi ö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, başarısız bir onay nedeniyle Robo komut dosyası yürütme işlemi durdurulur.

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

Özellik Açıklama
"eventType": "ASSERTION" --
contextDescriptor İddia edilen bağlamı veya koşulu açıklar. Robo komut dosyasının contextDescriptor ile aynı yapıya sahiptir ve benzer işlevler sunar.

Aşağıda, test edilen uygulamanın ön planda olup olmadığını kontrol eden bir Robo komut dosyası beyanı ö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 bir ekranda "Settings"'ün algılanıp algılanmadığını kontrol eden bir Robo komut dosyası beyanı örneği 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 keze kadar tıklar.
"eventType": "LIST_ITEM_CLICKED" Android Studio'daki Robo komut dosyası kaydedici 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şlemi örneği 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 bir Robo komut dosyası işlemi örneği verilmiştir:

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

Sanal klavyeyi devre dışı bırakma

Aşağıdaki tabloda zorunlu ö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 shell komutunu yürütme

Aşağıdaki tabloda zorunlu ö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: Komutun Java normal ifadesi olarak beklenen çıkışı. Sonuç 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 test edilen uygulamaya tüm izinleri verir. Bu nedenle, bu işlem hiçbir işlem yapmaz. 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 zorunlu ö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. Varsayılan olarak false değerini alır.

Aşağıda, Robo'nun içerik açıklamaları "Avatar" ile başlayan tüm öğeleri yoksaymasını sağlayan bir Robo komut dosyası işlemi örneği 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, "John" değerini kaynak kimliği "com.google.samples.apps.topeka:id/first_name" olan bir kullanıcı arayüzü widget'ına gönderen bir 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 zorunlu ö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 doğru 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 tıklama süresini 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 zorunlu özellikler listelenmiştir:

Özellik Açıklama
"eventType": "ONE_POINT_GESTURE" --
coordinates Yüzde veya piksel olarak "(x1, y1)->(x2,y2)" şeklinde biçimlendirilmiş,tek noktalı bir hareket için 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 zorunlu ö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'deki 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 artık kaydırılamayana 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şisi kullanılarak kaydırılacak kullanıcı arayüzü widget'ını tanımlar.

Aşağıda, ekranda "Orange" metnini içeren kullanıcı arayüzü widget'ı görünene kadar (veya daha fazla kaydırma yapılamayana ya da maksimum 50 kaydırma sayısına ulaşılana kadar) "my.app.package:id/scrollable_card_container" kaynak kimliğine sahip kullanıcı arayüzü widget'ını kaydıran bir Robo komut dosyası işlemi örneği 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 zorunlu ö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ırma özelliğine bağlı olarak Down ya da Right.
  • Backward: Hedef kullanıcı arayüzü widget'ının dikey veya yatay kaydırılabilirliğine bağlı olarak Up ya da 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 bir Robo komut dosyası işlemi örneği 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üzdelik X koordinatı. pointTapXCoordinate ve pointTapYCoordinate ile birbirini dışlar.
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 zorunlu özellikler listelenmiştir:

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

Aşağıda, bir arama çubuğunun kaydırma çubuğunu sağa hareket ettiren bir Robo komut dosyası işlemi örneği verilmiştir:

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

Taramayı sonlandırma

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 Milisaniye cinsinden ne kadar bekleneceğini belirtir.

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

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

Öğeyi bekleme

Bu işlem, Robo testin belirtilen zaman aşımına kadar bir öğenin ekranda görünmesini beklemesini sağlar.

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