Robo komut dosyaları referans kılavuzu

Bu belgede, Robo komut dosyalarıyla ilgili referans bilgileri (ör. yapı, özellikler, kullanım, kayıt ve işlemler) yer almaktadır. 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 betiği, kullanıcı arayüzü (UI) ve diğer işlemlerin sırasını açıklayan bir JSON dosyasıdır.

Robo senaryosunu aşağıdaki yöntemlerle oluşturabilirsiniz:

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

Aşağıda, test edilen uygulama başlatıldığında tetiklenen ve kullanıcıyı bir uygulamada oturum açmaya yönlendiren bir Robo senaryosu ö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 komut dosyası yukarıdaki örnekte olduğu gibi varsayılan app_under_test_shown tetikleme koşuluna sahipse Robo komut dosyasını 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+ desteği

iOS+ (Beta) için Robo, Robo komut dosyaları için sınırlı destek sunar. iOS+ için Robo komut dosyası söz dizimi, Android söz dizimiyle aynıdır ve desteklenen iOS+ özellikleri, Android'deki benzerleriyle aynı şekilde çalışır.

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

  • Onaylama
  • Tıklama
  • Uzun tıklama
  • Kaydırın
  • 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+'ta desteklenir:

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

iOS+ sürümlerinde aşağıdaki bağlam tanımlayıcılarındaki tetikleme koşulları desteklenir:

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

Yapı

Robo komut dosyası, Robo'nun komut dosyasını nasıl yürüttüğünü açıklayan çeşitli özelliklere sahiptir. Bu özelliklerin çoğu isteğe bağlıdır ve önceden tanımlanmış varsayılan değerlere sahiptir:

Özellik Açıklama
id Bu Robo komut dosyasının tarama çıktılarında izlenmesine yardımcı olan bir tam sayı. Robo'da kendi id'lerine sahip yerleşik Robo komut dosyaları bulunur. Farklı Robo komut dosyalarındaki aynı id, davranışlarını etkilemese de tarama çıktılarında bu Robo komut dosyalarındaki işlemleri ayırt etmek zor olabilir. Çakışmaları önlemek için Robo komut dosyalarınıza benzersiz bir id of 1000 veya daha yüksek bir değer atamanızı öneririz.
description id özelliğine benzer ancak daha açıklayıcıdır.
crawlStage Robo'nun bu Robo komut dosyasını uyguladığı tarama aşaması. Varsayılan olarak, bu, 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 senaryolarının önceliği 1'dır.
maxNumberOfRuns Robo'nun tarama sırasında bu Robo komut dosyasını kaç kez yürütebileceğini belirtir. Varsayılan olarak Robo, Robo komut dosyasını bir kez çalıştırabilir.
contextDescriptor Bu Robo senaryosunu tetikleyen bağlamı veya koşulu açıklar. Atlanırsa bu Robo senaryosunun tetikleme koşulunun her zaman karşılandığı kabul edilir. Diğer bir deyişle, Robo senaryosu koşulsuz olarak çalışır.
actions Bu Robo senaryosunun tüm işlemleri.

Tek bir dosya, bir veya daha fazla Robo komut dosyası koleksiyonu içerir.

Aşağıda, her biri taramanın başında bir kez yürütülen tek bir işlem içeren iki koşulsuz Robo komut dosyası bulunan 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 Robo komut dosyasını tetikleyen bağlamı veya koşulu tanımlar. Bu tanımlama, bir veya birkaç özelliğin kombinasyonu kullanılarak yapılır:

