Robo komut dosyaları başvuru kılavuzu

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

Bir Robo betiğini aşağıdaki yollarla oluşturabilirsiniz:

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

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

  • Robo komut dosyasını kaydedin ve ardından manuel olarak düzenleyin. (Yalnızca Android)

Robo komut dosyalarını kullanma hakkında daha fazla bilgi edinmek için bkz. Robo komut dosyası çalıştırma .

giriiş

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

Aşağıda, test edilen uygulama başlatıldığında tetiklenen, bir uygulamada kullanıcıyı imzalayan 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, o zaman bir dosyadaki Robo komut dosyasını, eylemlerinin bir sırası gibi daha basit bir format kullanarak belirtebilirsiniz:

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

Robo komut dosyaları için iOS+ desteği

iOS+ için Robo (Beta), Robo komut dosyaları için sınırlı desteğe sahiptir. iOS+ için Robo komut dosyası sözdizimi, Android sözdizimi ile aynıdır ve desteklenen iOS+ özellikleri, Android benzerlerine benzer şekilde davranır.

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

  • İddia
  • Tıklamak
  • Uzun tıklama
  • Tokatlamak
  • Tüm öğeleri yoksay
  • Beklemek
  • Ekran görüntüsü al
  • Taramayı sonlandır

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

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

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

  • Test edilen uygulama gösteriliyor
  • Eleman mevcut
  • Robo olmayan komut dosyası eylemi gerçekleştirildi

Yapı

Bir Robo betiğinin, Robo'nun onu nasıl çalıştırdığını açıklayan çeşitli özellikleri vardır. Bu niteliklerin çoğu, önceden tanımlanmış varsayılan değerlerle isteğe bağlıdır:

Bağlanmak Tanım
id Bu Robo betiğinin tarama çıktılarında izlenmesine yardımcı olan bir tam sayı. Robo, kendi id sahip yerleşik Robo komut dosyalarına sahiptir. Farklı Robo komut dosyalarındaki aynı id , davranışlarını etkilemese de, tarama çıktılarındaki eylemleri bu Robo komut dosyalarından ayırmak zor olabilir. Herhangi bir çakışmayı önlemek amacıyla Robo komut dosyalarınıza 1000 veya daha yüksek benzersiz bir id atamanızı öneririz.
description id benzer ancak daha açıklayıcıdır.
crawlStage Robo, bu Robo betiğini bir taramanın aşamasına 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 komut dosyalarının önceliği 1 .
maxNumberOfRuns Bir tarama sırasında Robo'nun bu Robo komut dosyasını kaç kez çalıştırabileceğini belirtir. Robo, varsayılan olarak bir Robo komut dosyasını bir kez çalıştırabilir.
contextDescriptor Bu Robo betiğini tetikleyen bağlamı veya 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ının koleksiyonunu 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ı 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ı

Bağlam tanımlayıcı, bir Robo betiğini bir veya birkaç özelliğin birleşimini kullanarak tetikleyen bağlamı veya koşulu tanımlar:

Bağlanmak Tanım
"condition": "always" Her zaman bir Robo komut dosyasını tetikler.
"condition": "element_present" elementDescriptors veya visionText tarafından belirtilen metinle eşleşen bir kullanıcı arayüzü widget'ının ekranda mevcut olup olmadığını kontrol eder.
"condition": "element_disabled" elementDescriptors ile eşleşen bir kullanıcı arayüzü widget'ının ekranda mevcut olup olmadığını ve onunla etkileşime geçilip erişilemediğini kontrol eder.
"condition": "element_checked" elementDescriptors ile eşleşen bir kullanıcı arayüzü widget'ının ekranda mevcut olup olmadığını ve kontrol edildiğini kontrol eder.
"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, ön planda hiçbir uygulamanın çalışmadığı anlamına gelir.
"condition": "non_roboscript_action_performed" Robo testi tarafından gerçekleştirilen son nonRoboscriptActionCount ardışık eylemlerin Robo komut dosyası eylemleri olmadığını kontrol eder.
negateCondition true olarak ayarlanırsa condition geçersiz kılar. Örneğin, ekranda bir kullanıcı arayüzü widget'ının OLMADIĞINI veya test edilen uygulamanın ön planda ÇALIŞMADIĞINI kontrol etmek için bu özelliği kullanabilirsiniz.
elementDescriptors Ekrandaki bir kullanıcı arayüzü widget'ını tanımlayan bir veya daha fazla öğe tanımlayıcı. element_present , element_disabled ve element_checked koşullarıyla birlikte kullanılır. visionText ile karşılıklı olarak özel. 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 karşılıklı olarak özeldir.
nonRoboscriptActionCount Daha önce gerçekleştirilen ardışık Robo komut dosyası olmayan eylemlerin sayısı. Her nonRoboscriptActionCount Robo eyleminden sonra bir Robo komut dosyasını tetiklemek için non_roboscript_action_performed koşuluyla birlikte kullanılır. Varsayılan olarak 1 .

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

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

