Catch up on highlights from Firebase at Google I/O 2023. Learn more

Robo komut dosyaları başvuru kılavuzu

Bu belge, yapı, yetenekler, kullanım, kayıt ve eylemler dahil olmak üzere Robo betikleri hakkında referans bilgileri sağlar. Robo betikleri, mobil uygulamalar için manuel kalite güvencesi (QA) görevlerini otomatikleştiren ve sürekli entegrasyon (CI) ve lansman öncesi test stratejileri sağlayan testlerdir. Bir Robo betiği, bir kullanıcı arabirimi (UI) dizisini ve diğer eylemleri açıklayan bir JSON dosyasıdır.

Aşağıdaki şekillerde bir Robo betiği oluşturabilirsiniz:

  • Robo komut dosyası kayıt özelliğini kullanın.
  • Robo betiğini manuel olarak oluşturun.
  • Robo komut dosyasını kaydedin ve ardından manuel olarak düzenleyin.

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

Robo komut dosyası, test edilen uygulama Android Uygulama Paketi (APK) gibi diğer girdilerin yanı sıra Robo testine sağlanır.

Aşağıda, bir kullanıcıyı bir uygulamaya imzalayan ve test edilen uygulama başlatıldığında tetiklenen bir Robo komut dosyası örneği verilmiştir:

[
  {
    "crawlStage": "crawl",
    "contextDescriptor": {
      "condition": "app_under_test_shown"
    },
    "actions": [
      {
        "eventType": "VIEW_TEXT_CHANGED",
        "replacementText": "user123",
        "elementDescriptors": [
          {
            "resourceId": "my.app.package:id/username"
          }
        ]
      },
      {
        "eventType": "VIEW_TEXT_CHANGED",
        "replacementText": "12345",
        "elementDescriptors": [
          {
            "resourceId": "my.app.package:id/password"
          }
        ]
      },
      {
        "eventType": "VIEW_CLICKED",
        "elementDescriptors": [
          {
            "resourceId": "my.app.package:id/login"
          }
        ]
      }
    ]
  }
]

Bir dosyada tek bir Robo komut dosyası varsa ve yukarıdaki örnekte olduğu gibi varsayılan app_under_test_shown tetikleme koşuluna sahipse, Robo komut dosyasını daha basit bir biçim kullanarak bir dosyada belirtebilirsiniz - tıpkı eylemlerinin bir sırası gibi:

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

Yapı

Bir Robo komut dosyasının, Robo'nun onu nasıl yürüttüğünü açıklayan çeşitli öznitelikleri vardır. Bu özniteliklerin çoğu, önceden tanımlanmış varsayılan değerlerle isteğe bağlıdır:

Bağlanmak Tanım
id Tarama çıktılarında bu Robo komut dosyasının izlenmesine yardımcı olan bir tamsayı.
description id benzer, ancak daha açıklayıcıdır.
crawlStage Tarama Robo aşaması, bu Robo komut dosyasını şu adreste uygular: Varsayılan olarak, ana tarama aşamasıdır.
priority Bu Robo betiğinin diğer Robo betiklerine kıyasla önceliği. Varsayılan olarak, tüm Robo betiklerinin önceliği 1 .
maxNumberOfRuns Bir tarama sırasında Robo'nun bu Robo komut dosyasını kaç kez çalıştırabileceğini belirtir. Varsayılan olarak, Robo bir Robo komut dosyasını bir kez çalıştırabilir.
contextDescriptor Bu Robo komut dosyasını tetikleyen bağlamı/koşulu açıklar. Atlanırsa, bu Robo betiğinin tetikleme koşulunun her zaman karşılandığı kabul edilir; başka bir deyişle, Robo betiği koşulsuzdur.
actions Bu Robo betiğinin tüm eylemleri.

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

Aşağıda, her biri taramanın başlangıcında bir kez yürütülen tek bir eyleme sahip iki koşulsuz Robo komut dosyasına sahip 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ı

Bir bağlam tanımlayıcısı, bir Robo komut dosyasını tetikleyen bağlamı/koşulu, bir veya birkaç özelliğin bir kombinasyonunu kullanarak tanımlar:

Bağlanmak Tanım
"condition": "element_present" Ekranda elementDescriptors veya visionText tarafından belirtilen metinle eşleşen bir kullanıcı arabirimi parçacığı olup olmadığını kontrol eder.
"condition": "element_disabled" elementDescriptors ile eşleşen bir UI parçacığının ekranda mevcut olup olmadığını ve onunla etkileşime geçilemeyeceğini kontrol eder.
"condition": "element_checked" Ekranda elementDescriptors ile eşleşen bir kullanıcı arabirimi parçacığı olup olmadığını kontrol eder ve kontrol edilir.
"condition": "app_under_test_shown" Test edilen uygulamanın ön planda çalışıp çalışmadığını kontrol eder.
"condition": "default_launcher_shown" Bir cihazın ana ekranının gösterilip gösterilmediğini kontrol eder, bu da ön planda hiçbir uygulamanın çalışmadığı anlamına gelir.
"condition": "non_roboscript_action_performed" Robo testi tarafından gerçekleştirilen son eylemin bir Robo komut dosyası eylemi olmadığını kontrol eder.
negateCondition true olarak ayarlanırsa, condition reddeder. Örneğin, ekranda bir UI parçacığı OLMADIĞINI veya test edilen uygulamanın ön planda ÇALIŞMADIĞINI kontrol etmek için bu özniteliği kullanabilirsiniz.
elementDescriptors Ekranda bir UI 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 birbirini dışlar. Daha fazla bilgi için bkz . Öğe tanımlayıcıları .
visionText Ekrandaki metin, Optik Karakter Tanıma (OCR) API'si kullanılarak algılanır. visionText element_present koşuluyla birlikte kullanılır. elementDescriptors ile birbirini dışlar.

Aşağıda, ekranda "my.app.package:id/page_header" kaynak kimliğine sahip bir UI 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 eyleminden 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
    }]
}

Hareketler

Bir Robo komut dosyasındaki her eylem, aşağıdaki tabloda açıklanan bir veya daha fazla özellik-değer çiftinin bir demeti olarak temsil edilir:

Bağlanmak Tanım
eventType Eylemin türünü belirtir, örneğin tıklama, metin düzenleme vb. Her eylem için gereklidir.
elementDescriptors Bir UI widget'ını tanımlayan tanımlayıcılar. Belirli bir düğmeyi tıklamak gibi, hedef kullanıcı arabirimi widget'ına sahip tüm eylemler için gereklidir.
optional true olarak ayarlanırsa, gerçekleştirilemediğinde bu eylem atlanır. Örneğin, bir ekranda hedef UI widget'ını bulamadığında bu eylem atlanır - içeren Robo komut dosyası başarısız olmaz. Varsayılan olarak, değer false şeklindedir.
replacementText Hedef kullanıcı arayüzü parçacığına girilecek metin. Metin düzenleme işlemleri için gereklidir.
swipeDirection Kaydırmanın yönünü belirtir. Kaydırma işlemleri için gereklidir.
delayTime Milisaniye cinsinden ne kadar bekleneceğini belirtir. Bekleme eylemleri için gereklidir.
pointTapXCoordinate ve pointTapYCoordinate Dokunulan noktanın piksel X ve Y koordinatları. pointTapXPercent ve pointTapYPercent ile birbirini dışlayan. Noktaya dokunma eylemleri için gereklidir.
pointTapXPercent ve pointTapYPercent Dokunulan noktanın yüzde X ve Y koordinatları. pointTapXCoordinate ve pointTapYCoordinate ile birbirini dışlayan. Noktaya dokunma eylemleri için gereklidir.

Aşağıda, hedef UI widget'ları olmayan iki eylem içeren bir Robo komut dosyası örneği verilmiştir; bu, bu eylemlerin belirli bir UI widget'ında çalışmadığı anlamına gelir:

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

Öğe tanımlayıcıları

Bir öğe tanımlayıcısı, aşağıdaki tanımlayıcı özniteliklerden birini veya daha fazlasını kullanarak bir UI widget'ını tanımlar:

Bağlanmak Tanım
className
ancestorClassName Öğenin kullanıcı arayüzü hiyerarşi atasının sınıf adı. Ata, öğenin kendisi de dahil olmak üzere, öğenin kullanıcı arabirimi hiyerarşisindeki üst düğümlerden herhangi biridir.
resourceId
resourceIdRegex resourceId ile eşleşecek Java normal ifadesi.
contentDescription
contentDescriptionRegex contentDescription ile eşleşecek Java normal ifadesi.
text (ekranda görünen)
textRegex text eşleştirmek için Java normal ifadesi.
groupViewChildPosition , recyclerViewChildPosition veya adapterViewChildPosition Üst parçacığın türüne bağlı olarak bir UI parçacığının alt konumunu temsil eder.