Özellik Açıklama
"condition": "always" Her zaman bir Robo senaryosunu tetikler.
"condition": "element_present" elementDescriptors ile eşleşen veya visionText tarafından belirtilen metne sahip bir kullanıcı arayüzü widget'ının ekranda bulunup bulunmadığını kontrol eder.
"condition": "element_disabled" elementDescriptors ile eşleşen bir kullanıcı arayüzü widget'ının ekranda bulunduğunu ve bu widget'la etkileşimde bulunulamadığını kontrol eder.
"condition": "element_checked" elementDescriptors ile eşleşen bir kullanıcı arayüzü widget'ının ekranda bulunduğunu ve işaretlendiğini kontrol eder.
"condition": "app_under_test_shown" Test edilen uygulamanın ön planda çalıştığını kontrol eder.
"condition": "default_launcher_shown" Cihazın ana ekranının gösterildiğini kontrol eder. Bu, hiçbir uygulamanın ön planda çalışmadığı anlamına gelir.
"condition": "non_roboscript_action_performed" Robo test tarafından gerçekleştirilen son nonRoboscriptActionCount ardışık işlemin Robo komut dosyası işlemi olmadığını kontrol eder.
negateCondition true olarak ayarlanırsa condition değerini olumsuzlar. Örneğin, bir kullanıcı arayüzü widget'ının ekranda OLUP OLMADIĞINI veya test edilen uygulamanın ön planda ÇALIŞIP ÇALIŞMADIĞINI kontrol etmek için bu özelliği kullanabilirsiniz.
elementDescriptors Ekranda bir kullanıcı arayüzü widget'ını tanımlayan bir veya daha fazla öğe tanımlayıcısı. element_present, element_disabled ve element_checked koşullarıyla birlikte kullanılır. visionText ile karşılıklı olarak hariç tutulur. Daha fazla bilgi için Öğe tanımlayıcıları bölümüne bakın.
visionText Ekranda yer alan metin, Optik Karakter Tanıma (OCR) API'si kullanılarak algılanır. visionText, element_present koşuluyla birlikte kullanılır. elementDescriptors ile karşılıklı olarak hariç tutulur.
nonRoboscriptActionCount Daha önce gerçekleştirilen ardışık olmayan Robo 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 bu değer 1'dır.

Aşağıda, ekranda kaynak kimliği "my.app.package:id/page_header" olan 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) ile 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, her komut dosyası dışı 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" : "WAIT",
      "delayTime" : 5000
    }]
}

İşlemler

Robo komut dosyasındaki her işlem, aşağıdaki tabloda açıklanan bir veya daha fazla özellik-değer çifti paketi olarak gösterilir:

Özellik Açıklama
eventType İşlemin türünü (ör. tıklama, metin düzenleme vb.) belirtir. Her işlem için zorunludur.
elementDescriptors Bir kullanıcı arayüzü widget'ını tanımlayan tanımlayıcılar. Belirli bir düğmeyi tıklama gibi hedef kullanıcı arayüzü widget'ı olan tüm işlemler için gereklidir.
optional true olarak ayarlanırsa bu işlem gerçekleştirilemediğinde atlanır. Örneğin, bu işlem, hedef kullanıcı arayüzü widget'ı ekranda bulunamadığında atlanır ancak içeren Robo komut dosyası başarısız olmaz. Varsayılan olarak, bu değer false'dır.
replacementText Hedef kullanıcı arayüzü widget'ına girilecek metin. Metin düzenleme işlemleri için gereklidir.
swipeDirection Kaydırma yönünü belirtir. Kaydırma işlemleri için gereklidir.
delayTime Beklenecek süreyi milisaniye cinsinden belirtir. Bekleme işlemleri 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. Nokta dokunma işlemleri için gereklidir.
pointTapXPercent ve pointTapYPercent Dokunulan noktanın X ve Y koordinatlarının yüzdesi. pointTapXCoordinate ve pointTapYCoordinate ile aynı anda kullanılamaz. Nokta dokunma işlemleri için gereklidir.

Aşağıda, hedef kullanıcı arayüzü widget'ları olmayan iki işleme sahip bir Robo senaryosu örneği verilmiştir. Bu, işlemlerin belirli bir kullanıcı arayüzü widget'ında çalışmadığı anlamına gelir:

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

Öğe tanımlayıcıları

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

Özellik Açıklama
className
ancestorClassName Öğenin kullanıcı arayüzü hiyerarşisindeki üst öğesinin sınıf adı. Bir öğenin kullanıcı arayüzü hiyerarşisindeki üst düğümlerin tümü (öğenin kendisi dahil) üst öğe olarak kabul edilir.
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 Bir kullanıcı arayüzü widget'ının, üst widget'ının türüne bağlı olarak alt konumunu gösterir.

