Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Robo komut dosyaları başvuru kılavuzu

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

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üvencesi (QA) görevlerini otomatikleştiren ve sürekli entegrasyon (CI) ve lansman öncesi test stratejileri sağlayan testlerdir. Robo komut dosyası, bir dizi kullanıcı arabirimi (UI) ve diğer eylemleri açıklayan bir JSON dosyasıdır.

Aşağıdaki yollarla bir Robo komut dosyası oluşturabilirsiniz:

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

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

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

Aşağıdaki, bir kullanıcıyı bir uygulamaya imzalayan bir Robo komut dosyası örneğidir:

[
  {
    "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ındaki her eylem, aşağıdaki tabloda açıklanan bir veya daha fazla nitelik-değer çiftinin bir paketi 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 bir 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, içeren Robo komut dosyası başarısız olmadan bu eylem atlanır. Varsayılan olarak değer false şeklindedir.
replacementText Hedef kullanıcı arabirimi widget'ına girilecek metin. Metin düzenleme eylemleri için gereklidir.
swipeDirection Kaydırma yönünü belirtir. Kaydırma işlemleri için gereklidir.
delayTime Milisaniye cinsinden ne kadar bekleneceğini belirtir. Bekleme eylemleri için gereklidir.
pointTapXCoordinate ve pointTapYCoordinate Dokunulan noktanın piksel X ve Y koordinatları. pointTapXPercent ve pointTapYPercent ile karşılıklı olarak özel. Noktaya dokunma eylemleri için gereklidir.
pointTapXPercent ve pointTapYPercent Dokunulan noktanın yüzde X ve Y koordinatları. pointTapXCoordinate ve pointTapYCoordinate ile karşılıklı olarak özel. 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"
  }
]

Eleman tanımlayıcıları

Bir öğe tanımlayıcısı, aşağıdaki tanımlayıcı niteliklerden birini veya daha fazlasını kullanarak bir UI pencere aracını tanımlar:

Bağlanmak Tanım
className -
ancestorClassName Öğenin kullanıcı arabirimi hiyerarşi üst öğesinin sınıf adı. Üst öğe, öğenin kendisi de dahil olmak üzere öğenin UI hiyerarşisindeki herhangi bir üst düğümdür.
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şmek için Java düzenli ifadesi.
groupViewChildPosition , recyclerViewChildPosition veya adapterViewChildPosition Üst pencere bileşeninin türüne bağlı olarak bir UI pencere aracının alt konumunu temsil eder.

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

Örneğin, bir listenin öğeleri arasında ayrım yapmak, genellikle yalnızca üst widget'larında farklı alt konumlarını kullanarak mümkündür. Bu, bir UI pencere aracı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 özniteliği, ilki hedef UI pencere aracına, ikincisi hedef UI pencere aracının üst pencere aracına karşılık gelecek şekilde sıralanan bir öğe tanımlayıcıları dizisini içerir. Bir eylemin hedef UI pencere aracı, tüm öğe tanımlayıcıları ilgili UI pencere aracı 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 UI pencere aracını tanımlamanızı gerektiren metin değişikliği 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 komut dosyasındaki eylemler listesinin önüne, o Robo komut dosyası için yürütme seçeneklerini belirten bir JSON nesnesi koyabilirsiniz. Bu yapılandırma başlığı, roboscript anahtar sözcüğüyle başlar, ardından istenen yürütme seçeneklerinin bir JSON temsili gelir.

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

  • executionMode - bir Robo komut dosyası ç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 komut dosyası tamamlandıktan sonra Robo testi taramayı durdurur.

Aşağıda, taramanın durduğu ve ardından üç saniye uyuyan strict modda yürütülen 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 konur ve bir yüzde işareti ve ardından bir çift alt çizgi ile sonradan 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

Bir Robo komut dosyası, # veya // ile başlayan satırlar olan yorum satırlarını 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 komut dosyasının tüm eylemleri tamamlanana (veya en azından denenene) kadar Robo komut dosyası etkin kalır. Robo testi, gerçekleştirilecek bir eylem seçerken bir Robo komut dosyası eylemiyle eşleşmeye çalışmaya devam eder. Robo komut dosyası, sağlamlığı artırmak için aşağıdaki teknikleri kullanır:

teknik Tanım
Kısmi eşleştirme Geçerli Robo komut dosyası eylemi tam olarak eşleştirilemezse, eşleştirme ölçütleri gevşetilir ve eşleştirme yeniden denenir. Kısmi eşleme, bir Robo komut dosyası eyleminin hedef kullanıcı arabirimi pencere öğesi eşleştirilirken 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 ekran öğeleri yeniden düzenlendiğinde uygulama sürümleri arasında 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ı eylemiyle eşleşmeye ç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, örneğin kayıt sırasında farklı ekranlarda kesintili bir iletişim kutusu görünebileceği ve bir Robo komut dosyasının yeniden oynatıldığı senaryoları destekler.

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 komut dosyası eylemleri eşleştirilemediği sürece, Robo komut dosyası herhangi bir sayıda eylem için askıda kalır. Bu nedenle, Robo komut dosyalarının mutlaka bir Robo testi için bir giriş olması gerekmez ve Robo komut dosyası eylemlerini standart Robo test eylemleriyle serpiştirebilirsiniz. Bu teknik, uygulama davranışı kesintili olduğunda veya uygulama sürümleri arasındaki değişiklikler, Robo testinin standart eylemleriyle "boşlukları doldurması" gereken kadar büyük olduğunda senaryoları destekler.

RecyclerView ve AdapterView desteği

RecyclerView ve AdapterView pencere öğelerinin alt öğeleri dinamik olarak yüklenir ve geçerli ekrandan birçok kaydırma hareketiyle 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 komut dosyası ayrıca, AdapterViewChildPosition olarak Robo komut dosyası eylemlerinin hedefi olan adapterViewChildPosition 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 üzerindeki bir konumlandırma eylemi aracılığıyla ekranda görüntülenmesini sağlar.

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

Aşağıdaki, bir AdapterView ( android.widget.GridView ) alt öğesindeki bir tıklama eyleminin bir örneğidir:

{
  "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ğıdaki, bir RecyclerView ( android.support.v7.widget.RecyclerView ) alt öğesindeki bir tıklama eyleminin bir örneğidir:

{
  "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ı 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. Ardından JSON dosyasını uygulama ile Firebase Test Lab'e yükleyebilir ve testi buna göre çalıştırabilirsiniz.

Bir komut dosyası eklenmiş bir Robo testi çalıştırdığınızda, Robo testi önce önceden komut dosyası oluşturulmuş eylemlerinizde adım adım ilerler ve ardından her zamanki gibi uygulamayı 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ı öznitelik, tüm eylemler için geçerlidir:

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

iddia

Belirtilen koşul doğruysa, Robo komut dosyası, başka bir iddia olabilecek bir sonraki eyleme devam eder. Aksi takdirde, başarısız bir onaylama nedeniyle Robo komut dosyası yürütmesi durdurulur ve test sonucu BAŞARISIZ olur.

Aşağıdaki tablo gerekli nitelikleri listeler:

Bağlanmak Tanım
"eventType": "ASSERTION" --
contextDescriptor İddia edilen bağlamı veya koşulu açıklar.

bağlam tanımlayıcı

Bir bağlam tanımlayıcı, aşağıdaki özniteliklerden birini veya bunların bir kombinasyonunu kullanarak bağlamı/koşulu tanımlar:

Bağlanmak Tanım
"condition": "element_present" elementDescriptors veya visionText tarafından belirtilen metinle eşleşen bir UI widget'ının olup olmadığını kontrol eder.
"condition": "element_disabled" elementDescriptors ile eşleşen bir UI widget'ının ekranda mevcut olup olmadığını ve bunlarla etkileşim kurulamadığını 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 eylemin bir Robo komut dosyası eylemi olmadığını kontrol eder.
negateCondition true olarak ayarlanırsa, condition olumsuzlar. Örneğin, ekranda bir UI widget'ının 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 ve element_disabled koşullarıyla birlikte kullanılır. visionText ile birbirini dışlayan. 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 özel.

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

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

Aşağıda, bir ekranda "com.google.samples.apps.topeka:id/done" kaynak kimliğine sahip bir UI widget'ının olup olmadığını kontrol eden bir Robo komut dosyası onaylama ö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" ALGILANMADIĞINI kontrol eden bir Robo komut dosyası onaylama örneği verilmiştir:

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

Tıklamak

Aşağıdaki tablo gerekli nitelikleri listeler:

Bağlanmak Tanım
eventType Robo komut dosyası eyleminin türünü belirtir.
"eventType": "VIEW_CLICKED" Test edilen uygulamanın hedef öğesini tıklatır.
"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 sürelerine kadar 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ışlayan.
visionText OCR kullanarak tıklanan öğeyi tanımlar. elementDescriptors ile karşılıklı olarak özel.
maxNumberOfRuns eventType olduğunda, yazılım klavyesinin rastgele bir öğesinin kaç kez tıklanacağını SOFT_KEYBOARD_RANDOM_CLICK . 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 algılanan "Privacy Policy" tıklayan bir Robo komut dosyası eylemi ö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 klavye öğesini tıklatan bir Robo komut dosyası eylemi örneği verilmiştir:

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

Aşağıdaki, rastgele yazılım klavyesi öğelerini beş defaya kadar tıklatan bir Robo komut dosyası eylemi örneğidir:

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

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

Aşağıdaki tablo gerekli nitelikleri listeler:

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 yürütün

Aşağıdaki tablo gerekli nitelikleri listeler:

Bağlanmak Tanım
"eventType": "ADB_SHELL_COMMAND" --
command Yürütülecek Android Hata Ayıklama Köprüsü (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%__"
}

İzinleri ver

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şında test edilmekte olan uygulamaya tüm izinleri verir ve bu nedenle bu eylem bir işlem değildir. Bu eylemi Robo komut dosyalarınızda KULLANMAYIN.

Aşağıdaki tablo gerekli nitelikleri listeler:

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

Giriş metni

Aşağıdaki tablo gerekli nitelikleri listeler:

Bağlanmak Tanım
eventType Robo komut dosyası eyleminin türünü belirtir.
"eventType": "VIEW_TEXT_CHANGED" Verilen metni hedef UI widget'ına girer.
"eventType": "ENTER_TEXT" verilen metni hedef UI pencere bileşenine girer ve ardından bu UI pencere bileşenine bir KEYCODE_ENTER olayı gönderir.
elementDescriptors Android UI hiyerarşisini kullanarak hedef UI widget'ını tanımlar.
replacementText Hedef kullanıcı arabirimi widget'ı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 tablo gerekli nitelikleri listeler:

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ılı olmasının ne kadar süreceğini milisaniye cinsinden belirtir.

Aşağıda, "Avatar 8" içerik açıklamasına sahip bir UI widget'ına beş saniyelik 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 tablo gerekli nitelikleri listeler:

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 tablo gerekli nitelikleri listeler:

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

Aşağıda, bir sıkıştırma hareketi 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ştirin

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

Aşağıdaki tablo gerekli nitelikleri listeler:

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 UI 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 tablo gerekli nitelikleri listeler:

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 API 28 öykünücülerine geri basmak için kullanılır.

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

{
  "eventType": "PRESSED_BACK"
}

eve basın

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

Aşağıdaki tablo gerekli nitelikleri listeler:

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

Bu eylem, Robo testinin belirtilen elementDescriptors ile eşleşen UI pencere aracını, belirtilen childElementDescriptors ile eşleşen UI pencere aracı ekranda mevcut olana veya kaydırılan pencere öğesi 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 tablo gerekli nitelikleri listeler:

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 kullanmaya kaydırılacak UI widget'ını tanımlar.

Aşağıdaki, "my.app.package:id/scrollable_card_container" kaynak kimliğiyle kullanıcı arabirimi pencere aracını, ekranda "Orange" metinli kullanıcı arabirimi pencere öğesi görünene kadar kaydıran bir Robo komut dosyası eylemi örneğidir (veya daha fazla kaydırma yapılamaz). gerçekleştirilebilir 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 tablo gerekli nitelikleri listeler:

Bağlanmak Tanım
"eventType": "VIEW_SWIPED" --
swipeDirection Kaydırma yönünü belirtir:
  • Left
  • Right
  • Up
  • Down
  • Forward - hedef UI widget'ının dikey veya yatay kaydırılabilirliğine bağlı olarak Down veya Right .
  • Backward - hedef UI widget'ı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ı 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 tablo gerekli nitelikleri listeler:

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 tablo gerekli nitelikleri listeler:

Bağlanmak Tanım
"eventType": "POINT_TAP" --
pointTapXCoordinate Dokunulan noktanın piksel X koordinatı. pointTapXPercent ve pointTapYPercent ile karşılıklı olarak özel.
pointTapYCoordinate Dokunulan noktanın piksel Y koordinatı. pointTapXPercent ve pointTapYPercent ile karşılıklı olarak özel.
pointTapXPercent Dokunulan noktanın yüzde X koordinatı. pointTapXCoordinate ve pointTapYCoordinate ile karşılıklı olarak özel.
pointTapYPercent Dokunulan noktanın yüzde Y koordinatı. pointTapXCoordinate ve pointTapYCoordinate ile karşılıklı olarak özel.

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 öğe içindeki bir noktaya dokunun

Aşağıdaki tablo gerekli nitelikleri listeler:

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ğıdaki, bir arama çubuğunun kaydırıcısını sağa hareket ettiren bir Robo komut dosyası eylemi örneğidir:

{
  "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 tablo gerekli nitelikleri listeler:

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 tablo gerekli nitelikleri listeler:

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 testini belirtilen zaman aşımına kadar ekranda bir öğenin görünmesini bekletir.

Aşağıdaki tablo gerekli nitelikleri listeler:

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