Sıklıkla, bu nitelikler tanımsızdır; örneğin, bir düğmenin metin ve içerik açıklaması olmayabilir. Bazı öznitelik değerleri mevcut olsa bile, belirli bir uygulama ekranında ( resourceId dahil) benzersiz olmayabilirler.

Örneğin, bir listenin öğeleri arasında ayrım yapmak, genellikle yalnızca ana parçacığı içindeki farklı alt konumlarını kullanarak mümkündür. Bu, bir UI widget'ını tanımlamak için yalnızca bir öğe tanımlayıcısı kullanmanın genellikle yetersiz olduğu anlamına gelir. Bu nedenle, bir eylemin elementDescriptors özniteliği, birincisi hedef UI parçacığına, ikincisi hedef UI parçacığının ana pencere öğesine karşılık gelecek şekilde sıralanan bir dizi öğe tanımlayıcı içerir. Bir eylemin hedef kullanıcı arayüzü parçacığı, tüm öğe tanımlayıcıları karşılık gelen kullanıcı arabirimi parçacığı alt hiyerarşisiyle eşleştiğinde eşleştirilir.

Aşağıda, her ikisi de sağlanan öğe tanımlayıcılarını kullanarak hedef kullanıcı arabirimi pencere bileşenini tanımlamanızı gerektiren, metin değiştirme ve tıklama eylemleri içeren bir Robo komut dosyası örneği verilmiştir:

[
  {
    "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 betiğindeki eylem listesinin önüne, o Robo betiği için yürütme seçeneklerini belirten bir JSON nesnesi ekleyebilirsiniz. Bu yapılandırma başlığı, roboscript anahtar sözcüğü ile başlar ve ardından istenen yürütme seçeneklerinin bir JSON temsili gelir.

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

  • executionMode - bir Robo betiği çalışırken uygulanan yürütme seçenekleri:
  • postscript - bir Robo betiği tamamlandıktan sonra uygulanan yürütme seçenekleri:
    • terminate - true olarak ayarlanırsa Robo testi, Robo betiği tamamlandıktan sonra taramayı durdurur.

Aşağıda, strict modda yürütülen ve üç saniye uyuyan, ardından taramanın durduğu bir Robo komut dosyası örneği verilmiştir:

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

Şablon parametreleri

Bir şablon parametresi, bir Robo komut dosyasında, Robo testi yürütme için bu Robo komut dosyasını yüklediğinde gerçek değerle değiştirilen bir yer tutucudur. Şablon parametrelerinin önüne bir çift alt çizgi ve ardından bir yüzde işareti eklenir ve bir yüzde işaretinin ardından bir çift alt çizgi eklenir.

Robo betikleri 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

Bir Robo komut dosyası, # 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"
      }
    ]
  }
]

Yetenekler

Varsayılan olarak, bir Robo betiğinin tüm eylemleri tamamlanana (veya en azından denenene) kadar, Robo betiği etkin kalır. Robo testi, gerçekleştirilecek bir eylemi seçerken bir Robo komut dosyası eylemini eşleştirmeye çalışır. Robo komut dosyası, sağlamlığı artırmak için aşağıdaki teknikleri kullanır:

teknik Tanım
Kısmi eşleştirme Mevcut Robo komut dosyası eylemi tam olarak eşleştirilemezse, eşleştirme kriterleri gevşetilir ve eşleştirme yeniden denenir. Kısmi eşleştirme, bir Robo komut dosyası eyleminin hedef kullanıcı arabirimi parçacığıyla eşleşirken en dıştaki öğe tanımlayıcısını dikkate almaz.

Kısmi eşleştirme başarılı olursa, karşılık gelen Robo komut dosyası eylemi her zamanki gibi gerçekleştirilir. Bu teknik, örneğin uygulama sürümleri arasında ekran öğeleri yeniden düzenlendiğinde uygulama yapısının değiştiği senaryoları destekler.

