Bu dokümanda; yapı, özellikler, kullanım, kayıt ve işlemler dahil olmak üzere Robo komut dosyaları hakkında referans bilgiler verilmektedir. Robo komut dosyaları, mobil uygulamalar için manuel kalite kontrolü (QA) görevlerini otomatikleştiren ve sürekli entegrasyon (CI) ile lansman öncesi test stratejilerini mümkün kılan testlerdir. Robo komut dosyası, kullanıcı arayüzü (UI) ve diğer işlemlerin sırasını açıklayan bir JSON dosyasıdır.
Robo komut dosyasını aşağıdaki yöntemlerle 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ı kaydedip manuel olarak düzenleyin. (Yalnızca Android)
Robo komut dosyalarını kullanma hakkında daha fazla bilgi edinmek için Robo komut dosyası çalıştırma başlıklı makaleyi inceleyin.
Giriş
Robo komut dosyası, test edilen Android Uygulama Paketi (APK) gibi diğer girişlerle birlikte Robo testine sağlanır.
Aşağıda, kullanıcının bir uygulamada oturum açmasını sağlayan 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ı bir dosyada daha basit bir biçim kullanarak (yalnızca işlemlerinin sırası olarak) belirtebilirsiniz:
[
{
"eventType": "VIEW_TEXT_CHANGED",
"replacementText": "user123",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/username"
}
]
},
{
"eventType": "VIEW_TEXT_CHANGED",
"replacementText": "12345",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/password"
}
]
},
{
"eventType": "VIEW_CLICKED",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/login"
}
]
}
]
Robo komut dosyaları için iOS+ desteği
iOS+ için Robo (Beta), Robo komut dosyaları için sınırlı desteğe sahiptir. iOS+ için Robo komut dosyası söz dizimi, Android söz dizimiyle aynıdır ve desteklenen iOS+ özellikleri, Android'deki karşılıklarına benzer şekilde davranır.
iOS+'ta aşağıdaki işlemler desteklenir:
- Onaylama
- Tıklama
- Uzun tıklama
- Kaydırın
- Tüm öğeleri yoksay
- Bekle
- 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ı
- Üst sınıf adı
- İçerik açıklaması (ve normal ifade)
- Metin (ve normal ifade)
iOS+'ta aşağıdaki bağlam tanımlayıcılarındaki tetikleme koşulları desteklenir:
- Test edilen uygulama gösteriliyor
- Öğe mevcut
- Robo komut dosyası olmayan işlem gerçekleştirildi
Yapı
Robo komut dosyasının, Robo'nun komut dosyasını nasıl yürüttüğünü açıklayan çeşitli özellikleri vardır. Bu özelliklerin çoğu, önceden tanımlanmış varsayılan değerlere sahip isteğe bağlı özelliklerdir:
| Özellik | Açıklama |
id
|
Tarama çıktılarında bu Robo komut dosyasını izlemeye yardımcı olan bir tam sayı.
Robo'da kendi id değerlerine sahip yerleşik Robo komut dosyaları bulunur. Farklı Robo komut dosyalarındaki aynı id, davranışlarını etkilemese de tarama çıktılarında bu Robo komut dosyalarındaki işlemleri ayırt etmek zor olabilir. Herhangi bir çakışmayı önlemek için Robo komut dosyalarınıza benzersiz bir id (1000 veya daha yüksek) atamanızı öneririz.
|
description
|
id ile benzer ancak daha açıklayıcı.
|
crawlStage
|
Robo'nun bu Robo komut dosyasını uyguladığı tarama aşaması. Varsayılan olarak ana tarama aşamasıdır. |
priority
|
Bu Robo komut dosyasının diğer Robo komut dosyalarına kıyasla önceliği.
Varsayılan olarak tüm Robo komut dosyalarının önceliği 1 olur.
|
maxNumberOfRuns
|
Robo'nun bir tarama sırasında 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 komut dosyasını tetikleyen bağlamı veya koşulu açıklar. Atlanırsa bu Robo komut dosyasının tetikleme koşulunun her zaman karşılandığı kabul edilir. Başka bir deyişle, Robo komut dosyası koşulsuzdur. |
actions
|
Bu Robo komut dosyasının tüm işlemleri. |
Tek bir dosya, bir veya daha fazla Robo komut dosyasından oluşan bir koleksiyon içerir.
Aşağıda, her biri taramanın başında bir kez yürütülen tek bir işlem içeren iki koşulsuz Robo komut dosyası bulunan bir dosya örneği verilmiştir:
[
{
"id": 1000,
"description": "My first Robo script",
"actions": [
{
"eventType": "DISABLE_KEYBOARD"
}
]
},
{
"id": 1001,
"description": "My second Robo script",
"actions": [
{
"eventType": "PRESSED_BACK"
}
]
}
]
Bağlam tanımlayıcı
Bağlam tanımlayıcı, bir veya daha fazla özelliğin kombinasyonunu kullanarak Robo komut dosyasını tetikleyen bağlamı ya da koşulu tanımlar:
| Özellik | Açıklama |
|---|---|
"condition": "always"
|
Her zaman bir Robo komut dosyasını tetikler. |
"condition": "element_present"
|
elementDescriptors ile eşleşen bir kullanıcı arayüzü widget'ının veya visionText tarafından belirtilen metnin 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 etkileşime girilemediğ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 işaretlenip işaretlenmediğ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"
|
Cihazın ana ekranının gösterilip gösterilmediğini kontrol eder. Ana ekranın gösterilmesi, ön planda hiçbir uygulamanın çalışmadığı anlamına gelir. |
"condition": "non_roboscript_action_performed"
|
Robo test tarafından gerçekleştirilen son nonRoboscriptActionCount ardışık işlemin Robo komut dosyası işlemi olup olmadığını kontrol eder.
|
negateCondition
|
true olarak ayarlanırsa condition değerini geçersiz kılar. Örneğin, bir kullanıcı arayüzü widget'ının ekranda OLMADIĞINI veya test edilen uygulamanın ön planda ÇALIŞMADIĞINI kontrol etmek için bu özelliği kullanabilirsiniz.
|
elementDescriptors
|
Ekranda bir kullanıcı arayüzü widget'ını tanımlayan bir veya daha fazla öğe tanımlayıcı.
element_present, element_disabled ve element_checked koşullarıyla birlikte kullanılır. visionText ile karşılıklı dışlamalı. Daha fazla bilgi için Öğe tanımlayıcıları bölümüne bakın.
|
visionText
|
Ekrandaki metin, Optik Karakter Tanıma (OCR) API'si kullanılarak algılanır. visionText, element_present koşuluyla birlikte kullanılır. elementDescriptors ile karşılıklı dışlamalı.
|
nonRoboscriptActionCount
|
Daha önce gerçekleştirilen ardışık Robo olmayan komut dosyası işlemlerinin sayısı. Her nonRoboscriptActionCount Robo işleminden sonra bir Robo komut dosyasını tetiklemek için non_roboscript_action_performed koşuluyla birlikte kullanılır. Varsayılan olarak 1 şeklindedir.
|
Aşağıda, ekranda kaynak kimliği "my.app.package:id/page_header" olan bir kullanıcı arayüzü widget'ı tarafından tetiklenen bir Robo komut dosyası örneği verilmiştir:
{
"id": 1000,
"contextDescriptor": {
"condition": "element_present",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/page_header"
}
]
},
"actions": [
{
"eventType": "VIEW_CLICKED",
"elementDescriptors": [
{
"text": "Settings"
}
]
}
]
}
Aşağıda, Optik Karakter Tanıma (OCR) tarafından algılanan "Privacy Policy" ile tetiklenen bir Robo komut dosyası örneği verilmiştir:
{
"id": 1000,
"description": "Vision text Robo script",
"contextDescriptor": {
"condition": "element_present",
"visionText": "Privacy Policy"
},
"actions": [
{
"eventType": "VIEW_CLICKED",
"visionText": "Privacy Policy"
}
]
}
Aşağıda, komut dosyası olmayan her Robo işleminden sonra 5 saniye bekleyen bir Robo komut dosyası örneği verilmiştir:
{
"contextDescriptor": {
"condition": "non_roboscript_action_performed"
},
"maxNumberOfRuns" : 1000,
"actions" : [
{
"eventType" : "WAIT",
"delayTime" : 5000
}]
}
İşlemler
Robo komut dosyasındaki her işlem, aşağıdaki tabloda açıklanan bir veya daha fazla özellik-değer çifti paketi olarak temsil edilir:
| Özellik | Açıklama |
eventType
|
İşlemin türünü (ör. tıklama, metin düzenleme vb.) belirtir. Her işlem için gereklidir. |
elementDescriptors
|
Kullanıcı arayüzü widget'ını tanımlayan açıklayıcılar. Belirli bir düğmeyi tıklama gibi hedef kullanıcı arayüzü widget'ı olan tüm işlemler için gereklidir. |
optional
|
true olarak ayarlanırsa bu işlem gerçekleştirilemediğinde atlanır. Örneğin, bu işlem, içeren Robo komut dosyasını başarısızlığa uğratmadan ekranda hedef kullanıcı arayüzü widget'ını bulamadığında atlanır. Varsayılan değer false'dir.
|
replacementText
|
Hedef kullanıcı arayüzü widget'ına girilecek metin. Metin düzenleme işlemleri için gereklidir. |
swipeDirection
|
Kaydırma yönünü belirtir. Kaydırma işlemleri için gereklidir. |
delayTime
|
Bekleme süresini milisaniye cinsinden belirtir. Bekleme işlemleri için gereklidir. |
pointTapXCoordinate ve pointTapYCoordinate
|
Dokunulan noktanın piksel X ve Y koordinatları. pointTapXPercent ve pointTapYPercent ile aynı anda kullanılamaz.
Noktaya dokunma işlemleri için gereklidir.
|
pointTapXPercent ve pointTapYPercent
|
Dokunulan noktanın yüzde cinsinden X ve Y koordinatları. pointTapXCoordinate ve pointTapYCoordinate ile birbirini dışlar. Noktaya dokunma işlemleri için gereklidir.
|
Aşağıda, hedef kullanıcı arayüzü widget'ları olmayan iki işlem içeren bir Robo komut dosyası örneği verilmiştir. Bu, söz konusu işlemlerin belirli bir kullanıcı arayüzü widget'ında çalışmadığı anlamına gelir:
[
{
"eventType": "WAIT",
"delayTime": 3000
},
{
"eventType": "PRESSED_BACK"
}
]
Öğe tanımlayıcıları
Öğe tanımlayıcı, aşağıdaki tanımlayıcı özelliklerden birini veya daha fazlasını kullanarak bir kullanıcı arayüzü widget'ını tanımlar:
| Özellik | Açıklama |
className
|
– |
ancestorClassName
|
Öğenin kullanıcı arayüzü hiyerarşisindeki üst öğesinin sınıf adı. Üst öğe, öğ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österilir)
|
– |
textRegex
|
text ile eşleşecek Java normal ifadesi.
|
groupViewChildPosition,
recyclerViewChildPosition veya
adapterViewChildPosition
|
Üst widget'ının türüne bağlı olarak bir kullanıcı arayüzü widget'ının alt konumunu temsil eder. |
Bu özellikler genellikle tanımlanmamıştır. Örneğin, bir düğmenin metni ve içerik açıklaması olmayabilir. Bazı özellik değerleri mevcut olsa bile belirli bir uygulama ekranında (resourceId dahil) benzersiz olmayabilir.
Örneğin, bir listedeki öğeleri birbirinden ayırt etmek genellikle yalnızca üst widget'ları 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 işlemin elementDescriptors özelliği, ilk öğe hedef kullanıcı arayüzü widget'ına, ikinci öğe hedef kullanıcı arayüzü widget'ının üst widget'ına karşılık gelecek şekilde sıralanmış bir dizi öğe tanımlayıcısı içerir. Bir işlemin hedef kullanıcı arayüzü widget'ı, tüm öğe tanımlayıcıları ilgili kullanıcı arayüzü widget'ı alt hiyerarşisiyle eşleştiğinde eşleştirilir.
Aşağıda, metin değişikliği ve tıklama işlemleri içeren bir Robo komut dosyası örneği verilmiştir. Her iki işlemde de, sağlanan öğe tanımlayıcıları kullanarak hedef kullanıcı arayüzü widget'ını tanımlamanız gerekir:
[
{
"eventType": "VIEW_TEXT_CHANGED",
"replacementText": "John",
"elementDescriptors": [
{
"className": "android.support.v7.widget.AppCompatEditText",
"groupViewChildPosition": 0,
"resourceId": "com.google.samples.apps.topeka:id/first_name"
},
{
"className": "android.widget.FrameLayout",
"groupViewChildPosition": 0
},
{
"className": "android.support.design.widget.TextInputLayout",
"groupViewChildPosition": 1
}
]
},
{
"eventType": "VIEW_CLICKED",
"elementDescriptors": [
{
"className": "android.support.design.widget.FloatingActionButton",
"groupViewChildPosition": 1,
"resourceId": "com.google.samples.apps.topeka:id/done"
},
{
"className": "android.widget.FrameLayout",
"groupViewChildPosition": 1,
"resourceId": "com.google.samples.apps.topeka:id/content"
},
{
"className": "android.widget.FrameLayout",
"groupViewChildPosition": 0,
"resourceId": "com.google.samples.apps.topeka:id/sign_in_content"
}
]
}
]
Yürütme seçenekleri
İsteğe bağlı olarak, bir Robo komut dosyasındaki işlem listesinin önüne, ilgili Robo komut dosyasının yürütme seçeneklerini belirten bir JSON nesnesi ekleyebilirsiniz. Bu yapılandırma başlığı, roboscript anahtar kelimesiyle başlar ve ardından istenen yürütme seçeneklerinin JSON gösterimi gelir.
Robo komut dosyaları aşağıdaki yürütme seçeneklerini destekler:
executionMode- Robo komut dosyası çalışırken uygulanan yürütme seçenekleri:strict:trueolarak ayarlanırsa Robo komut dosyası kısmi eşleme, mevcut işlemi atlama ve askıya alma özelliklerini kullanmaz. Yani Robo komut dosyası, normal bir enstrümantasyon testi olarak yürütülür ve işlemlerinden herhangi biri gerçekleştirilemediğinde başarısız olur. Varsayılan olarakfalsedeğerindedir.dismiss_popups:trueolarak ayarlanırsa Robo testi,strictmodunda bile Robo komut dosyasını çalıştırırken beklenmedik iletişim kutularını kapatır. Bu seçenek,strictmodunda değilken etkili olmaz. Varsayılan olarakfalseşeklindedir.notify:falseolarak ayarlanırsa Robo komut dosyası, yürütme işleminin başında ve sonunda ekranda bildirim göstermez. Varsayılan olaraktrueşeklindedir.
postscript- Robo komut dosyası tamamlandıktan sonra uygulanan yürütme seçenekleri:terminate:trueolarak ayarlanırsa Robo testi, Robo komut dosyası tamamlandıktan sonra taramayı durdurur. Varsayılan olarakfalseşeklindedir.
Aşağıda, ekranda bildirim olmadan strict modunda yürütülen ve üç saniye bekledikten sonra taramanın durduğu bir Robo komut dosyası örneği verilmiştir:
"roboscript": {
"executionMode": {
"strict": true,
"notify": false
},
"postscript": {
"terminate": true
}
}
[
{
"eventType": "WAIT",
"delayTime": 3000
}
]
Şablon parametreleri
Şablon parametresi, Robo komut dosyasındaki bir yer tutucudur. Robo testi, yürütme için ilgili Robo komut dosyasını yüklediğinde bu yer tutucu gerçek değerle değiştirilir. Şablon parametrelerinin önüne çift alt çizgi ve ardından yüzde işareti, sonuna ise yüzde işareti ve ardından çift alt çizgi eklenir.
Robo komut dosyaları aşağıdaki şablon parametresini destekler:
__%APP_PACKAGE_NAME%__: Test edilen uygulamanın paket adı.
Aşağıda, test edilen uygulama işlemini durduran bir Robo komut dosyası örneği verilmiştir:
[
{
"eventType": "ADB_SHELL_COMMAND",
"command": "am force-stop __%APP_PACKAGE_NAME%__"
}
]
Yorumlar
Robo komut dosyası, # veya // ile başlayan yorum satırları içerebilir.
Aşağıda, birkaç yorum içeren bir Robo komut dosyası örneği verilmiştir:
# Confirm a user account.
[
{
// Click the DONE button.
"eventType": "VIEW_CLICKED",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/done"
}
]
}
]
Özellikler
Varsayılan olarak, bir Robo komut dosyasının tüm işlemleri tamamlanana (veya en azından denenene) kadar Robo komut dosyası etkin kalır. Robo testi, gerçekleştireceği bir işlemi seçerken her zaman bir Robo komut dosyası işlemiyle eşleştirmeye çalışır. Robo komut dosyası, sağlamlığı artırmak için aşağıdaki teknikleri kullanır:
| Teknik | Açıklama |
| Kısmi eşleme | Mevcut Robo komut dosyası işlemi tam olarak eşleştirilemezse eşleştirme ölçütleri esnetilir ve eşleştirme yeniden denenir. Kısmi eşleme, bir Robo komut dosyası işleminin hedef kullanıcı arayüzü widget'ını eşleştirirken en dıştaki öğe tanımlayıcıyı dikkate almaz.
Kısmi eşleştirme başarılı olursa ilgili Robo komut dosyası işlemi normal şekilde gerçekleştirilir. Bu teknik, uygulama yapısının değiştiği (ör. uygulama sürümleri arasında ekran öğelerinin yeniden düzenlendiği) senaryoları destekler. |
| Mevcut işlemi atla | Mevcut Robo komut dosyası işlemi tamamen veya kısmen eşleştirilemezse Robo, sonraki Robo komut dosyası işlemini eşleştirmeye çalışır. Sonraki işlem tamamen veya kısmen eşleşirse Robo testi, mevcut Robo komut dosyası işlemini atlar (ve hiçbir zaman geri dönmez) ve sonraki işlemi gerçekleştirir.
Bu teknik, uygulama davranışının sürümler arasında değiştiği veya tutarsız 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 al | Mevcut veya sonraki Robo komut dosyası işlemlerinden hiçbiri 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ştirilecek bir işlem seçer. Bu işlem tamamlandıktan sonra Robo testi, Robo komut dosyasını yürütmeye devam eder.
Mevcut veya sonraki Robo komut dosyası işlemleri eşleştirilemediği sürece Robo komut dosyası, herhangi bir sayıda işlem için askıya alınmış olarak kalır. Bu nedenle, Robo komut dosyalarının Robo testi için bir giriş olması gerekmez ve Robo komut dosyası işlemlerini standart Robo testi işlemleriyle birleştirebilirsiniz. Bu teknik, uygulama davranışının kararsız olduğu veya uygulama sürümleri arasındaki değişikliklerin Robo testin standart işlemleriyle "boşlukları doldurması" gerekecek kadar büyük olduğu senaryoları destekler. |
Öncelikler
Robo komut dosyası maxNumberOfRuns sınırına ulaşırsa belirli bir taramada artık tetiklenemez. Mevcut bağlam tarafından birden fazla Robo komut dosyası tetiklenebiliyorsa öncelik, aşağıdaki sırayla şu Robo komut dosyası seçilerek verilir:
contextDescriptorözelliğine sahip.- En yüksek
prioritydeğerine sahip olan (varsayılan olarak tüm Robo komut dosyaları aynı yürütmeprioritydeğerine (1) sahiptir). - Robo komut dosyalarının öncelikleri aynıysa Robo komut dosyaları listesinde en başta görünür.
Aşağıda, aynı işlemi gerçekleştiren ve aynı koşul (test edilen uygulamanın ön planda olması) tarafından tetiklenen üç Robo komut dosyası içeren bir dosya örneği verilmiştir:
[
{
"id": 1000,
"description": "Robo script 1",
"contextDescriptor": {
"condition": "app_under_test_shown"
},
"actions": [
{
"eventType": "WAIT",
"delayTime": 3000
}
]
},
{
"id": 1001,
"description": "Robo script 2",
"priority": "2",
"contextDescriptor": {
"condition": "app_under_test_shown"
},
"actions": [
{
"eventType": "WAIT",
"delayTime": 3000
}
]
},
{
"id": 1002,
"description": "Robo script 3",
"contextDescriptor": {
"condition": "app_under_test_shown"
},
"actions": [
{
"eventType": "WAIT",
"delayTime": 3000
}
]
}
]
Test edilen uygulama ön plandayken Robo sırayla aşağıdakileri tetikler:
"Robo script 2", en yüksek önceliğe sahip olduğu için."Robo script 1", aynı önceliğe sahip kalan geçerli Robo komut dosyaları arasında daha önce göründüğü için."Robo script 3", geçerli son Robo komut dosyası olarak kullanılıyor.
Tekrarlanan çalıştırmalar
Varsayılan olarak Robo, bir tarama sırasında 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 alan bir Robo komut dosyası örneği verilmiştir:
{
"id": 1000,
"maxNumberOfRuns": 10,
"contextDescriptor": {
"condition": "app_under_test_shown"
},
"actions": [
{
"eventType": "GO_HOME"
}
]
}
Tarama aşaması
Robo komut dosyaları, belirli bir Robo taramasının farklı aşamalarında uygulanabilir:
| Tarama aşaması | Açıklama |
pre_crawl
|
Robo, test edilen uygulamayı başlatıp taramaya başlamadan önce. |
post_crawl
|
Robo, test edilen uygulamayı taramayı tamamladıktan sonra. Bir
post_crawl Robo komut dosyasının süresi 15 saniyeyi aşmamalıdır.
Aksi takdirde tarama zaman aşımına uğrayabilir.
|
crawl
|
Robo'nun test edilen uygulamayı taradığı ana tarama aşaması. |
close_screen
|
Robo, belirli bir ekrandaki tüm olası işlemleri keşfettikten sonra bu ekrandan geri dönmeye (geri izleme) çalıştığında. Robo varsayılan olarak geri düğmesine basar. Bu, bazı senaryolarda istenmeyen bir durumdur. |
Bir Robo komut dosyasının crawlStage özelliği belirtilmemişse crawl olduğu varsayılır.
Aşağıda, Robo taramaya başlamadan önce test edilen uygulamanın kullanıcı verilerini temizleyen bir Robo komut dosyası örneği verilmiştir:
{
"id": 1000,
"crawlStage": "pre_crawl",
"actions": [
{
"eventType": "ADB_SHELL_COMMAND",
"command": "pm clear __%APP_PACKAGE_NAME%__"
}
]
}
Aşağıda, bir onay iletişim kutusundan geri dönmeye (geri izleme) çalıştığında Robo'ya "Cancel" düğmesini 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
Robo komut dosyası, koşullu işlemler içerebilir. Koşullu işlemler, Robo'nun bunları nasıl gerçekleştirdiğini açıklayan üç ek özelliğe sahiptir:
| Özellik | Açıklama |
priority
|
Bu koşullu işlemin, içinde bulunduğu Robo komut dosyasındaki diğer koşullu işlemlere kıyasla önceliği. Varsayılan olarak tüm koşullu işlemlerin önceliği 1 olarak ayarlanır.
|
maxNumberOfRuns
|
Bu koşullu işlemin, içeren Robo komut dosyasının bir kez yürütülmesi sırasında kaç kez gerçekleştirilebileceği. Varsayılan olarak, tüm koşullu işlemler, içerdikleri Robo komut dosyasının tek bir yürütülmesinde en fazla bir kez gerçekleştirilebilir. |
contextDescriptor
|
Bu koşullu işlemi tetikleyen bağlam/koşul. Robo komut dosyasının contextDescriptor'ı ile aynı yapıya sahiptir ve benzer özellikler sunar. |
Tetiklendiğinde, Robo komut dosyası koşullu olmayan işlemlerini görünüm sırasına göre tek tek gerçekleştirir. Robo komut dosyası koşullu işlemler içeriyorsa koşullu olmayan bir işlem seçilmeden önce her seferinde bu işlemler dikkate alınır. Herhangi bir koşullu işlem tetiklenir ve önceliğine ve kalan çalıştırma sayısına göre seçilirse Robo komut dosyası bu koşullu işlemi gerçekleştirir. Aksi takdirde Robo komut dosyası aşağıdaki koşulsuz işlemi gerçekleştirir. Robo komut dosyasının geçerli olması için en az bir koşulsuz işlem içermesi gerekir.
Aşağıda, Robo komut dosyası yürütme sırasında herhangi bir noktada gösterilen pop-up iletişim kutularını kapatan koşullu bir işlem içeren koşulsuz bir Robo komut dosyası örneği verilmiştir:
{
"id": 1000,
"actions": [
{
"description": "Dismiss popup",
"maxNumberOfRuns": 100,
"contextDescriptor": {
"condition": "default_launcher_shown",
"negateCondition": true
},
"eventType": "GO_HOME"
},
{
"description": "Screen off",
"eventType": "ADB_SHELL_COMMAND",
"command": "input keyevent 26"
},
{
"description": "Wait for 10 seconds",
"eventType": "WAIT",
"delayTime": 10000
},
{
"description": "Screen on",
"eventType": "ADB_SHELL_COMMAND",
"command": "input keyevent 82"
},
{
"description": "Wait for 10 seconds",
"eventType": "WAIT",
"delayTime": 10000
}
}
İşlemleri yok sayma
Robo komut dosyası, Robo'nun belirli bir ekrandaki belirli kullanıcı arayüzü widget'larını veya tüm kullanıcı arayüzü widget'larını yoksayması için talimatlar içerebilir. Bu talimatlar, sırasıyla eventType ELEMENT_IGNORED ve ALL_ELEMENTS_IGNORED ile "işlemleri" yoksayma olarak gösterilir.
Yoksayma işlemleri içeren bir Robo komut dosyasının contextDescriptor özelliği belirli bir ekranla eşleştiğinde Robo, yoksayma işlemlerinin hedeflediği kullanıcı arayüzü widget'larıyla etkileşimde bulunmaz (başka bir Robo komut dosyası işlemi, Robo'nun yoksayılan kullanıcı arayüzü widget'larından birinde işlem yapmasına neden olmadığı sürece).
Robo komut dosyası; yoksayma, koşullu ve koşulsuz işlemlerin bir karışımını içerebilir. Diğer Robo komut dosyası işlemlerinin aksine, yoksayma işlemleri, Robo komut dosyasının contextDescriptor öğesi bir Robo taraması sırasında bir ekranla eşleştiği sürece, priority ve maxNumberOfRuns özelliklerinin değerlerinden bağımsız olarak uygulanır.
Aşağıda, iki Robo komut dosyası içeren bir dosya örneği verilmiştir. İlk Robo komut dosyası, Robo'nun kaynak kimliği "my.app.package:id/ignored_screen" olan bir kullanıcı arayüzü widget'ı içeren ekrandaki tüm kullanıcı arayüzü widget'larını yoksaymasını sağlar. İkinci Robo komut dosyası, Robo'nun, kaynak kimliği "my.app.package:id/main_screen" olan bir kullanıcı arayüzü widget'ı içeren ekranda kaynak kimlikleri Java normal ifadesi ".*:id/done" ile eşleşen kullanıcı arayüzü widget'larını yoksaymasını sağlar:
[
{
"id": 1000,
"contextDescriptor": {
"condition": "element_present",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/ignored_screen"
}
]
},
"actions": [
{
"eventType": "ALL_ELEMENTS_IGNORED"
}
]
},
{
"id": 1001,
"contextDescriptor": {
"condition": "element_present",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/main_screen"
}
]
},
"actions": [
{
"eventType": "ELEMENT_IGNORED",
"elementDescriptors": [
{
"resourceIdRegex": ".*:id/done"
}
]
}
]
}
]
RecyclerView ve AdapterView desteği
RecyclerView ve AdapterView widget'larının alt öğeleri dinamik olarak yüklenir ve mevcut ekrandan birçok kaydırma hareketi uzakta gösterilebilir. Ekran boyutu ve bu alt öğeye ulaşmak için gereken kaydırma sayısı farklı cihaz form faktörleri için farklı olduğundan, alt öğenin mutlak olan veri konumunu kullanmak çok daha güvenilirdir. Bu alt öğeyi ekrana getirmek için gereken kaydırma sayısına güvenmek ve ardından ekran konumunu kullanmak daha az sağlam bir yaklaşımdır.
Bu nedenle Robo komut dosyası, Robo komut dosyası işlemlerinin hedefi olan RecyclerView alt öğelerinin mutlak veri konumlarını recyclerViewChildPosition olarak yakalar. Robo komut dosyası, Robo komut dosyası işlemlerinin hedefi olan AdapterView alt öğelerinin mutlak veri konumlarını da adapterViewChildPosition olarak yakalar.
RecyclerView ve AdapterView alt öğeleriyle ilgili işlemler aşağıdaki adımlarda gerçekleştirilir:
Robo testi, ilgili alt öğenin, kapsayıcı RecyclerView veya AdapterView'da bir konumlandırma işlemi aracılığıyla ekranda gösterilmesini sağlar.
Robo testi, kaydedilen işlemi doğrudan alt öğe üzerinde gerçekleştirir. Çünkü alt öğe zaten ekranda gösterilmektedir.
Aşağıda, bir AdapterView (android.widget.GridView) alt öğesindeki tıklama işlemi örneği verilmiştir:
{
"eventType": "VIEW_CLICKED",
"elementDescriptors": [
{
"className": "com.google.samples.apps.topeka.widget.AvatarView",
"adapterViewChildPosition": 5,
"resourceId": "com.google.samples.apps.topeka:id/avatar",
"contentDescription": "Avatar 6"
},
{
"className": "android.widget.GridView",
"groupViewChildPosition": 1,
"resourceId": "com.google.samples.apps.topeka:id/avatars"
},
{
"className": "android.widget.LinearLayout",
"groupViewChildPosition": 1
},
{
"className": "android.widget.LinearLayout",
"groupViewChildPosition": 0
}
]
}
Aşağıda, bir RecyclerView (android.support.v7.widget.RecyclerView) alt öğesinde tıklama işleminin örneği verilmiştir:
{
"eventType": "VIEW_CLICKED",
"elementDescriptors": [
{
"className": "android.support.v7.widget.AppCompatTextView",
"groupViewChildPosition": 1,
"resourceId": "com.google.samples.apps.topeka:id/category_title"
},
{
"className": "android.widget.FrameLayout",
"recyclerViewChildPosition": 8,
"resourceId": "com.google.samples.apps.topeka:id/category_item"
},
{
"className": "android.support.v7.widget.RecyclerView",
"groupViewChildPosition": 1,
"resourceId": "com.google.samples.apps.topeka:id/categories"
},
{
"className": "android.widget.FrameLayout",
"groupViewChildPosition": 1,
"resourceId": "com.google.samples.apps.topeka:id/category_container"
},
{
"className": "android.widget.LinearLayout",
"groupViewChildPosition": 0
}
]
}
Android Studio'da bir Robo komut dosyası kaydedip Test Lab içinde çalıştırma
Android Studio'da bir Robo komut dosyası oluşturabilirsiniz. Bu komut dosyası, JSON dosyası olarak kaydedilir. Ardından, JSON dosyasını uygulamayla birlikte Firebase Test Lab platformuna yükleyebilir ve testi buna göre çalıştırabilirsiniz.
Komut dosyası ekli bir Robo testi çalıştırdığınızda, Robo testi öncelikle önceden komut verilmiş işlemlerinizi adım adım uygular, ardından uygulamayı normal bir şekilde keşfeder.
Android Studio'da Robo komut dosyası JSON dosyası oluşturmak için Android Studio'da Test Lab kullanarak Robo komut dosyası kaydetme bölümündeki adımları uygulayın.
Robo komut dosyası işlemleri
Aşağıdaki ortak isteğe bağlı özellik tüm işlemler için geçerlidir:
description: Robo test çıkışlarında bu Robo komut dosyası işleminin yürütülmesini izlemeye yardımcı olur.
Onaylama
Onaylanan koşul doğruysa Robo komut dosyası bir sonraki işleme devam eder. Bu işlem başka bir onay olabilir. Aksi takdirde, başarısız bir onaylama nedeniyle Robo komut dosyasının yürütülmesi durdurulur.
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
"eventType": "ASSERTION"
|
-- |
contextDescriptor
|
Onaylanan bağlamı veya koşulu açıklar. Robo komut dosyasının contextDescriptor'ı ile aynı yapıya sahiptir ve benzer özellikler sunar. |
Aşağıda, test edilen uygulamanın ön planda olup olmadığını kontrol eden bir Robo komut dosyası onayı örneği verilmiştir:
{
"eventType": "ASSERTION",
"contextDescriptor": {
"condition": "app_under_test_shown"
}
}
Aşağıda, kaynak kimliği "com.google.samples.apps.topeka:id/done" olan bir kullanıcı arayüzü widget'ının ekranda mevcut olup olmadığını kontrol eden bir Robo komut dosyası onayı örneği verilmiştir:
{
"eventType": "ASSERTION",
"contextDescriptor": {
"condition": "element_present",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/done"
}
]
}
}
Aşağıda, OCR kullanarak bir ekranda "Settings" öğesinin algılanmadığını kontrol eden bir Robo komut dosyası onayı örneği verilmiştir:
{
"eventType": "ASSERTION",
"contextDescriptor": {
"condition": "element_present",
"negateCondition": true,
"visionText": "Settings"
}
}
Tıklama
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
|---|---|
eventType
|
Robo komut dosyası işleminin türünü belirtir. |
"eventType": "VIEW_CLICKED"
|
Test edilen uygulamanın hedef öğesini tıklar. |
"eventType": "SOFT_KEYBOARD_CLICK"
|
Sanal klavyenin hedef öğesini tıklar. |
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK"
|
Sanal klavyenin rastgele öğelerini maxNumberOfRuns defaya kadar tıklar.
|
"eventType": "LIST_ITEM_CLICKED"
|
Android Studio'da Robo komut dosyası kaydedici tarafından liste öğelerini tıklamak için 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ı dışlamalı.
|
visionText
|
OCR kullanarak tıklanan öğeyi tanımlar. elementDescriptors ile karşılıklı dışlamalı.
|
matchIndex
|
Hedef öğe visionText kullanılarak tanımlandığında, eşleşen hedef öğenin geçtiği dizini belirtir. 0 ise Robo komut dosyası işlemi, eşleşen ilk öğeyi seçer. 1 ise Robo komut dosyası işlemi, eşleşen ikinci öğeyi seçer ve bu şekilde devam eder. Sıralama soldan sağa, yukarıdan aşağıya doğru belirlenir. Varsayılan değer 0'dir (ilk eşleşme seçilir).
|
maxNumberOfRuns
|
eventType, SOFT_KEYBOARD_RANDOM_CLICK olduğunda sanal klavyenin rastgele bir öğesinin kaç kez tıklanacağını belirtir.
Varsayılan değer: 1.
|
Aşağıda, kaynak kimliği "com.google.samples.apps.topeka:id/done" olan bir düğmeyi tıklayan Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "VIEW_CLICKED",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/done"
}
]
}
Aşağıda, OCR kullanılarak ekranda algılanan "Search" kelimesinin ikinci örneğini tıklayan bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "VIEW_CLICKED",
"visionText": "Search",
"matchIndex": 1
}
Aşağıda, "Emoji button" içerik açıklamasına sahip bir sanal klavye öğesini tıklayan Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "SOFT_KEYBOARD_CLICK",
"elementDescriptors": [
{
"contentDescription": "Emoji button"
}
]
}
Aşağıda, rastgele sanal klavye öğelerini beş defaya kadar tıklayan bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK",
"maxNumberOfRuns": 5
}
Sanal klavyeyi devre dışı bırak
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
"eventType": "DISABLE_KEYBOARD"
|
-- |
Aşağıda, sanal klavyeyi devre dışı bırakan bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "DISABLE_KEYBOARD"
}
adb kabuk komutunu yürütme
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
"eventType": "ADB_SHELL_COMMAND"
|
-- |
command
|
Yürütülecek Android Debug Bridge (adb) kabuk komutu. |
Aşağıdaki özellik isteğe bağlıdır:
expectedOutputRegex: Komutun beklenen çıkışı (Java normal ifadesi olarak). Çıkış eşleşmezse Robo komut dosyası işlemi başarısız olur. Varsayılan olarak boş bir dizedir. Bu, çıkışın kontrol edilmediği anlamına gelir.
Aşağıda, test edilen uygulamanın kullanıcı verilerini temizleyen bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "ADB_SHELL_COMMAND",
"command": "pm clear __%APP_PACKAGE_NAME%__"
}
İzin verin
Bu işlem, Espresso Test Recorder ile geriye dönük uyumluluk için Android Studio'daki Robo komut dosyası kaydedici tarafından kaydedilir. Robo testi, her taramanın başında test edilen uygulamaya tüm izinleri verir. Bu nedenle, bu işlem bir işlem değildir. Bu işlemi Robo komut dosyalarınızda KULLANMAYIN.
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
"eventType": "PERMISSIONS_REQUEST"
|
-- |
Ekrandaki tüm öğeleri yoksayma
Bu işlem, Robo'nun, içeren Robo komut dosyasını tetikleyen herhangi bir ekrandaki tüm öğeleri yoksaymasına neden olur.
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
"eventType": "ALL_ELEMENTS_IGNORED"
|
-- |
Aşağıda, Robo'nun bir ekrandaki tüm öğeleri yoksaymasını sağlayan bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "ALL_ELEMENTS_IGNORED"
}
Öğeleri yoksayma
Bu işlem, Robo'nun belirtilen elementDescriptors ile eşleşen bir öğeyi (veya öğeleri) yoksaymasını sağlar.
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
"eventType": "ELEMENT_IGNORED"
|
-- |
elementDescriptors
|
Android kullanıcı arayüzü hiyerarşisini kullanarak yoksayılan kullanıcı arayüzü widget'larını tanımlar. |
Aşağıdaki özellik isteğe bağlıdır:
ignoreChildren:trueolarak ayarlanırsa Robo, yoksayılan kullanıcı arayüzü widget'larının tüm alt öğelerini de yoksayar. Varsayılan olarakfalseşeklindedir.
Aşağıda, Robo'nun içerik açıklamaları "Avatar" ile başlayan tüm öğeleri yoksaymasını sağlayan bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "ELEMENT_IGNORED",
"elementDescriptors": [
{
"contentDescriptionRegex": "Avatar.*"
}
]
}
Girdi metni
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
|---|---|
eventType
|
Robo komut dosyası işleminin türünü belirtir. |
"eventType": "VIEW_TEXT_CHANGED"
|
Belirtilen metni hedef kullanıcı arayüzü widget'ına girer. |
"eventType": "ENTER_TEXT"
|
Verilen metni hedef kullanıcı arayüzü widget'ına girer ve ardından bu kullanıcı arayüzü widget'ına bir KEYCODE_ENTER etkinliği gönderir.
|
elementDescriptors
|
Android kullanıcı arayüzü hiyerarşisini kullanarak hedef kullanıcı arayüzü widget'ını tanımlar. |
replacementText
|
Hedef kullanıcı arayüzü widget'ına girilecek metin. |
Aşağıda, "John" değerini "com.google.samples.apps.topeka:id/first_name" kaynak kimliğine sahip bir kullanıcı arayüzü widget'ına giren bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "VIEW_TEXT_CHANGED",
"replacementText": "John",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/first_name"
}
]
}
Uzun tıklama
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
"eventType": "VIEW_LONG_CLICKED"
|
-- |
elementDescriptors
|
Android kullanıcı arayüzü hiyerarşisini kullanarak hedef kullanıcı arayüzü widget'ını tanımlar. visionText ile karşılıklı olarak birbirini hariç tutar.
|
visionText
|
OCR kullanarak uzun süre tıklanan öğeyi tanımlar. elementDescriptors ile karşılıklı dışlamalı.
|
matchIndex
|
Hedef öğe visionText kullanılarak tanımlandığında, eşleşen hedef öğenin geçtiği dizini belirtir. 0 ise Robo komut dosyası işlemi, eşleşen ilk öğeyi seçer. 1 ise Robo komut dosyası işlemi, eşleşen ikinci öğeyi seçer ve bu şekilde devam eder. Sıralama soldan sağa, yukarıdan aşağıya doğru belirlenir. Varsayılan değer 0'dir (ilk eşleşme seçilir).
|
Aşağıdaki özellik isteğe bağlıdır:
delayTime: Uzun tıklama için basılı tutma süresini milisaniye cinsinden belirtir.
Aşağıda, "Avatar 8" içerik açıklamasına sahip bir kullanıcı arayüzü widget'ında beş saniye süren bir tıklama gerçekleştiren Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "VIEW_LONG_CLICKED",
"elementDescriptors": [
{
"contentDescription": "Avatar 8"
}
],
"delayTime": 5000
}
Tek noktalı hareket yapma
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
|---|---|
"eventType": "ONE_POINT_GESTURE"
|
-- |
coordinates
|
Tek noktalı hareket için "(x1, y1)->(x2,y2)" biçiminde,yüzde veya piksel cinsinden iki koordinat. |
Aşağıdaki özellik isteğe bağlıdır:
dragAndDrop:trueolarak ayarlanırsa tek noktalı hareket, sürükle ve bırak işlemi gerçekleştirir. Varsayılan olarakfalseşeklindedir.
Aşağıda, aşağı kaydırma işlemi gerçekleştiren bir Robo komut dosyası tek noktalı hareket işlemine dair bir örnek verilmiştir:
{
"eventType": "ONE_POINT_GESTURE",
"coordinates": "(50%,25%)->(50%,75%)"
}
İki noktalı hareket yapma
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
|---|---|
"eventType": "TWO_POINT_GESTURE"
|
-- |
coordinates
|
İki noktalı bir hareket için dört koordinat. "(x1,y1)->(x2,y2),(x3,y3)->(x4,y4)" şeklinde yüzde veya piksel olarak biçimlendirilir. |
Aşağıda, iki parmakla genişletme hareketi gerçekleştiren bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "TWO_POINT_GESTURE",
"coordinates": "(50%,50%)->(25%,50%),(50%,50%)->(75%,50%)"
}
IME işlemi gerçekleştirme
Bu işlem, belirtilen hedef kullanıcı arayüzü widget'ı için Giriş Yöntemi Düzenleyici'de (IME) mevcut işlem düğmesine (ör. sonraki, bitti ve ara) basar.
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
|---|---|
"eventType": "PRESSED_EDITOR_ACTION"
|
-- |
elementDescriptors
|
Android kullanıcı arayüzü hiyerarşisini kullanarak hedef kullanıcı arayüzü widget'ını tanımlar. |
Aşağıda, kaynak kimliği "com.google.samples.apps.topeka:id/first_name" olan bir kullanıcı arayüzü widget'ında IME işlemi gerçekleştiren bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "PRESSED_EDITOR_ACTION",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/first_name"
}
]
}
Geri tuşuna basma
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
eventType
|
Robo komut dosyası işleminin türünü belirtir. |
"eventType": "PRESSED_BACK"
|
Cihaza bir KEYCODE_BACK etkinliği gönderir.
|
"eventType": "PRESSED_BACK_EMULATOR_28"
|
Android Studio'da Robo komut dosyası kaydedici tarafından API 28 emülatörlerinde geri düğmesine basmak için kullanılır. |
Aşağıda, geri düğmesine basan bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "PRESSED_BACK"
}
Ana sayfa düğmesine basın
Bu işlem, cihaza bir KEYCODE_HOME etkinliği gönderir.
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
"eventType": "GO_HOME"
|
-- |
Aşağıda, ana sayfa düğmesine basan bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "GO_HOME"
}
Bir öğeyi görünür alana kaydırma
Bu işlem, Robo testin, belirtilen elementDescriptors ile eşleşen kullanıcı arayüzü widget'ını, belirtilen childElementDescriptors ile eşleşen kullanıcı arayüzü widget'ı ekranda görünene veya kaydırılan widget artık kaydırılamayana ya da maksimum 50 kaydırma sayısına ulaşılana kadar ileri kaydırmasını sağlar.
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
"eventType": "ELEMENT_SCROLL_INTO_VIEW"
|
-- |
elementDescriptors
|
Android kullanıcı arayüzü hiyerarşisini kullanarak kaydırılan kullanıcı arayüzü widget'ını tanımlar. |
childElementDescriptors
|
Android kullanıcı arayüzü hiyerarşisini kullanarak kaydırılacak kullanıcı arayüzü widget'ını tanımlar. |
Aşağıda, "Orange" metnini içeren kullanıcı arayüzü widget'ı ekranda görünene kadar (veya daha fazla kaydırma yapılamayana ya da maksimum 50 kaydırma sayısına ulaşılana kadar) "my.app.package:id/scrollable_card_container" kaynak kimliğine sahip kullanıcı arayüzü widget'ını kaydıran bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "ELEMENT_SCROLL_INTO_VIEW",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/scrollable_card_container"
}
],
"childElementDescriptors": [
{
"text": "Orange"
}
]
}
Kaydırın
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
|---|---|
"eventType": "VIEW_SWIPED"
|
-- |
swipeDirection
|
Kaydırma yönünü belirtir:
|
elementDescriptors
|
Android kullanıcı arayüzü hiyerarşisini kullanarak hedef kullanıcı arayüzü widget'ını tanımlar. |
Aşağıda, "my.app.package:id/custom_content" kaynak kimliğine sahip bir kullanıcı arayüzü widget'ını yukarı kaydıran bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "VIEW_SWIPED",
"swipeDirection": "Up",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/custom_content"
}
]
}
Ekran görüntüsü al
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
"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ı işlemi örneği verilmiştir:
{
"eventType": "TAKE_SCREENSHOT",
"screenshotName": "my_screenshot"
}
Ekranda bir noktaya dokunun.
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
|---|---|
"eventType": "POINT_TAP"
|
-- |
pointTapXCoordinate
|
Dokunulan noktanın piksel X koordinatı. pointTapXPercent ve pointTapYPercent ile karşılıklı olarak birbirini dışlar.
|
pointTapYCoordinate
|
Dokunulan noktanın piksel Y koordinatı. pointTapXPercent ve pointTapYPercent ile karşılıklı olarak birbirini dışlar.
|
pointTapXPercent
|
Dokunulan noktanın yüzde cinsinden X koordinatı. pointTapXCoordinate ve pointTapYCoordinate ile karşılıklı olarak birbirini dışlar.
|
pointTapYPercent
|
Dokunulan noktanın yüzde cinsinden Y koordinatı. pointTapXCoordinate ve pointTapYCoordinate ile karşılıklı olarak birbirini dışlar.
|
Aşağıda, ekranın ortasına dokunan bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "POINT_TAP",
"pointTapXPercent": 50,
"pointTapYPercent": 50
}
Bir öğenin içindeki bir noktaya dokunma
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
"eventType": "POINT_TAP_ELEMENT"
|
-- |
pointTapXPercent
|
Hedef öğe içindeki X koordinatının yüzdesi. |
pointTapYPercent
|
Hedef öğe içindeki yüzde Y koordinatı. |
elementDescriptors
|
Android kullanıcı arayüzü hiyerarşisini kullanarak hedef kullanıcı arayüzü widget'ını tanımlar. |
Aşağıda, bir arama çubuğunun kaydırıcısını sağa hareket ettiren bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "POINT_TAP_ELEMENT",
"pointTapXPercent": 80,
"pointTapYPercent": 50,
"elementDescriptors": [
{
"resourceId": "my.app.package:id/my_seekbar"
}
]
}
Taramayı sonlandır
Bu işlem, Robo testini durdurur.
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
|---|---|
"eventType": "TERMINATE_CRAWL"
|
-- |
Aşağıda, Robo testini durduran bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "TERMINATE_CRAWL"
}
Bekle
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
"eventType": "WAIT" (or "DELAYED_MESSAGE_POSTED")
|
-- |
delayTime
|
Bekleme süresini milisaniye cinsinden belirtir. |
Aşağıda, üç saniye bekleyen bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "WAIT",
"delayTime": 3000
}
Öğeyi bekleyin
Bu işlem, Robo testinin, belirtilen zaman aşımı süresine kadar bir öğenin ekranda görünmesini beklemesini sağlar.
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
| Özellik | Açıklama |
"eventType": "WAIT_FOR_ELEMENT"
|
-- |
delayTime
|
Bekleme zaman aşımını milisaniye cinsinden belirtir. |
elementDescriptors
|
Android kullanıcı arayüzü hiyerarşisini kullanarak beklenen kullanıcı arayüzü widget'ını tanımlar. |
Aşağıda, "my.app.package:id/confirmation_button" kaynak kimliğine sahip bir kullanıcı arayüzü widget'ının ekranda görünmesi için 30 saniyeye kadar bekleyen bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "WAIT_FOR_ELEMENT",
"delayTime": 30000,
"elementDescriptors": [
{
"resourceId": "my.app.package:id/confirmation_button"
}
]
}