Bu özellikler genellikle tanımlanmamıştır. Ö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 listedeki öğeler arasında ayrım yapmak genellikle yalnızca üst widget'larındaki farklı alt konumları kullanılarak mümkündür. Bu nedenle, bir kullanıcı arayüzü widget'ını tanımlamak için yalnızca bir öğe tanımlayıcısı kullanmak genellikle yeterli değildir. Bu nedenle, bir işlemin elementDescriptors özelliği, öğe tanımlayıcılarının bir dizisini içerir. Bu dizi, ilk öğe hedef kullanıcı arayüzü widget'ına, ikinci öğe hedef kullanıcı arayüzü widget'ının üst widget'ına karşılık gelecek şekilde sıralanır. Bir işlemin hedef kullanıcı arayüzü widget'ı, öğe tanımlayıcılarının tümü ilgili kullanıcı arayüzü widget'ı alt hiyerarşisiyle eşleştiğinde eşleştirilir.

Aşağıda, hem metin değişikliği hem de tıklama işlemleri içeren bir Robo senaryosu örneği verilmiştir. Her ikisi de hedef kullanıcı arayüzü widget'ını, sağlanan öğe tanımlayıcılarını kullanarak 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ındaki işlemler listesinin başına, 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 olarak ayarlanırsa Robo komut dosyası true, kısmi eşleşme, mevcut işlemi atlama ve askıya alma özelliklerini kullanmaz. Yani Robo komut dosyası normal bir enstrümantasyon testi olarak yürütülür ve işlemlerinden herhangi biri gerçekleştirilemediği anda başarısız olur. Varsayılan olarak false'dır.
    • dismiss_popups: true olarak ayarlanırsa Robo testi, strict modunda bile Robo komut dosyasını yürütürken beklenmedik iletişim kutularını kapatır. Bu seçenek, strict modunda değilken etkisizdir. Varsayılan olarak bu değer false'dı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'dır.
  • postscript - Robo komut dosyası tamamlandıktan sonra uygulanan yürütme seçenekleri:
    • terminate: true olarak ayarlanırsa Robo komut dosyası tamamlandıktan sonra Robo testi taramayı durdurur. Varsayılan olarak false'dır.

Aşağıda, strict modunda ekran üstü bildirimler olmadan yürütülen 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": "WAIT",
    "delayTime": 3000
  }
]

Şablon parametreleri

Şablon parametresi, bir Robo komut dosyasındaki yer tutucudur. Robo testi, yürütme için bu Robo komut dosyasını yüklediğinde yer tutucunun yerine gerçek değer eklenir. Şablon parametrelerinin önüne çift alt çizgi ve ardından yüzde işareti eklenir, 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çtiğinde her zaman bir Robo komut dosyası işlemiyle eşleşmeye çalışır. Robo komut dosyası, sağlamlığı artırmak için aşağıdaki teknikleri kullanır:

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

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

Mevcut işlemi atla Mevcut Robo komut dosyası işlemi tamamen veya kısmen eşleştirilemiyorsa 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, Robo komut dosyası kaydı ve yeniden oynatma sırasında farklı ekranlarda aralıklı olarak bir iletişim kutusu görünebilir.

Askıya al Mevcut veya sonraki Robo komut dosyası işlemlerinin hiçbiri tamamen ya da kısmen eşleştirilemezse Robo komut dosyası geçici olarak askıya alınır ve Robo testi, diğer stratejilerini kullanarak gerçekleştirilecek 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ınmış durumda kalır. Bu nedenle, Robo komut dosyalarının Robo testi için giriş olması gerekmez ve Robo komut dosyası işlemlerini standart Robo testi işlemleriyle birlikte kullanabilirsiniz. Bu teknik, uygulama davranışının kararsız olduğu veya uygulama sürümleri arasındaki değişikliklerin Robo testinin standart işlemleriyle "boşlukları doldurması" gerektirecek kadar büyük olduğu senaryoları destekler.

Öncelikler

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

  1. contextDescriptor özelliği içeriyor.
  2. En yüksek priority değerine sahiptir (varsayılan olarak, tüm Robo komut dosyaları aynı priority 1 değerine sahiptir).
  3. Robo komut dosyalarının öncelikleri aynıysa Robo komut dosyaları listesinde en üstte görünür.