Aşağıda, Optik Karakter Tanıma (OCR) tarafından tespit edilen "Privacy Policy" tarafından tetiklenen bir Robo komut dosyası örneği yer almaktadır:

{
  "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 çiftinden oluşan bir paket 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 kullanıcı arayüzü widget'ını tanımlayan tanımlayıcılar. Belirli bir düğmeye tıklamak gibi, hedef kullanıcı arayüzü widget'ına sahip tüm eylemler için gereklidir.
optional true olarak ayarlanırsa bu eylem gerçekleştirilemediğinde atlanır. Örneğin, hedef kullanıcı arayüzü widget'ını ekranda bulamadığında, içeren Robo komut dosyasında hata oluşmadan bu eylem atlanır. Varsayılan olarak değer false .
replacementText Hedef kullanıcı arayüzü widget'ına girilecek metin. Metin düzenleme işlemleri için gereklidir.
swipeDirection Kaydırma işleminin yönünü belirtir. Kaydırma eylemleri için gereklidir.
delayTime Ne kadar süre bekleneceğini milisaniye cinsinden 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 kullanıcı arayüzü widget'ları olmayan iki eylem içeren bir Robo komut dosyası örneği verilmiştir; bu, bu eylemlerin belirli bir kullanıcı arayüzü widget'ında çalışmadığı anlamına gelir:

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

Öğe tanımlayıcıları

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

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

Çoğu zaman bu nitelikler tanımsızdır; örneğin bir düğmenin metni ve içerik açıklaması olmayabilir. Bazı öznitelik değerleri mevcut olsa bile, bunlar belirli bir uygulama ekranında ( resourceId dahil) benzersiz olmayabilir.

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

Aşağıda, her ikisi de sağlanan öğe tanımlayıcılarını kullanarak hedef kullanıcı arayüzü widget'ını tanımlamanızı gerektiren, metin değiştirme ve tıklama eylemlerine sahip 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 eylemler listesinin önüne, söz konusu Robo betiğinin yürütme seçeneklerini belirten bir JSON nesnesi ekleyebilirsiniz. Bu yapılandırma başlığı, roboscript anahtar sözcüğüyle 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 - bir Robo betiği çalışırken uygulanan yürütme seçenekleri:
    • strict - true olarak ayarlanırsa, Robo betiği kısmi eşleştirmeyi, mevcut eylemi atlamayı ve askıya almayı uygulamaz. Yani, Robo betiği normal bir enstrümantasyon testi olarak yürütülür ve eylemlerinden herhangi biri gerçekleştirilemediğinde başarısız olur. Varsayılan olarak false .
    • notify - false olarak ayarlanırsa Robo betiği, yürütmenin başında ve sonunda ekrandaki bildirimleri göstermez. Varsayılan olarak true .
  • postscript - 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. Varsayılan olarak false .

Aşağıda, ekran bildirimleri olmadan strict modda yürütülen, üç saniye boyunca uyuyan ve ardından taramanın durdurulduğ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

Bir şablon parametresi, bir Robo betiğindeki, Robo testi o Robo betiğini yürütmek için yüklediğinde gerçek değerle değiştirilen bir yer tutucudur. Şablon parametrelerinin önüne çift alt çizgi ve ardından yüzde işareti gelir ve son ek olarak yüzde işareti ve ardından çift alt çizgi gelir.

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

Bir Robo betiği, # veya // ile başlayan satırlar olan yorum satırlarını içerebilir.

Aşağıda birkaç yorum içeren bir Robo betiği ö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ı eylemiyle eşleşmeye ç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ştirilemiyorsa 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ı arayüzü widget'ını eşleştirirken en dıştaki öğe tanımlayıcısını dikkate almaz.

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

Mevcut eylemi atla Mevcut Robo komut dosyası eylemi tamamen veya kısmen eşleştirilemiyorsa 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 hiçbir zaman geri dönmez) ve sonraki eylemi 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 komut dosyasının kaydedilmesi ve yeniden oynatılması sırasında farklı ekranlarda aralıklı bir iletişim kutusu görünebilir.