Geçerli eylemi atla Geçerli Robo komut dosyası eylemi tamamen veya kısmen eşleştirilemezse Robo, sonraki Robo komut dosyası eylemini eşleştirmeye çalışır. Sonraki eylem tamamen veya kısmen eşleşirse, Robo testi mevcut Robo komut dosyası eylemini atlar (ve asla geri dönmez) ve sonrakini gerçekleştirir.

Bu teknik, uygulama davranışının sürümler arasında değiştiği veya kesintili olduğu senaryoları destekler; örneğin, bir Robo betiğinin kaydı veya yeniden oynatılması sırasında farklı ekranlarda aralıklı bir iletişim kutusu görünebilir.

Askıya almak Ne mevcut ne de sonraki Robo komut dosyası eylemleri tamamen veya 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ştirmek için bir eylem seçer. Bu eylem tamamlandıktan sonra Robo testi, Robo komut dosyasını yürütmeye devam eder.

Mevcut veya sonraki Robo betiği eylemleri eşleştirilemediği sürece, Robo betiği herhangi bir sayıda eylem için askıda kalır. Bu nedenle, Robo betiklerinin mutlaka bir Robo testi için bir önsöz olması gerekmez ve Robo betiği eylemlerini standart Robo testi eylemleriyle karıştırabilirsiniz. Bu teknik, uygulama davranışının düzensiz olduğu veya uygulama sürümleri arasındaki değişikliklerin, Robo testinin standart eylemleriyle "boşlukları doldurması" için ihtiyaç duyduğu kadar büyük olduğu senaryoları destekler.

Öncelikler

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

  1. Bir contextDescriptor özniteliğine sahiptir.
  2. En yüksek priority sahiptir (varsayılan olarak, tüm Robo betikleri 1 ile aynı yürütme priority sahiptir).
  3. Robo betiklerinin öncelikleri aynıysa, Robo betikleri listesinde en erken görünür.

Aşağıda, aynı eylemi gerçekleştiren ve aynı koşul tarafından tetiklenen üç Robo komut dosyası içeren bir dosya örneği verilmiştir - test edilen uygulama ön plandadır:

[
  {
    "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 planda olduğunda, Robo sırasıyla aşağıdakileri tetikler:

  1. "Robo script 2" çünkü en yüksek önceliğe sahiptir.
  2. "Robo script 1" , çünkü aynı önceliğe sahip kalan uygulanabilir Robo komut dosyaları arasında daha önce görünür.
  3. Son uygulanabilir Robo komut dosyası olarak "Robo script 3" .

Tekrarlanan koşular

Varsayılan olarak Robo, tarama sırasında bir Robo komut dosyasını en fazla bir kez tetikler. Bu, maxNumberOfRuns özniteliği aracılığıyla 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 betikleri, belirli bir Robo taramasının farklı aşamalarında uygulanabilir:

Tarama aşaması Tanım
pre_crawl Robo başlatılmadan ve test edilen uygulamayı taramaya başlamadan önce.
post_crawl Robo, test edilen uygulamayı taramayı bitirdikten sonra.
crawl Robo'nun test edilen uygulamayı taradığı ana tarama aşaması.
close_screen Robo verilen bir ekrandan geri dönmeye (geri izleme) çalıştığında, bu ekrandaki olası tüm eylemler araştırıldığında. Varsayılan olarak Robo, bazı senaryolarda istenmeyen bir durum olan geri basar.

Bir Robo betiğinin crawlStage özniteliği belirtilmemişse, bunun crawl olduğu ima edilir.

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

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

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

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

Koşullu işlemler

Bir Robo betiği koşullu eylemler içerebilir. Koşullu eylemler, Robo'nun bunları nasıl gerçekleştirdiğini açıklayan üç ek özelliğe sahiptir:

Bağlanmak Tanım
priority Robo komut dosyasını içeren diğer koşullu işlemlere kıyasla bu koşullu eylemin önceliği. Varsayılan olarak, tüm koşullu eylemlerin önceliği 1 .
maxNumberOfRuns Bu koşullu eylemin, içerdiği Robo betiğinin bir yürütmesi sırasında kaç kez gerçekleştirilebileceği. Varsayılan olarak, tüm koşullu eylemler, içerdikleri Robo betiğinin tek bir yürütmesinde en fazla bir kez gerçekleştirilebilir.
contextDescriptor Bu koşullu eylemi tetikleyen bağlam/koşul. [Robo betiğinin contextDescriptor](#context-descriptor) ile aynı yapıya sahiptir ve benzer yetenekler sunar.

Bir Robo betiği tetiklendiğinde, koşulsuz eylemlerini görünüm sırasına göre birer birer gerçekleştirir. Bir Robo betiği koşullu eylemler içeriyorsa, gerçekleştirilecek koşulsuz bir eylem seçilmeden önce bunlar her seferinde dikkate alınır. Herhangi bir koşullu eylem, önceliğine ve kalan çalıştırma sayısına göre tetiklenir ve seçilirse, Robo betiği bu koşullu eylemi gerçekleştirir. Aksi takdirde, Robo betiği aşağıdaki koşulsuz eylemi gerçekleştirir. Geçerli olması için bir Robo betiğinin en az bir koşulsuz eylem içermesi gerekir.

Aşağıda, Robo komut dosyasının yürütülmesi sırasında herhangi bir noktada ortaya çıkmaları durumunda açılır iletişim kutularını kapatan koşullu bir eyleme sahip koşulsuz bir Robo komut dosyası örneği verilmiştir:

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

Eylemleri yok sayma

Bir Robo betiği, Robo'nun belirli bir ekrandaki belirli UI widget'larını veya tüm UI widget'larını yok sayması için talimatlar içerebilir. Bu talimatlar, sırasıyla eventType ELEMENT_IGNORED ve ALL_ELEMENTS_IGNORED ile "eylemler" yoksayılıyor olarak temsil edilir.

Yok sayma eylemleri içeren bir Robo betiğinin contextDescriptor özniteliği belirli bir ekranla eşleştiğinde, Robo, yok sayma eylemleri tarafından hedeflenen herhangi bir UI pencere öğesiyle etkileşime girmez (başka bir Robo komut dosyası eylemi, Robo'nun yok sayılan UI pencere öğelerinden birinde bir eylem gerçekleştirmesini sağlamadığı sürece).

Bir Robo komut dosyası, yoksayma, koşullu ve koşulsuz eylemlerin bir karışımını içerebilir. Diğer Robo komut dosyası eylemlerinden farklı olarak, yok sayma eylemleri, priority ve maxNumberOfRuns özniteliklerinin değerlerinden bağımsız olarak, Robo komut dosyasının contextDescriptor bir Robo taraması sırasında bir ekranla eşleştiği sürece uygulanır.

Aşağıda, iki Robo komut dosyası içeren bir dosya örneği verilmiştir. İlk Robo betiği, Robo'nun "my.app.package:id/ignored_screen" kaynak kimliğine sahip bir UI widget'ı içeren bir ekranda tüm UI widget'larını yok saymasını sağlar. İkinci Robo betiği, Robo'nun kaynak kimlikleri "my.app.package:id/main_screen" ".*:id/done" " ile eşleşen UI 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 pencere öğelerinin alt öğeleri dinamik olarak yüklenir ve geçerli ekrandan çok sayıda kaydırılarak görüntülenebilir. Bir ekranın boyutu ve bu çocuğa ulaşmak için gereken kaydırma sayısı, farklı cihaz form faktörlerinde farklı olduğundan, çocuğun kesin olan veri konumuna güvenmek çok daha sağlamdır. Bu çocuğu ekrana getirmek ve ardından ekran konumunu kullanmak için gereken kaydırma sayısına güvenmek daha az sağlam bir yaklaşımdır.

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

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

  1. Robo testi, ilgili çocuğun, içerdiği RecyclerView veya AdapterView üzerinde bir konumlandırma eylemi aracılığıyla ekranda görüntülenmesini sağlar.

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

Aşağıda, bir AdapterView ( android.widget.GridView ) alt öğesinde bir tıklama eylemi ö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 bir tıklama eylemi ö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 betiği kaydedin ve Test Lab'de çalıştırın

Komut dosyasını bir JSON dosyası olarak kaydeden Android Studio'da bir Robo komut dosyası oluşturabilirsiniz. Daha sonra JSON dosyasını uygulama ile Firebase Test Lab'e yükleyebilir ve testi buna göre çalıştırabilirsiniz.

Ekli bir komut dosyasıyla bir Robo testi çalıştırdığınızda, Robo testi önce önceden komut dosyası oluşturulmuş eylemlerinizi gerçekleştirir ve ardından uygulamayı her zamanki gibi keşfeder.

Android Studio'da bir Robo betiği JSON dosyası oluşturmak için Android Studio'da Test Lab kullanarak Robo betiği kaydetme bölümündeki adımları izleyin.

Robo komut dosyası eylemleri

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

  • description - Robo test çıktılarında bu Robo komut dosyası eyleminin yürütülmesinin izlenmesine yardımcı olur.

İddia

İddia edilen koşul doğruysa Robo betiği, başka bir iddia olabilecek bir sonraki eyleme devam eder. Aksi takdirde, başarısız bir doğrulama nedeniyle Robo betiği yürütme durdurulur.

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

Bağlanmak Tanım
"eventType": "ASSERTION" --
contextDescriptor İddia edilen bağlamı veya koşulu açıklar. Robo betiğinin contextDescriptor ile aynı yapıya sahiptir ve benzer yetenekler sunar.

Aşağıda, test edilen uygulamanın ön planda olduğunu kontrol eden bir Robo komut dosyası doğrulama örneği verilmiştir:

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

Aşağıda, ekranda "com.google.samples.apps.topeka:id/done" kaynak kimliğine sahip bir UI widget'ının bulunup bulunmadığını kontrol eden bir Robo komut dosyası doğrulama örneği verilmiştir:

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

Aşağıda, OCR kullanan bir ekranda "Settings" algılanıp algılanmadığını kontrol eden bir Robo komut dosyası doğrulama örneği verilmiştir:

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

Tıklamak

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

Bağlanmak Tanım
eventType Robo komut dosyası eyleminin türünü belirtir.
"eventType": "VIEW_CLICKED" Test edilen uygulamanın hedef öğesini tıklar.
"eventType": "SOFT_KEYBOARD_CLICK" Yazılım klavyesinin hedef öğesini tıklar.
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK" Yazılım klavyesinin maxNumberOfRuns katına kadar rasgele öğelerini tıklar.
"eventType": "LIST_ITEM_CLICKED" Liste öğelerini tıklamak için Android Studio'daki Robo komut dosyası kaydedici tarafından kullanılır.
elementDescriptors Android UI hiyerarşisini kullanarak tıklanan UI widget'ını tanımlar. visionText ile birbirini dışlar.
visionText OCR kullanarak tıklanan öğeyi tanımlar. elementDescriptors ile birbirini dışlar.
maxNumberOfRuns eventType SOFT_KEYBOARD_RANDOM_CLICK olduğunda, yazılım klavyesinin 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 bir Robo komut dosyası eylemi örneği verilmiştir:

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

Aşağıda, OCR kullanan bir ekranda algılanan "Privacy Policy" na tıklayan Robo komut dosyası eyleminin bir örneği verilmiştir:

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

Aşağıda, "Emoji button" içerik açıklamasına sahip bir yazılım klavyesi öğesini tıklayan bir Robo komut dosyası eyleminin bir örneği yer almaktadır:

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

Aşağıda, rasgele yazılım klavyesi öğelerini beş defaya kadar tıklatan bir Robo komut dosyası eylemi örneği verilmiştir:

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

Yumuşak klavyeyi devre dışı bırak

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

Bağlanmak Tanım
"eventType": "DISABLE_KEYBOARD" --

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

{
  "eventType": "DISABLE_KEYBOARD"
}

Adb Shell komutunu yürütün

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

Bağlanmak Tanım
"eventType": "ADB_SHELL_COMMAND" --
command Yürütülecek Android Debug Bridge (adb) kabuk komutu.

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

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

İzin verme

Bu eylem, Espresso Test Recorder ile geriye dönük uyumluluk için Android Studio'daki Robo script kaydedici tarafından kaydedilir. Robo testi, her taramanın başında test edilen uygulamaya tüm izinleri verir ve bu nedenle, bu eylem işlemsizdir. Bu eylemi Robo betiklerinizde KULLANMAYIN.

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

Bağlanmak Tanım
"eventType": "PERMISSIONS_REQUEST" --

Ekrandaki tüm öğeleri yoksay

Bu eylem, Robo'nun, içerdiği Robo komut dosyasını tetikleyen herhangi bir ekrandaki tüm öğeleri yok saymasına neden olur.

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

Bağlanmak Tanım
"eventType": "ALL_ELEMENTS_IGNORED" --

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

{
  "eventType": "ALL_ELEMENTS_IGNORED"
}

Bir öğeyi yoksay

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

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

Bağlanmak Tanım
"eventType": "ELEMENT_IGNORED" --
elementDescriptors Android UI hiyerarşisini kullanarak yok sayılan UI widget'larını tanımlar.

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

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

Giriş metni

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

Bağlanmak Tanım
eventType Robo komut dosyası eyleminin türünü belirtir.
"eventType": "VIEW_TEXT_CHANGED" Verilen metni hedef UI parçacığına girer.
"eventType": "ENTER_TEXT" verilen metni hedef UI parçacığına girer ve ardından bu UI parçacığına bir KEYCODE_ENTER olayı gönderir.
elementDescriptors Android UI hiyerarşisini kullanarak hedef UI widget'ını tanımlar.
replacementText Hedef kullanıcı arayüzü parçacığına girilecek metin.

Aşağıda, " "com.google.samples.apps.topeka:id/first_name" kaynak kimliğine sahip bir UI widget'ına "John" yazan bir Robo komut dosyası eylemi örneği verilmiştir:

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

Uzun tıklama

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

Bağlanmak Tanım
"eventType": "VIEW_LONG_CLICKED" --
elementDescriptors Android UI hiyerarşisini kullanarak hedef UI widget'ını tanımlar.

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

  • delayTime - uzun bir tıklamanın basılmasının milisaniye cinsinden ne kadar süreceğini belirtir.

Aşağıda "Avatar 8" içerik açıklamasına sahip bir kullanıcı arabirimi parçacığı üzerinde beş saniye süren bir tıklama gerçekleştiren bir Robo komut dosyası eylemi örneği verilmiştir:

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

Tek noktalı bir hareket gerçekleştirin

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

Bağlanmak Tanım
"eventType": "ONE_POINT_GESTURE" --
coordinates Yüzde veya piksel olarak "(x1,y1)->(x2,y2)" olarak biçimlendirilmiş, tek noktalı bir hareket için iki koordinat.

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

  • dragAndDrop - true olarak ayarlanırsa, tek noktalı hareket bir sürükle ve bırak eylemi gerçekleştirir. Varsayılan olarak, false .

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

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

İki noktalı bir hareket gerçekleştirin

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

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

Aşağıda, çimdikleme hareketini gerçekleştiren bir Robo komut dosyası eylemi örneği verilmiştir:

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

Bir IME eylemi gerçekleştirme

Bu eylem, belirtilen hedef UI parçacığı için Giriş Yöntemi Düzenleyicisi'nde (IME) mevcut eylem düğmesine (örneğin, sonraki, bitti ve ara) basar.

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

Bağlanmak Tanım
"eventType": "PRESSED_EDITOR_ACTION" --
elementDescriptors Android UI hiyerarşisini kullanarak hedef UI widget'ını tanımlar.

Aşağıda "com.google.samples.apps.topeka:id/first_name" kaynak kimliğine sahip bir kullanıcı arabirimi widget'ında bir IME eylemi gerçekleştiren bir Robo komut dosyası eylemi örneği verilmiştir:

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

geri basın

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

Bağlanmak Tanım
eventType Robo komut dosyası eyleminin türünü belirtir.
"eventType": "PRESSED_BACK" Cihaza bir KEYCODE_BACK olayı gönderir.
"eventType": "PRESSED_BACK_EMULATOR_28" API 28 öykünücülerine geri basmak için Android Studio'daki Robo komut dosyası kaydedici tarafından kullanılır.

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

{
  "eventType": "PRESSED_BACK"
}

Ana sayfaya basın

Bu eylem, cihaza bir KEYCODE_HOME olayı gönderir.

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

Bağlanmak Tanım
"eventType": "GO_HOME" --

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

{
  "eventType": "GO_HOME"
}

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

Bu eylem, Robo testinin belirtilen elementDescriptors ile eşleşen UI widget'ını, belirtilen childElementDescriptors ile eşleşen UI widget'ı ekranda bulunana veya kaydırılan widget artık kaydırılamayana veya maksimum 50 kaydırma sayısına ulaşılana kadar ileri kaydırmasını sağlar.

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

Bağlanmak Tanım
"eventType": "ELEMENT_SCROLL_INTO_VIEW" --
elementDescriptors Android UI hiyerarşisini kullanarak kaydırılan UI widget'ını tanımlar.
childElementDescriptors Android UI hiyerarşisini kullanarak kaydırılacak UI widget'ını tanımlar.

Aşağıda "my.app.package:id/scrollable_card_container" kaynak kimliğine sahip UI widget'ını ekranda "Orange" metnine sahip UI widget'ı görünene (veya daha fazla kaydırma yapılamayana) kadar kaydıran bir Robo komut dosyası eylemi örneği verilmiştir. veya maksimum 50 kaydırma sayısına ulaşılır):

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

Tokatlamak

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

Bağlanmak Tanım
"eventType": "VIEW_SWIPED" --
swipeDirection Kaydırmanın yönünü belirtir:
  • Left
  • Right
  • Up
  • Down
  • Forward - hedef UI parçacığının dikey veya yatay kaydırılabilirliğine bağlı olarak Down veya Right .
  • Backward - Hedef kullanıcı arabirimi parçacığının dikey veya yatay kaydırılabilirliğine bağlı olarak Up veya Left .
elementDescriptors Android UI hiyerarşisini kullanarak hedef UI widget'ını tanımlar.

Aşağıda "my.app.package:id/custom_content" kaynak kimliğine sahip bir UI widget'ını kaydıran bir Robo komut dosyası eylemi örneği verilmiştir:

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

Ekran görüntüsü al

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

Bağlanmak Tanım
"eventType": "TAKE_SCREENSHOT" --
screenshotName Ekran görüntüsü dosya adını belirtir.

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

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

Ekranda bir noktaya dokunun

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

Bağlanmak Tanım
"eventType": "POINT_TAP" --
pointTapXCoordinate Dokunulan noktanın piksel X koordinatı. pointTapXPercent ve pointTapYPercent ile birbirini dışlayan.
pointTapYCoordinate Dokunulan noktanın piksel Y koordinatı. pointTapXPercent ve pointTapYPercent ile birbirini dışlayan.
pointTapXPercent Dokunulan noktanın yüzde X koordinatı. pointTapXCoordinate ve pointTapYCoordinate ile birbirini dışlayan.
pointTapYPercent Dokunulan noktanın yüzde Y koordinatı. pointTapXCoordinate ve pointTapYCoordinate ile birbirini dışlayan.

Aşağıda, ekranın ortasına hafifçe vuran bir Robo komut dosyası eylemi örneği verilmiştir:

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

Bir öğe içindeki bir noktaya dokunun

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

Bağlanmak Tanım
"eventType": "POINT_TAP_ELEMENT" --
pointTapXPercent Hedef öğe içindeki yüzde X koordinatı.
pointTapYPercent Hedef öğe içindeki yüzde Y koordinatı.
elementDescriptors Android UI hiyerarşisini kullanarak hedef UI widget'ını tanımlar.

Aşağıda, bir arama çubuğunun kaydırıcısını sağa hareket ettiren bir Robo komut dosyası eylemi örneği verilmiştir:

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

Taramayı sonlandır

Bu eylem Robo testini durdurur.

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

Bağlanmak Tanım
"eventType": "TERMINATE_CRAWL" --

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

{
  "eventType": "TERMINATE_CRAWL"
}

Beklemek

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

Bağlanmak Tanım
"eventType": "DELAYED_MESSAGE_POSTED" --
delayTime Milisaniye cinsinden ne kadar bekleneceğini belirtir.

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

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

Bir öğe için bekleyin

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

Aşağıdaki tabloda gerekli özellikler listelenmektedir:

Bağlanmak Tanım
"eventType": "WAIT_FOR_ELEMENT" --
delayTime Bekleme zaman aşımını milisaniye cinsinden belirtir.
elementDescriptors Android UI hiyerarşisini kullanarak, beklenen UI widget'ını tanımlar.

Aşağıda, "my.app.package:id/confirmation_button" kaynak kimliğine sahip bir UI widget'ının ekranda görünmesi için 30 saniyeye kadar bekleyen bir Robo komut dosyası eylemi örneği verilmiştir:

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

Sonraki adımlar