Aşağıda, aynı işlemi gerçekleştiren ve aynı koşul (test edilen uygulamanın ön planda olması) tarafından 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": "WAIT",
        "delayTime": 3000
      }
    ]
  },
  {
    "id": 1001,
    "description": "Robo script 2",
    "priority": "2",
    "contextDescriptor": {
      "condition": "app_under_test_shown"
    },
    "actions": [
      {
        "eventType": "WAIT",
        "delayTime": 3000
      }
    ]
  },
  {
    "id": 1002,
    "description": "Robo script 3",
    "contextDescriptor": {
      "condition": "app_under_test_shown"
    },
    "actions": [
      {
        "eventType": "WAIT",
        "delayTime": 3000
      }
    ]
  }
]

Test edilen uygulama ön plandayken Robo, sırasıyla aşağıdakileri tetikler:

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

Tekrarlanan çalıştırmalar

Robo, varsayılan olarak bir tarama sırasında en fazla bir kez Robo senaryosu tetikler. Bu, maxNumberOfRuns özelliğiyle ayarlanabilir.

Aşağıda, test edilen uygulamayı 10 defaya kadar arka plana getiren 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ı nedeniyle 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. Varsayılan olarak Robo, geri düğmesine basar. Bu durum 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 taramaya başlamadan ö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 (izini sürmeye) çalıştığında "Cancel" simgesini 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 dosyaları 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, kendisini 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'dır.
maxNumberOfRuns Bu koşullu işlemin, kendisini içeren Robo komut dosyasının bir yürütülmesi sırasında kaç kez gerçekleştirilebileceği. Varsayılan olarak, tüm koşullu işlemler, bunları içeren Robo komut dosyasının tek bir yürütülmesinde en fazla bir kez gerçekleştirilebilir.
contextDescriptor Bu koşullu işlemi tetikleyen bağlam/koşul. Robo komut dosyasının contextDescriptor'u ile aynı yapıya sahiptir ve benzer özellikler sunar.

Tetiklendiğinde, bir Robo komut dosyası 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 bu işlemler, gerçekleştirilecek koşulsuz bir işlem seçilmeden önce her zaman dikkate alınır. Herhangi bir koşullu işlem tetiklenir 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. Geçerli olması için bir Robo komut dosyası en az bir koşullu olmayan işlem içermelidir.