Askıya almak Mevcut veya sonraki Robo komut dosyası eylemleri tamamen veya kısmen eşleştirilemiyorsa, Robo komut dosyası geçici olarak askıya alınır ve Robo testi, diğer stratejilerini kullanarak gerçekleştirilecek bir eylemi seçer. Bu eylem tamamlandıktan sonra Robo testi, Robo komut dosyasını çalıştırmaya devam eder.

Mevcut veya sonraki Robo komut dosyası eylemleri eşleştirilemediği sürece, Robo komut dosyası herhangi bir sayıda eylem için askıya alınmış durumda kalır. Bu nedenle, Robo komut dosyalarının bir Robo testi için mutlaka bir önsöz olması gerekmez ve Robo komut dosyası eylemlerini standart Robo test eylemleriyle serpiştirebilirsiniz. Bu teknik, uygulama davranışının değişken olduğu veya uygulama sürümleri arasındaki değişikliklerin Robo testinin standart eylemleriyle "boşlukları doldurması"nı gerektirecek 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 öncelik aşağıdaki sırayla Robo komut dosyası seçilerek verilir:

  1. contextDescriptor özelliğine sahiptir.
  2. En yüksek priority sahiptir (varsayılan olarak tüm Robo komut dosyalarının yürütme priority 1 ).
  3. Robo komut dosyalarının öncelikleri aynıysa, Robo komut dosyaları listesinin en başında görünür.

Aşağıda, aynı eylemi gerçekleştiren ve aynı koşulla 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. Geçerli son Robo betiği 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 özelliğ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 komut dosyaları, belirli bir Robo taramasının farklı aşamalarında uygulanabilir:

Tarama aşaması Tanım
pre_crawl Robo başlatılıp 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 belirli bir ekrandan geri dönmeye (geri izleme) çalıştığında, bu ekrandaki tüm olası eylemler araştırılır. Varsayılan olarak Robo, bazı senaryolarda istenmeyen bir durum olan geri basar.

Bir Robo betiğinin crawlStage niteliği belirtilmemişse crawl olduğu ima edilir.

Aşağıda, Robo 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" e tıklaması talimatını veren bir Robo komut dosyası örneği verilmiştir:

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

Koşullu eylemler

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

Bağlanmak Tanım
priority Bu koşullu eylemin, içerdiği Robo komut dosyasındaki diğer koşullu eylemlere kıyasla ö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ütülmesi sırasında kaç kez gerçekleştirilebileceği. Varsayılan olarak, tüm koşullu eylemler, içerdikleri Robo komut dosyasının tek bir yürütülmesinde en fazla bir kez gerçekleştirilebilir.
contextDescriptor Bu koşullu eylemi tetikleyen bağlam/koşul. [Robo betiğinin bağlam Tanımlayıcısı](#context-descriptor) ile aynı yapıya sahiptir ve benzer yetenekler sunar.

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

Aşağıda, Robo betiğinin yürütülmesi sırasında herhangi bir noktada ortaya çıkmaları durumunda açılır diyalog kutularını kapatan, koşullu bir eylem içeren koşulsuz bir Robo betiğinin ö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
    }
}

Eylemlerin göz ardı edilmesi

Bir Robo komut dosyası, Robo'nun belirli UI widget'larını veya belirli bir ekrandaki 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 "eylemlerin" yok sayılmasıyla temsil edilir.

Yoksayma eylemlerini içeren bir Robo komut dosyasının contextDescriptor özelliği belirli bir ekranla eşleştiğinde, Robo, yok sayma eylemleri tarafından hedeflenen herhangi bir UI widget'ıyla etkileşime girmez (başka bir Robo komut dosyası eylemi, Robo'nun yoksayılan UI widget'larından birinde bir eylem gerçekleştirmesini sağlamadığı sürece).

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

