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 güvencesi (QA) görevlerini otomatikleştiren ve sürekli entegrasyon (CI) ile lansman öncesi test stratejilerini etkinleştiren testlerdir. Robo komut dosyası, bir kullanıcı arayüzü (UI) ve diğer işlemler dizisini açıklayan bir JSON dosyasıdır.
Robo komut dosyası aşağıdaki yöntemlerle oluşturulabilir:
Robo komut dosyası kayıt ö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 bölümüne bakın.
Giriş
Robo komut dosyası, test edilen uygulamanın Android uygulama paketi (APK) gibi diğer girişlerle birlikte Robo testine sağlanır.
Aşağıda, test edilen uygulama başlatılırken tetiklenen ve kullanıcının bir uygulamada oturum açmasını sağlayan 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 bu dosyada, yukarıdaki örnekte olduğu gibi varsayılan app_under_test_shown
tetikleme koşulu varsa Robo komut dosyasını dosyada daha basit bir biçimde (yalnızca işlemlerinin sırası olarak) belirtebilirsiniz:
[
{
"eventType": "VIEW_TEXT_CHANGED",
"replacementText": "user123",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/username"
}
]
},
{
"eventType": "VIEW_TEXT_CHANGED",
"replacementText": "12345",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/password"
}
]
},
{
"eventType": "VIEW_CLICKED",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/login"
}
]
}
]
Robo komut dosyaları için iOS ve sonraki sürümler desteği
iOS+ için Robo (Beta), Robo komut dosyaları için sınırlı destek sunar. iOS ve sonraki sürümler için Robo komut dosyası söz dizimi, Android söz dizimine benzer. Ayrıca, desteklenen iOS ve sonraki sürümler özellikleri, Android'deki benzerlerine benzer şekilde çalışır.
iOS ve sonraki sürümlerde aşağıdaki işlemler desteklenir:
- Onaylama
- Tıklama
- Uzun tıklama
- Kaydırma
- Tüm öğeleri yoksay
- Bekle
- Ekran görüntüsü alma
- Taramayı sonlandırma
Öğe tanımlayıcılarındaki aşağıdaki tanımlayıcı özellikler iOS ve sonraki sürümlerde desteklenir:
- Sınıf adı
- Üst sınıf adı
- İçerik açıklaması (ve normal ifade)
- Metin (ve normal ifade)
iOS ve sonraki sürümlerde aşağıdaki bağlam tanımlayıcılarında tetikleyici koşullar desteklenir:
- Test altındaki uygulama gösteriliyor
- Öğe mevcut
- Robo dışı komut dosyası işlemi gerçekleştirildi
Yapı
Robo komut dosyalarının Robo'nun komut dosyasını nasıl yürüttüğünü açıklayan birkaç özelliği vardır. Bu özelliklerin çoğu, önceden tanımlanmış varsayılan değerlere sahip isteğe bağlı özelliklerdir:
Özellik | Açıklama |
id
|
Tarama çıkışlarında bu Robo komut dosyasını izlemeye yardımcı olan tam sayı.
Robo'da kendi id 'lerine sahip yerleşik Robo komut dosyaları vardır. Farklı Robo komut dosyalarında aynı id , bu komut dosyalarının davranışını etkilemese de tarama çıkışlarında bu Robo komut dosyalarından gelen işlemleri ayırt etmek zor olabilir. Çakışmaları önlemek için Robo komut dosyalarınıza 1000 veya daha yüksek bir id atamanız önerilir.
|
description
|
id 'e 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 şeklindedir.
|
maxNumberOfRuns
|
Robo'nun bir tarama sırasında bu Robo komut dosyasını kaç kez yürütebileceğini belirtir. Robo varsayılan olarak Robo komut dosyasını bir defa yürütebilir. |
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. |
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 bir taramanın başında bir kez yürütülen tek bir işlem içeren 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ısı
Bağlam tanımlayıcısı, bir RoboScript'i tetikleyen bağlamı veya koşulu bir veya birkaç özelliğin kombinasyonunu kullanarak tanımlar:
Özellik | Açıklama |
---|---|
"condition": "always"
|
Her zaman bir Robo komut dosyasını tetikler. |
"condition": "element_present"
|
Ekranda elementDescriptors ile eşleşen bir kullanıcı arayüzü widget'ının veya visionText tarafından belirtilen metnin olup olmadığını kontrol eder.
|
"condition": "element_disabled"
|
Ekranda elementDescriptors ile eşleşen bir kullanıcı arayüzü widget'ının bulunduğunu ve etkileşimde bulunulamayacağını kontrol eder.
|
"condition": "element_checked"
|
elementDescriptors ile eşleşen bir kullanıcı arayüzü widget'ının ekranda bulunduğundan ve işaretli olduğundan emin olur.
|
"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 (yani ön planda uygulama çalışıp çalışmadığını) kontrol eder. |
"condition": "non_roboscript_action_performed"
|
Robo test tarafından gerçekleştirilen son nonRoboscriptActionCount art arda işlemin, Robo komut dosyası işlemleri olmadığından emin olur.
|
negateCondition
|
true olarak ayarlanırsa condition değerini reddeder. Örneğin, bir kullanıcı arayüzü widget'ının ekranda OLMADIĞINI veya test edilen uygulamanın ön planda OLMADIĞINI kontrol etmek için bu özelliği kullanabilirsiniz.
|
elementDescriptors
|
Ekranda bir kullanıcı arayüzü widget'ını tanımlayan bir veya daha fazla öğe tanımlayıcısı.
element_present ,
element_disabled ve element_checked
koşullarıyla birlikte kullanılır. visionText ile birlikte kullanılamaz. 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 birlikte kullanılamaz.
|
nonRoboscriptActionCount
|
Önceden gerçekleştirilen ardışık Robo dışı 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. Bu değer varsayılan olarak 1 şeklindedir.
|
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 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" : "DELAYED_MESSAGE_POSTED",
"delayTime" : 5000
}]
}
İşlemler
Robo komut dosyasındaki her işlem, aşağıdaki tabloda açıklanan bir veya daha fazla özellik-değer çiftinden oluşan bir paket olarak temsil edilir:
Özellik | Açıklama |
eventType
|
İşlemin türünü belirtir (ör. tıklama, metin düzenleme vb.). Her işlem için gereklidir. |
elementDescriptors
|
Kullanıcı arayüzü widget'ını tanımlayan tanımlayıcılardır. Belirli bir düğmeyi tıklamak gibi hedef kullanıcı arayüzü widget'ı olan tüm işlemler için gereklidir. |
optional
|
true olarak ayarlanırsa bu işlem yapılamadığında atlanır. Örneğin, bu işlem, hedef kullanıcı arayüzü widget'ını ekranda bulamadığı zaman atlanır. Bu durumda, içeren RoboScript başarısız olmaz. Varsayılan değer false 'tür.
|
replacementText
|
Hedef kullanıcı arayüzü widget'ına girilmesi gereken metin. Metin düzenleme işlemleri 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 işlemleri için gereklidir. |
pointTapXCoordinate ve pointTapYCoordinate
|
Dokunulan noktanın piksel X ve Y koordinatları. pointTapXPercent ve pointTapYPercent ile birbirini dışlar.
Noktaya dokunma işlemleri için gereklidir.
|
pointTapXPercent ve pointTapYPercent
|
Dokunulan noktanın yüzde X ve Y koordinatları. pointTapXCoordinate ve pointTapYCoordinate ile karşılıklı olarak birbirini dışlar. Üzerine dokunma işlemleri için gereklidir.
|
Aşağıda, hedef kullanıcı arayüzü widget'ları içermeyen iki işlem içeren bir Robo komut dosyası örneği verilmiştir. Bu, bu işlemlerin 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
Öğe tanımlayıcısı, aşağıdaki tanımlama özelliklerinden birini veya daha fazlasını kullanarak kullanıcı arayüzü widget'ını tanımlar:
Özellik | Açıklama |
className
|
– |
ancestorClassName
|
Öğenin kullanıcı arayüzü hiyerarşisi atasal sınıfının adı. Üst düğüm, öğ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ünür)
|
– |
textRegex
|
text ile eşleşecek Java normal ifadesi.
|
groupViewChildPosition ,
recyclerViewChildPosition veya
adapterViewChildPosition
|
Bir kullanıcı arayüzü widget'ının üst widget'ının türüne bağlı olarak alt konumunu temsil eder. |
Bu özellikler genellikle tanımlanmaz. Örneğin, bir düğmede metin ve içerik açıklaması olmayabilir. Bazı özellik değerleri mevcut olsa bile belirli bir uygulama ekranında (resourceId
dahil) benzersiz olmayabilir.
Örneğin, bir listenin öğeleri arasında ayrım yapmak genellikle yalnızca üst widget'larındaki farklı alt konumlarını kullanarak mümkündür. Bu, bir kullanıcı arayüzü widget'ını tanımlamak için genellikle tek bir öğe tanımlayıcısı kullanılmasının yeterli olmadığı anlamına gelir. Bu nedenle, bir işlemin elementDescriptors
özelliği, ilk öğenin hedef kullanıcı arayüzü widget'ına, ikinci öğenin 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 ikisi de sağlanan öğe tanımlayıcılarını kullanarak hedef kullanıcı arayüzü widget'ını tanımlamanızı gerektirir:
[
{
"eventType": "VIEW_TEXT_CHANGED",
"replacementText": "John",
"elementDescriptors": [
{
"className": "android.support.v7.widget.AppCompatEditText",
"groupViewChildPosition": 0,
"resourceId": "com.google.samples.apps.topeka:id/first_name"
},
{
"className": "android.widget.FrameLayout",
"groupViewChildPosition": 0
},
{
"className": "android.support.design.widget.TextInputLayout",
"groupViewChildPosition": 1
}
]
},
{
"eventType": "VIEW_CLICKED",
"elementDescriptors": [
{
"className": "android.support.design.widget.FloatingActionButton",
"groupViewChildPosition": 1,
"resourceId": "com.google.samples.apps.topeka:id/done"
},
{
"className": "android.widget.FrameLayout",
"groupViewChildPosition": 1,
"resourceId": "com.google.samples.apps.topeka:id/content"
},
{
"className": "android.widget.FrameLayout",
"groupViewChildPosition": 0,
"resourceId": "com.google.samples.apps.topeka:id/sign_in_content"
}
]
}
]
Yürütme seçenekleri
İsteğe bağlı olarak, bir Robo komut dosyasında işlem listesinin önüne, söz konusu Robo komut dosyasının yürütme seçeneklerini belirten bir JSON nesnesi ekleyebilirsiniz. Bu yapılandırma başlığı, roboscript
anahtar kelimesiyle başlar ve ardından istenen yürütme seçeneklerinin JSON gösterimi gelir.
Robo komut dosyaları aşağıdaki yürütme seçeneklerini destekler:
executionMode
: Robo komut dosyası çalışırken uygulanan yürütme seçenekleri:strict
:true
olarak ayarlanırsa Robo komut dosyası kısmi eşleştirme, mevcut işlemi atlama ve askıya alma işlemlerini kullanmaz. Yani Robo komut dosyası normal bir enstrümantasyon testi olarak yürütülür ve işlemlerinden herhangi biri yapılamadığında hemen başarısız olur. Varsayılan olarakfalse
'tir.dismiss_popups
:true
olarak ayarlanırsa Robo testi,strict
modunda bile Robo komut dosyasını gerçekleştirirken beklenmedik tüm iletişim kutularını kapatır. Bu seçenek,strict
modunda değilken etkisizdir. Varsayılan olarakfalse
şeklindedir.notify
:false
olarak ayarlanırsa Robo komut dosyası, yürütülmesinin başında ve sonunda ekranda bildirim göstermez. Varsayılan olaraktrue
değerini alır.
postscript
: Robo komut dosyası tamamlandıktan sonra uygulanan yürütme seçenekleri:terminate
-true
olarak ayarlanırsa Robo testi, Robo komut dosyası tamamlandıktan sonra taramayı durdurur. Bu değer varsayılan olarakfalse
şeklindedir.
Aşağıda, strict
modunda yürütülen ve üç saniye boyunca uyuyan ve ardından tarama durdurulan ekran bildirimleri olmadan yürütülen Robo komut dosyası örneği verilmiştir:
"roboscript": {
"executionMode": {
"strict": true,
"notify": false
},
"postscript": {
"terminate": true
}
}
[
{
"eventType": "DELAYED_MESSAGE_POSTED",
"delayTime": 3000
}
]
Şablon parametreleri
Şablon parametresi, Robo testinde bir Robo komut dosyasında yer tutucu olarak kullanılır ve Robo testi, yürütülmek üzere bu Robo komut dosyasını yüklediğinde gerçek değerle değiştirilir. Şablon parametrelerinin başına ç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 sürecini durduran bir Robo komut dosyası örneği verilmiştir:
[
{
"eventType": "ADB_SHELL_COMMAND",
"command": "am force-stop __%APP_PACKAGE_NAME%__"
}
]
Yorumlar
Robo komut dosyaları, #
veya //
ile başlayan satırlar olan yorum satırları içerebilir.
Aşağıda, birkaç yorum içeren bir Robo komut dosyası örneği verilmiştir:
# Confirm a user account.
[
{
// Click the DONE button.
"eventType": "VIEW_CLICKED",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/done"
}
]
}
]
Özellikler
Varsayılan olarak, bir Robo komut dosyasının tüm işlemleri tamamlanana (veya en azından denenene) kadar Robo komut dosyası etkin kalır. Robo testi, gerçekleştirilecek bir işlem seçerken Robo komut dosyası işlemiyle eşleştirme yapmaya devam eder. 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şme ölçütleri gevşetilir ve eşleşme yeniden denenir. Kısmi eşleme, bir Robo komut dosyası işleminin hedef kullanıcı arayüzü widget'ını eşlerken en dıştaki öğe tanımlayıcısı dikkate alınmaz.
Kısmi eşleşme başarılı olursa ilgili Robo komut dosyası işlemi normal şekilde gerçekleştirilir. Bu teknik, ekran öğelerinin yeniden düzenlenmesi gibi durumlarda uygulama yapısının değiştiği (ör. uygulama sürümleri arasında) senaryoları destekler. |
Mevcut işlemi atla | Mevcut Robo komut dosyası işlemi tam 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 asla geri dönmez) ve sonraki işlemi gerçekleştirir.
Bu teknik, uygulama davranışının sürümler arasında değiştiği veya kararsız olduğu senaryoları destekler. Örneğin, bir Robo komut dosyasının kaydedilmesi ve yeniden oynatılması sırasında aralıklı bir iletişim kutusunun farklı ekranlarda görünmesi gibi. |
Askıya al | Mevcut veya sonraki Robo komut dosyası işlemleri tamamen veya kısmen eşleşemezse Robo komut dosyası geçici olarak askıya alınır ve Robo testi, diğer stratejilerini kullanarak gerçekleştireceği 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ınır. Bu nedenle, Robo komut dosyalarının bir Robo testi için mutlaka prolog olması gerekmez ve Robo komut dosyası işlemlerini standart Robo testi işlemlerine ekleyebilirsiniz. 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ı" gerektiği kadar büyük olduğu senaryoları destekler. |
Öncelikler
Bir Robo komut dosyası maxNumberOfRuns
değerine ulaşırsa artık belirli bir taramada tetiklenemez. Mevcut bağlam tarafından birden fazla Robo komut dosyası tetiklenebiliyorsa öncelik, aşağıdaki sırayla seçilerek verilir:
contextDescriptor
özelliğine sahip olmalıdır.- En yüksek
priority
değerine sahip (varsayılan olarak tüm Robo komut dosyaları,1
için aynı yürütmepriority
değerine sahiptir). - Robo komut dosyalarının öncelikleri aynıysa Robo komut dosyaları listesinde en önce görünür.
Aşağıda, aynı işlemi gerçekleştiren ve aynı koşulla (app-under-test ön planda olmak üzere) 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": "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 plandayken Robo aşağıdakileri sırayla 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"
uygun son Robo komut dosyası olarak kullanılacak.
Tekrarlanan koşular
Varsayılan olarak Robo, bir tarama sırasında en fazla bir kez Robo komut dosyası tetikler. Bu, maxNumberOfRuns
özelliği aracılığıyla ayarlanabilir.
Aşağıda, test edilen uygulamayı 10 kata 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 başlatılmadan ve test edilen uygulamayı taramaya başlamadan önce. |
post_crawl
|
Robo, test edilen uygulamayı taramayı tamamladıktan sonra. post_crawl Robo komut dosyası 15 saniyeyi aşmamalıdır. Aksi takdirde tarama zaman aşımıyla sonlandırılabilir.
|
crawl
|
Robo'nun test altında uygulamayı taradığı ana tarama aşaması. |
close_screen
|
Robo belirli bir ekrandan geri dönmeye (geri izleme) çalıştığında bu ekrandaki tüm olası işlemler keşfedilir. Robo, varsayılan olarak geri tuşuna 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'nun taramaya başlamasından önce test edilen uygulamanın kullanıcı verilerini temizleyen bir Robo komut dosyası örneği verilmiştir:
{
"id": 1000,
"crawlStage": "pre_crawl",
"actions": [
{
"eventType": "ADB_SHELL_COMMAND",
"command": "pm clear __%APP_PACKAGE_NAME%__"
}
]
}
Aşağıda, Robo'ya bir onay iletişim kutusundan geri dönmeye (geri dönüş) "Cancel"
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şlemlerin, Robo'nun bunları nasıl gerçekleştirdiğini açıklayan üç ek özelliği vardır:
Özellik | Açıklama |
priority
|
Bu koşullu işlemin, içeren Robo komut dosyasındaki diğer koşullu işlemlere kıyasla önceliği. Varsayılan olarak tüm koşullu işlemlerin önceliği 1 'tür.
|
maxNumberOfRuns
|
Bu koşullu işlemin, kapsayıcı Robo komut dosyasının bir yürütmesi sırasında kaç kez yapılabileceği. Varsayılan olarak tüm koşullu eylemler, Robo komut dosyasını içeren tek bir yürütmede 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. |
Robo komut dosyası tetiklendiğinde, koşulsuz işlemlerini görünme sırasına göre tek tek gerçekleştirir. Robo komut dosyası koşullu işlemler içeriyorsa gerçekleştirilecek koşullu olmayan işlem seçilmeden önce her seferinde bunlar dikkate alınır. Herhangi bir koşullu işlem tetiklenirse 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. Bir 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ütülmesi 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": "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
}
}
İşlemleri yoksayma
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" yoksayıyor olarak gösterilir.
Atlama işlemleri içeren bir Robo komut dosyasının contextDescriptor
özelliği belirli bir ekranla eşleştiğinde Robo, atlama işlemleri tarafından hedeflenen kullanıcı arayüzü widget'larıyla etkileşime girmez (Başka bir Robo komut dosyası işlemi Robo'nun, atlanan kullanıcı arayüzü widget'larından birinde işlem yapmasını sağlamadığı sürece).
Robo komut dosyası, yok sayma, koşullu ve koşulsuz işlemlerin bir karışımını içerebilir. Diğer Robo komut dosyası işlemlerinin aksine, yoksayma işlemleri, priority
ve maxNumberOfRuns
özelliklerinin değerlerine bakılmaksızın, içeren Robo komut dosyasının contextDescriptor
değeri bir Robo taraması sırasında bir ekranla eşleştiğinde uygulanır.
Aşağıda, iki Robo komut dosyası içeren bir dosya örneği verilmiştir. İlk Robo komut dosyası, Robo'nun "my.app.package:id/ignored_screen"
kaynak kimliğine sahip bir kullanıcı arayüzü widget'ı içeren bir 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 bir 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 çocukları dinamik olarak yüklenir ve mevcut ekrandan çok uzakta gösterilebilir. 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 veri konumuna (mutlak veri) güvenmek çok daha güçlüdür. Bu öğeyi ekrana getirmek için gereken kaydırma sayısına güvenmek ve ardından öğenin ekrandaki 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ı ayrıca Robo komut dosyası işlemlerinin hedefi olan AdapterView alt öğelerinin mutlak veri konumlarını da adapterViewChildPosition
olarak yakalar.
RecyclerView ve AdapterView alt klasörlerindeki işlemler, aşağıdaki adımlarla gerçekleştirilir:
Robo test, ilgili alt öğenin, içeren RecyclerView veya AdapterView'da bir konumlandırma işlemi aracılığıyla ekranda gösterilmesini sağlar.
Robo testi, kaydedilen işlemi zaten ekranda gösterildiği için doğrudan alt öğe üzerinde gerçekleştirir.
Aşağıda, bir AdapterView (android.widget.GridView
) alt öğesinde tıklama işlemi örneği verilmiştir:
{
"eventType": "VIEW_CLICKED",
"elementDescriptors": [
{
"className": "com.google.samples.apps.topeka.widget.AvatarView",
"adapterViewChildPosition": 5,
"resourceId": "com.google.samples.apps.topeka:id/avatar",
"contentDescription": "Avatar 6"
},
{
"className": "android.widget.GridView",
"groupViewChildPosition": 1,
"resourceId": "com.google.samples.apps.topeka:id/avatars"
},
{
"className": "android.widget.LinearLayout",
"groupViewChildPosition": 1
},
{
"className": "android.widget.LinearLayout",
"groupViewChildPosition": 0
}
]
}
Aşağıda, bir RecyclerView (android.support.v7.widget.RecyclerView
) alt öğesinde tıklama işlemi örneği verilmiştir:
{
"eventType": "VIEW_CLICKED",
"elementDescriptors": [
{
"className": "android.support.v7.widget.AppCompatTextView",
"groupViewChildPosition": 1,
"resourceId": "com.google.samples.apps.topeka:id/category_title"
},
{
"className": "android.widget.FrameLayout",
"recyclerViewChildPosition": 8,
"resourceId": "com.google.samples.apps.topeka:id/category_item"
},
{
"className": "android.support.v7.widget.RecyclerView",
"groupViewChildPosition": 1,
"resourceId": "com.google.samples.apps.topeka:id/categories"
},
{
"className": "android.widget.FrameLayout",
"groupViewChildPosition": 1,
"resourceId": "com.google.samples.apps.topeka:id/category_container"
},
{
"className": "android.widget.LinearLayout",
"groupViewChildPosition": 0
}
]
}
Android Studio'da Robo komut dosyası kaydedip bunu Test Lab uygulamasında çalıştırın
Android Studio'da, komut dosyasını JSON dosyası olarak kaydeden bir Robo komut dosyası oluşturabilirsiniz. Daha sonra, JSON dosyasını uygulamayla Firebase Test Lab konumuna yükleyebilir ve testi uygun şekilde çalıştırabilirsiniz.
Komut dosyası ekli bir Robo testi çalıştırdığınızda Robo test, önce önceden komut verilmiş işlemlerinizi 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 başlıklı makaledeki adımları uygulayın.
Robo komut dosyası işlemleri
Aşağıdaki ortak isteğe bağlı özellik tüm işlemler için geçerlidir:
description
: Bu Robo komut dosyası işleminin Robo testi çıkışlarında yürütülmesini izlemeye yardımcı olur.
Onaylama
İddia edilen koşul doğruysa Robo komut dosyası bir sonraki işleme devam eder. Bu işlem başka bir iddia olabilir. Aksi takdirde, Robo komut dosyası yürütme işlemi başarısız bir onay nedeniyle durdurulur.
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
Özellik | Açıklama |
"eventType": "ASSERTION"
|
-- |
contextDescriptor
|
İddia edilen bağlamı veya koşulu açıklar. Aynı yapıya sahiptir ve Robo komut dosyasınıncontextDescriptor'ına benzer özellikler sunar. |
Aşağıda, app-under-test değerinin ö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 bulunup bulunmadığını kontrol eden bir Robo komut dosyası beyanı örneği verilmiştir:
{
"eventType": "ASSERTION",
"contextDescriptor": {
"condition": "element_present",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/done"
}
]
}
}
Aşağıda, OCR kullanarak ekranda "Settings"
tespit EDİLMEDİĞİNİ kontrol eden Robo komut dosyası onayına bir örnek 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"
|
Dokunmatik klavyenin hedef öğesini tıklar. |
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK"
|
Yazılım klavyesinin rastgele öğelerini maxNumberOfRuns defaya kadar tıklar.
|
"eventType": "LIST_ITEM_CLICKED"
|
Android Studio'da Robo komut dosyası kaydedicisi tarafından liste öğelerini tıklamak için kullanılır. |
elementDescriptors
|
Android kullanıcı arayüzü hiyerarşisini kullanarak tıklanan kullanıcı arayüzü widget'ını tanımlar.
visionText ile birlikte kullanılamaz.
|
visionText
|
OCR'yi kullanarak tıklanan öğeyi tanımlar. elementDescriptors ile birlikte kullanılamaz.
|
matchIndex
|
Hedef öğe visionText kullanılarak tanımlandığında eşleşen hedef öğenin oluşumunun dizesini 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 'tür (ilk eşleşme seçilir).
|
maxNumberOfRuns
|
eventType SOFT_KEYBOARD_RANDOM_CLICK olduğunda, dokunmatik klavyenin rastgele bir öğesinin kaç kez tıklanacağını belirtir.
Varsayılan değer: 1 .
|
Aşağıda, "com.google.samples.apps.topeka:id/done"
kaynak kimliğine sahip bir düğmeyi tıklayan Robo komut dosyası işlemine bir örnek verilmiştir:
{
"eventType": "VIEW_CLICKED",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/done"
}
]
}
Aşağıda, OCR kullanılarak bir ekranda algılanan "Search"
kelimesinin ikinci oluşumunu 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ı içeren bir sanal klavye öğesini tıklayan bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "SOFT_KEYBOARD_CLICK",
"elementDescriptors": [
{
"contentDescription": "Emoji button"
}
]
}
Aşağıda, rastgele yumuşak klavye öğelerini beş defaya kadar tıklayan Robo komut dosyası işlemine bir örnek verilmiştir:
{
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK",
"maxNumberOfRuns": 5
}
Yazılım klavyesini devre dışı bırak
Aşağıdaki tabloda gerekli özellikler listelenmiştir:
Özellik | Açıklama |
"eventType": "DISABLE_KEYBOARD"
|
-- |
Aşağıda, dokunmatik 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 gerekli ö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
- Java normal ifadesi olarak komutun beklenen çıkışı. Çıkış eşleşmezse Robo komut dosyası işlemi başarısız olur. Varsayılan olarak boş bir dizedir. Bu, çıktını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 test her taramanın başında uygulama altındaki test için tüm izinleri verdiğinden, bu işlem herhangi bir işlemsizdir. Robo komut dosyalarınızda bu işlemi KULLANMAYIN.
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
Özellik | Açıklama |
"eventType": "PERMISSIONS_REQUEST"
|
-- |
Ekrandaki tüm öğeleri yoksayma
Bu işlem, Robo'nun herhangi bir ekrandaki Robo komut dosyasını tetikleyen tüm öğeleri yoksaymasına neden olur.
Aşağıdaki tabloda gerekli özellikler listelenmiştir:
Özellik | Açıklama |
"eventType": "ALL_ELEMENTS_IGNORED"
|
-- |
Aşağıda, Robo'nun ekrandaki tüm öğeleri yok saymasını sağlayan bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "ALL_ELEMENTS_IGNORED"
}
Öğeleri yoksayma
Bu işlem, Robo'nun belirtilen elementDescriptors
ile eşleşen bir öğeyi (veya öğeleri) yoksaymasına neden olur.
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
Özellik | Açıklama |
"eventType": "ELEMENT_IGNORED"
|
-- |
elementDescriptors
|
Android kullanıcı arayüzü hiyerarşisini kullanarak yoksayılan kullanıcı arayüzü widget'larını tanımlar. |
Aşağıdaki özellik isteğe bağlıdır:
ignoreChildren
:true
olarak ayarlanırsa Robo, göz ardı edilen kullanıcı arayüzü widget'larının tüm alt öğelerini de yoksayar. Bu değer varsayılan olarakfalse
şeklindedir.
Aşağıda, Robo'nun içerik açıklamaları "Avatar"
ile başlayan tüm öğeleri yoksaymasına neden olan Robo komut dosyası işlemine bir örnek 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"
|
kullanıcı, belirli bir 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 girilmesi gereken metin. |
Aşağıda, "com.google.samples.apps.topeka:id/first_name"
kaynak kimliğine sahip bir kullanıcı arayüzü widget'ına "John"
giren 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 gerekli ö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 birbirine
|
visionText
|
Uzun süre tıklanan öğeyi OCR kullanarak tanımlar. elementDescriptors ile birlikte kullanılamaz.
|
matchIndex
|
Hedef öğe visionText kullanılarak tanımlandığında eşleşen hedef öğenin oluşumunun dizesini 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, yukarıdan aşağıya belirlenir. Varsayılan değer 0 'tür (ilk eşleşme seçilir).
|
Aşağıdaki özellik isteğe bağlıdır:
delayTime
- Uzun bir tıklamada basılı tutma işleminin ne kadar süreceğini milisaniye cinsinden belirtir.
Aşağıda, "Avatar 8"
içerik açıklamasına sahip bir kullanıcı arayüzü widget'ını beş saniye boyunca tıklayan bir 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 gerekli özellikler listelenmiştir:
Özellik | Açıklama |
---|---|
"eventType": "ONE_POINT_GESTURE"
|
-- |
coordinates
|
Bir noktalı hareket 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, sürükle ve bırak işlemi gerçekleştirir. Varsayılan olarakfalse
değerini alır.
Aşağı kaydırma yapan bir Robo komut dosyası tek noktalı hareket işlemi örneği aşağıda verilmiştir:
{
"eventType": "ONE_POINT_GESTURE",
"coordinates": "(50%,25%)->(50%,75%)"
}
İki parmakla yapılan hareketleri gerçekleştirme
Aşağıdaki tabloda gerekli özellikler listelenmiştir:
Özellik | Açıklama |
---|---|
"eventType": "TWO_POINT_GESTURE"
|
-- |
coordinates
|
Yüzde veya piksel olarak "(x1, y1)->(x2,y2),(x3,y3)->(x4,y4)" şeklinde biçimlendirilmiş,iki noktalı hareket için dört koordinat. |
Aşağıda, yakınlaştırma 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'ının Giriş Yöntemi Düzenleyicisi'nde (IME) geçerli işlem düğmesine (ör. sonraki, bitti ve arama) basar.
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
Özellik | Açıklama |
---|---|
"eventType": "PRESSED_EDITOR_ACTION"
|
-- |
elementDescriptors
|
Android kullanıcı arayüzü hiyerarşisini kullanarak hedef kullanıcı arayüzü widget'ını tanımlar. |
Aşağıda, "com.google.samples.apps.topeka:id/first_name"
kaynak kimliğine sahip 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 basın
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
Özellik | Açıklama |
eventType
|
Robo komut dosyası işleminin türünü belirtir. |
"eventType": "PRESSED_BACK"
|
Cihaza bir KEYCODE_BACK etkinliği gönderir.
|
"eventType": "PRESSED_BACK_EMULATOR_28"
|
Android Studio'daki Robo komut dosyası kaydedici tarafından API 28'li emülatörlerde geri tuşuna basmak için kullanılır. |
Aşağıda, geri tuşuna basan bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "PRESSED_BACK"
}
Ana ekrana 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 ekrana basan bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "GO_HOME"
}
Bir öğeyi kaydırarak görüntüleme
Bu işlem, Robo testin, belirtilen childElementDescriptors
ile eşleşen kullanıcı arayüzü widget'ı ekranda görünene, kaydırılan widget'ın artık kaydırılamamasına veya en fazla 50 kaydırma sayısına ulaşılana kadar belirtilen elementDescriptors
ile eşleşen kullanıcı arayüzü widget'ını 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ırmak için kullanıcı arayüzü widget'ını tanımlar. |
Aşağıda, kullanıcı arayüzü widget'ını "my.app.package:id/scrollable_card_container"
kaynak kimliğiyle kaydıran Robo komut dosyası işlemine bir örnek verilmiştir. Bu işlem, ekranda "Orange"
metnini içeren kullanıcı arayüzü widget'ı görünene (veya daha fazla kaydırma yapılamayan ya da maksimum 50 kaydırma sınırına ulaşılana) kadar devam eder:
{
"eventType": "ELEMENT_SCROLL_INTO_VIEW",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/scrollable_card_container"
}
],
"childElementDescriptors": [
{
"text": "Orange"
}
]
}
Kaydırma
Aşağıdaki tabloda gerekli ö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ü alma
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
Özellik | Açıklama |
"eventType": "TAKE_SCREENSHOT"
|
-- |
screenshotName
|
Ekran görüntüsü dosyasının adını belirtir. |
Aşağıda, ekran görüntüsü alan Robo komut dosyası işlemine bir örnek 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 birbirini dışlar.
|
pointTapYCoordinate
|
Dokunulan noktanın piksel Y koordinatı. pointTapXPercent ve pointTapYPercent ile birbirini dışlar.
|
pointTapXPercent
|
Dokunulan noktanın yüzde X koordinatı. pointTapXCoordinate ve pointTapYCoordinate ile karşılıklı hariç.
|
pointTapYPercent
|
Dokunulan noktanın yüzdelik Y koordinatı. pointTapXCoordinate ve pointTapYCoordinate ile 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 öğedeki bir noktaya dokunma
Aşağıdaki tabloda gerekli özellikler listelenmiştir:
Özellik | Açıklama |
"eventType": "POINT_TAP_ELEMENT"
|
-- |
pointTapXPercent
|
Hedef öğedeki X koordinatı. |
pointTapYPercent
|
Hedef öğe içindeki Y koordinatı. |
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ırma çubuğunu sağa taşıyan Robo komut dosyası işlemine bir örnek 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, bir Robo testini durduran 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": "DELAYED_MESSAGE_POSTED"
|
-- |
delayTime
|
Beklemenin ne kadar süreceğini milisaniye cinsinden belirtir. |
Aşağıda, üç saniye bekleyen Robo komut dosyası işlemine bir örnek verilmiştir:
{
"eventType": "DELAYED_MESSAGE_POSTED",
"delayTime": 3000
}
Bir öğe bekleyin
Bu işlem, Robo testin belirtilen zaman aşımına kadar bir öğenin ekranda görünmesini beklemesini sağlar.
Aşağıdaki tabloda gerekli ö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"
}
]
}