Aşağıda, Robo komut dosyası yürütülürken herhangi bir noktada pop-up iletişim kutuları gösterilirse bunları 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": "WAIT",
      "delayTime": 10000
    },
    {
      "description": "Screen on",
      "eventType": "ADB_SHELL_COMMAND",
      "command": "input keyevent 82"
    },
    {
      "description": "Wait for 10 seconds",
      "eventType": "WAIT",
      "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ı için talimatlar içerebilir. Bu talimatlar, sırasıyla eventType ELEMENT_IGNORED ve ALL_ELEMENTS_IGNORED ile "işlemlerin" yoksayılması olarak gösterilir.

Yok sayma işlemleri içeren bir Robo komut dosyasının contextDescriptor özelliği belirli bir ekranla eşleştiğinde Robo, yok sayma işlemleri tarafından hedeflenen kullanıcı arayüzü widget'larıyla etkileşimde bulunmaz (başka bir Robo komut dosyası işlemi, Robo'nun yok sayılan kullanıcı arayüzü widget'larından birinde işlem yapmasını sağlamadığı sürece).

Robo komut dosyası; yoksayma, koşullu ve koşulsuz işlemleri içerebilir. Diğer Robo komut dosyası işlemlerinin aksine, yoksayma işlemleri, priority ve maxNumberOfRuns özelliklerinin değerlerinden bağımsız olarak, bunları içeren Robo komut dosyasının contextDescriptor özelliği bir Robo taraması sırasında bir ekranla eşleştiği sürece uygulanır.

Aşağıda, iki Robo senaryosu içeren bir dosya örneği verilmiştir. İlk Robo komut dosyası, Robo'nun kaynak kimliği "my.app.package:id/ignored_screen" olan bir kullanıcı arayüzü widget'ı içeren ekrandaki tüm kullanıcı arayüzü widget'larını yoksaymasını sağlar. İkinci Robo komut dosyası, kaynak kimlikleri ".*:id/done" Java normal ifadesiyle eşleşen kullanıcı arayüzü widget'larını, kaynak kimliği "my.app.package:id/main_screen" olan bir kullanıcı arayüzü widget'ı içeren ekranda 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 alt öğeleri dinamik olarak yüklenir ve mevcut ekrandan çok sayıda kaydırma uzaklığında 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, mutlak olan çocuğun veri konumuna güvenmek çok daha sağlam bir yaklaşımdır. Bu alt öğeyi ekrana getirmek için gereken kaydırma sayısına güvenmek ve ardından ekran 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 öğeleriyle ilgili işlemler aşağıdaki adımlarda gerçekleştirilir:

  1. Robo testi, ilgili çocuğun, onu içeren RecyclerView veya AdapterView üzerinde konumlandırma işlemi yapılarak ekranda gösterilmesini sağlar.

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

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 içinde çalıştırın.

Android Studio'da Robo komut dosyası oluşturabilirsiniz. Bu komut dosyası JSON dosyası olarak kaydedilir. Ardından JSON dosyasını Firebase Test Lab ile birlikte uygulamaya yükleyebilir ve testi buna göre çalıştırabilirsiniz.

Komut dosyası ekli bir Robo testi çalıştırdığınızda, Robo testi önce önceden komut verilmiş işlemlerinizi adım adım 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 bölümündeki 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 test çıktılarında yürütülmesini izlemeye yardımcı olur.

Onaylama

Onaylanan koşul doğruysa Robo komut dosyası bir sonraki işleme (başka bir onaylama olabilir) geçer. Aksi takdirde, onaylama başarısız olduğu için 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'u ile aynı yapıya sahiptir ve benzer özellikler sunar.

Aşağıda, test edilen uygulamanın ön planda olup olmadığını kontrol eden bir Robo komut dosyası onaylaması örneği verilmiştir:

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

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

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

Aşağıda, OCR kullanılarak bir ekranda "Settings" öğesinin algılanıp algılanmadığını kontrol eden bir Robo komut dosyası onaylaması ö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" Yumuşak klavyenin hedef öğesini tıklar.
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK" Yazılım klavyesinin rastgele öğelerini en fazla maxNumberOfRuns kez 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 karşılıklı olarak hariç tutulur.
visionText OCR kullanarak tıklanan öğeyi tanımlar. elementDescriptors ile karşılıklı olarak hariç tutulur.
matchIndex Hedef öğe visionText kullanılarak tanımlandığında eşleşen hedef öğenin oluşumunun dizinini belirtir. Bu değer 0 ise Robo komut dosyası işlemi, eşleşen ilk öğeyi seçer. Bu değ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'dır (ilk eşleşme seçilir).
maxNumberOfRuns eventType değeri SOFT_KEYBOARD_RANDOM_CLICK olduğunda, sanal klavyenin rastgele bir öğesinin kaç kez tıklanacağını belirtir. Varsayılan değer 1'dır.

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

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

Aşağıda, OCR kullanılarak ekranda algılanan "Search" kelimesinin ikinci oluşumunu tıklayan bir Robo komut dosyası işlemine örnek verilmiştir:

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

Aşağıda, içerik açıklaması "Emoji button" olan 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 sanal klavye öğelerini en fazla beş kez tıklayan bir Robo komut dosyası işlemine örnek 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, sanal klavyeyi devre dışı bırakan bir Robo komut dosyası işlemine dair örnek 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ışı. Çıkış eşleşmezse Robo komut dosyası işlemi başarısız olur. Varsayılan olarak boş bir dizedir. Bu, çıkışın kontrol edilmediği anlamına gelir.

Aşağıda, test edilen uygulama kullanıcı verilerini temizleyen bir Robo komut dosyası işlemine örnek 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 testi, her taramanın başında test edilen uygulamaya tüm izinleri verir. Bu nedenle, bu işlem etkisizdir. 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, kapsayan Robo komut dosyasını tetikleyen herhangi bir ekrandaki 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ını sağlar.

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, yoksayılan kullanıcı arayüzü widget'larının tüm alt öğelerini de yoksayar. Varsayılan olarak false'dı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.*"
    }
  ]
}

Giriş 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" Belirtilen metni hedef kullanıcı arayüzü widget'ına girer ve ardından bu kullanıcı arayüzü widget'ına bir KEYCODE_ENTER etkinliği gönderir.
elementDescriptors Android kullanıcı arayüzü hiyerarşisini kullanarak hedef kullanıcı arayüzü widget'ını tanımlar.
replacementText Hedef kullanıcı arayüzü widget'ına girilecek metin.