Aşağıda iki Robo betiği 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 kullanıcı arayüzü widget'ı içeren bir ekrandaki 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ı yok sayması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 geçerli ekrandan birçok kaydırma hareketi uzakta 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örleri için farklı olduğundan, çocuğun mutlak 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 komut dosyası, Robo komut dosyası eylemlerinin hedefi olan RecyclerView alt öğelerinin mutlak veri konumlarını recyclerViewChildPosition olarak yakalar. Robo betiği aynı zamanda Robo betiği eylemlerinin hedefi olan AdapterView alt öğelerinin mutlak veri konumlarını da adapterViewChildPosition olarak yakalar.

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

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

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

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

{
  "eventType": "VIEW_CLICKED",
  "elementDescriptors": [
    {
      "className": "com.google.samples.apps.topeka.widget.AvatarView",
      "adapterViewChildPosition": 5,
      "resourceId": "com.google.samples.apps.topeka:id/avatar",
      "contentDescription": "Avatar 6"
    },
    {
      "className": "android.widget.GridView",
      "groupViewChildPosition": 1,
      "resourceId": "com.google.samples.apps.topeka:id/avatars"
    },
    {
      "className": "android.widget.LinearLayout",
      "groupViewChildPosition": 1
    },
    {
      "className": "android.widget.LinearLayout",
      "groupViewChildPosition": 0
    }
  ]
}

Aşağıda RecyclerView ( android.support.v7.widget.RecyclerView ) alt öğesindeki tıklama eyleminin bir ö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 bunu Test Lab'da çalıştırın

Android Studio'da, betiği bir JSON dosyası olarak kaydeden bir Robo betiği oluşturabilirsiniz. Daha sonra JSON dosyasını uygulamayla birlikte Firebase Test Lab'a yükleyebilir ve testi buna göre çalıştırabilirsiniz.

Bir komut dosyası eklenmiş bir Robo testi çalıştırdığınızda, Robo testi ilk olarak önceden komut dosyasıyla oluşturulan eylemleriniz üzerinden adım atar ve ardından uygulamayı her zamanki gibi keşfeder.

Android Studio'da bir Robo komut dosyası JSON dosyası oluşturmak için Android Studio'da Test Lab'ı kullanarak bir Robo komut dosyası 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 geçer. Aksi takdirde Robo betiğinin yürütülmesi, başarısız bir onaylama nedeniyle 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 olup olmadığını kontrol eden bir Robo komut dosyası onayı örneği verilmiştir:

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

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

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

Aşağıda, OCR kullanılarak bir ekranda "Settings" ALGILANMADIĞINI kontrol eden bir Robo komut dosyası onayı ö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 öğesine tıklar.
"eventType": "SOFT_KEYBOARD_CLICK" Yazılım klavyesinin hedef öğesini tıklatır.
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK" Yazılım klavyesinin rastgele öğelerini maxNumberOfRuns katına kadar tıklatır.
"eventType": "LIST_ITEM_CLICKED" Liste öğelerini tıklamak için Android Studio'daki Robo komut dosyası kaydedici tarafından kullanılır.
elementDescriptors Tıklanan kullanıcı arayüzü widget'ını Android kullanıcı arayüzü hiyerarşisini kullanarak tanımlar. visionText ile karşılıklı olarak özel.
visionText OCR kullanarak tıklanan öğeyi tanımlar. elementDescriptors ile karşılıklı olarak özeldir.
maxNumberOfRuns eventType SOFT_KEYBOARD_RANDOM_CLICK olduğunda yazılım klavyesinin rastgele bir öğesine 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 kullanılarak bir ekranda tespit edilen "Privacy Policy" na tıklayan bir Robo komut dosyası eyleminin örneği yer almaktadır:

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

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

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

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

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

Yazılım klavyesini 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 kabuk komutunu çalıştır

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ğıdaki özellik isteğe bağlıdır:

  • expectedOutputRegex - komutun Java normal ifadesi olarak beklenen çıktısı. Çıktı eşleşmezse Robo komut dosyası eylemi başarısız olur. Varsayılan olarak boş bir dizedir, yani çıktı kontrol edilmez.

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 Kaydedici ile geriye dönük uyumluluk için Android Studio'daki Robo komut dosyası kaydedici tarafından kaydedilir. Robo testi, her taramanın başlangıcında test edilen uygulamaya tüm izinleri verir ve dolayısıyla bu işlem işlem gerektirmez. Bu eylemi Robo komut dosyalarınızda KULLANMAYIN.

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

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

Ekrandaki tüm öğeleri göz ardı edin