Aşağıda, kaynak kimliği "John" olan bir kullanıcı arayüzü widget'ına "com.google.samples.apps.topeka:id/first_name" giren bir Robo komut dosyası işlemine örnek 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 birbirini dışlar.
visionText OCR kullanarak uzun tıklanan öğeyi tanımlar. elementDescriptors ile karşılıklı olarak hariç tutulur.
matchIndex Hedef öğe visionText kullanılarak tanımlandığında eşleşen hedef öğenin oluşumunun dizinini belirtir. Bu değer 0 ise Robo komut dosyası işlemi, eşleşen ilk öğeyi seçer. Bu değ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'dır (ilk eşleşme seçilir).

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

  • delayTime: Uzun tıklamanın ne kadar süreceğini milisaniye cinsinden belirtir.

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

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

Tek noktalı hareket gerçekleştirme

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

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

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

  • dragAndDrop: true olarak ayarlanırsa tek noktalı hareketle sürükle ve bırak işlemi gerçekleştirilir. Varsayılan olarak false'dır.

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

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

İki parmakla hareket yapma

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

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

Aşağıda, uzaklaştırma hareketi gerçekleştiren bir Robo komut dosyası işlemine dair örnek verilmiştir:

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

IME işlemi gerçekleştirme

Bu işlem, belirtilen hedef kullanıcı arayüzü widget'ı için Giriş Yöntemi Düzenleyici'deki (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, kaynak kimliği "com.google.samples.apps.topeka:id/first_name" olan bir kullanıcı arayüzü widget'ında IME işlemi gerçekleştiren bir Robo komut dosyası işlemine örnek 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 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 düğmesine basmak için kullanılır.

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

{
  "eventType": "PRESSED_BACK"
}

Ana ekrana gitmek için

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

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

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

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

{
  "eventType": "GO_HOME"
}

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

Bu işlem, belirtilen elementDescriptors ile eşleşen kullanıcı arayüzü widget'ını, 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 maksimum 50 kaydırma sayısına ulaşılana kadar ileriye doğru kaydırır.

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ırılacak kullanıcı arayüzü widget'ını tanımlar.

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

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

Kaydırın

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ırılabilirliğine bağlı olarak Down veya Right.
  • Backward - Hedef kullanıcı arayüzü widget'ının dikey veya yatay kaydırılabilirliğine bağlı olarak Up veya Left.
elementDescriptors Android kullanıcı arayüzü hiyerarşisini kullanarak hedef kullanıcı arayüzü widget'ını tanımlar.

Aşağıda, kaynak kimliği "my.app.package:id/custom_content" olan bir kullanıcı arayüzü widget'ını yukarı kaydıran bir Robo komut dosyası işlemine örnek 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 karşılıklı olarak birbirini dışlar.
pointTapYCoordinate Dokunulan noktanın piksel Y koordinatı. pointTapXPercent ve pointTapYPercent ile karşılıklı olarak birbirini dışlar.
pointTapXPercent Dokunulan noktanın yüzde X koordinatı. pointTapXCoordinate ve pointTapYCoordinate ile karşılıklı olarak birbirini dışlar.
pointTapYPercent Dokunulan noktanın Y koordinatının yüzdesi. pointTapXCoordinate ve pointTapYCoordinate ile karşılıklı olarak 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 öğenin içindeki bir noktaya dokunun.

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

Özellik Açıklama
"eventType": "POINT_TAP_ELEMENT" --
pointTapXPercent Hedef öğe içindeki X koordinatının yüzdesi.
pointTapYPercent Hedef öğe içindeki Y koordinatının yüzdesi.
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 taşıyan 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, Robo testini durduran bir 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": "WAIT" (or "DELAYED_MESSAGE_POSTED") --
delayTime Beklenecek süreyi milisaniye cinsinden belirtir.

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

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

Öğe bekleniyor

Bu işlem, Robo testinin 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, kaynak kimliği "my.app.package:id/confirmation_button" olan bir kullanıcı arayüzü widget'ının ekranda görünmesi için 30 saniye bekleyen bir Robo komut dosyası işlemine örnek verilmiştir:

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

Sonraki adımlar