Bu eylem, Robo'nun herhangi bir ekrandaki, içeren Robo komut dosyasını tetikleyen tüm öğeleri yok saymasını sağlar.

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) yok saymasını sağlar.

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

Bağlanmak Tanım
"eventType": "ELEMENT_IGNORED" --
elementDescriptors Android kullanıcı arayüzü hiyerarşisini kullanarak yok sayı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 aynı zamanda yok sayılan kullanıcı arayüzü widget'larının tüm alt öğelerini de yok sayar. Varsayılan olarak false .

Aşağıda, Robo'nun içerik açıklamaları "Avatar" ile başlayan tüm öğeleri yok saymasını sağlayan 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 kullanıcı arayüzü widget'ına girer.
"eventType": "ENTER_TEXT" verilen metni hedef kullanıcı arayüzü widget'ına girer ve ardından bu kullanıcı arayüzü widget'ına bir KEYCODE_ENTER olayı gönderir.
elementDescriptors Android kullanıcı arayüzü hiyerarşisini kullanarak hedef kullanıcı arayüzü widget'ını tanımlar.
replacementText Hedef kullanıcı arayüzü widget'ına girilecek metin.

Aşağıda, " "com.google.samples.apps.topeka:id/first_name" kaynak kimliğiyle bir kullanıcı arayüzü widget'ına "John" girişini yapan 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 kullanıcı arayüzü hiyerarşisini kullanarak hedef kullanıcı arayüzü widget'ını tanımlar. visionText ile karşılıklı olarak özel.
visionText OCR kullanarak uzun süre tıklanan öğeyi tanımlar. elementDescriptors ile karşılıklı olarak özeldir.

Aşağıdaki özellik 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ı arayüzü widget'ına beş saniyelik bir tıklama gerçekleştiren Robo komut dosyası eyleminin bir örneği verilmiştir:

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

Tek nokta hareketi gerçekleştirme

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

Bağlanmak Tanım
"eventType": "ONE_POINT_GESTURE" --
coordinates Tek nokta hareketi için yüzde veya piksel olarak "(x1,y1)->(x2,y2)" şeklinde biçimlendirilmiş iki koordinat.

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

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

Aşağıda, aşağı kaydırmayı gerçekleştiren Robo komut dosyası tek noktalı hareket eyleminin bir ö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 İki noktalı bir hareket için yüzde veya piksel olarak "(x1,y1)->(x2,y2),(x3,y3)->(x4,y4)" şeklinde biçimlendirilmiş dört koordinat.

Aşağıda, kıstırma hareketini gerçekleştiren bir Robo komut dosyası eyleminin örneği verilmiştir:

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

IME eylemi gerçekleştirme

Bu eylem, belirtilen hedef kullanıcı arayüzü widget'ı için Giriş Yöntemi Düzenleyicisi'nde (IME) geçerli eylem düğmesine (örneğin sonraki, tamamlandı ve ara) basar.

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

Bağlanmak Tanım
"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 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 tuşuna 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" Android Studio'daki Robo komut dosyası kaydedici tarafından emülatör API 28'e geri dönmek için kullanılır.

Aşağıda geri basan bir Robo komut dosyası eyleminin ö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ı eylemi ö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 mevcut olana veya kaydırılan widget artık kaydırılamaz hale gelene 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 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, "my.app.package:id/scrollable_card_container" kaynak kimliğine sahip UI widget'ını ekranda "Orange" metnine sahip UI widget'ı görünene kadar (veya daha fazla kaydırma yapılamaz) kaydıran bir Robo komut dosyası eylemi örneği verilmiştir. gerçekleştirilmesi veya maksimum 50 kaydırma sayısına ulaşılması):

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

Aşağıda "my.app.package:id/custom_content" kaynak kimliğine sahip bir kullanıcı arayüzü widget'ını yukarı kaydıran 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ü dosyasının adını belirtir.

Aşağıda ekran görüntüsü alan bir Robo komut dosyası eyleminin ö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 dokunan bir Robo komut dosyası eylemi örneği verilmiştir:

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

Bir öğenin 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 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 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ı eyleminin örneği verilmiştir:

{
  "eventType": "TERMINATE_CRAWL"
}

Beklemek

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

Bağlanmak Tanım
"eventType": "DELAYED_MESSAGE_POSTED" --
delayTime Ne kadar süre bekleneceğini milisaniye cinsinden belirtir.

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

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

Bir öğeyi 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 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ünmesini 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