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ı kaydı ö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 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 bir kullanıcının 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 regex)
iOS ve sonraki sürümlerde aşağıdaki bağlam tanımlayıcılarında tetikleyici koşullar desteklenir:
- Test edilen uygulama gösterilir.
- Öğe mevcut
- Robo dışı komut dosyası işlemi gerçekleştirildi
Yapı
Robo komut dosyalarında, Robo'nun komut dosyasını nasıl yürüttüğünü açıklayan çeşitli özellikler bulunur. 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 'tür.
|
maxNumberOfRuns
|
Bir tarama sırasında Robo'nun bu Robo komut dosyasını kaç kez yürütebileceğini belirtir. Robo, varsayılan olarak bir Robo komut dosyasını bir kez 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 veya visionText tarafından belirtilen metinle eşleşen bir kullanıcı arayüzü widget'ının olup olmadığını kontrol eder.
|
"condition": "element_disabled"
|
elementDescriptors ile eşleşen bir kullanıcı arayüzü widget'ının ekranda olup olmadığını ve bu widget ile etkileşim kurulamadığı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 bulunup bulunmadığını veya test edilen uygulamanın ön planda çalışıp çalışmadığını 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ıyor. elementDescriptors ile birlikte kullanılamaz.
|
nonRoboscriptActionCount
|
Önceden gerçekleştirilen ardışık Robo komut dosyası dışı işlem 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 değerini alır.
|
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 algılanan "Privacy Policy"
tarafından tetiklenen bir Robo komut dosyası örneği verilmiştir:
{
"id": 1000,
"description": "Vision text Robo script",
"contextDescriptor": {
"condition": "element_present",
"visionText": "Privacy Policy"
},
"actions": [
{
"eventType": "VIEW_CLICKED",
"visionText": "Privacy Policy"
}
]
}
Aşağıda, komut dosyası olmayan her Robo 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
Bir Robo komut dosyasında 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ü 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 gerçekleştirilemediğinde 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. Bekle işlemler 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üzdelik 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'ı içermeyen 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": "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ı. Ata, öğenin kendisi de dahil olmak üzere öğenin kullanıcı arayüzü hiyerarşisindeki üst öğelerden 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 kullanıcı arayüzü widget'ının 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şisi ile 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 temsili 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
değerini alır.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. Varsayılan olarakfalse
değerini alır.
Aşağıda, ekranda bildirim gösterilmeden strict
modunda çalıştırılan 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": "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ütmek için 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 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ını dikkate almaz.
Kısmi eşleşme 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 senaryoları destekler. Örneğin, uygulama sürümleri arasında veya ekran öğeleri yeniden düzenlendiğinde. |
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ı tetiklenebilirse aşağıdaki sırayla Robo komut dosyası seçilerek öncelik 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 dosyası listesinde en erken görünen komut dosyasıdır.
Aşağıda, aynı işlemi gerçekleştiren ve aynı koşul tarafından (test edilen uygulamanın ön planda olması) tetiklenen üç Robo komut dosyasının bulunduğu 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"
olarak ayarlanır.
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 geçerlidir:
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 edilen uygulamayı taradığı ana tarama aşaması. |
close_screen
|
Robo belirli bir ekrandan geri dönmeye (geri izleme) çalıştığında bu ekrandaki tüm olası 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, bir onay iletişim kutusundan geri dönmeye (geri izleme) çalıştığında Robo'ya "Cancel"
düğmesini tıklamasını bildiren 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ütme işlemi sırasında kaç kez yapılabileceği. Varsayılan olarak tüm koşullu işlemler, bunları içeren Robo komut dosyasının tek bir yürütmesinde 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. Bir 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 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 kullanıcı arayüzü widget'larını veya belirli bir ekrandaki tüm kullanıcı arayüzü widget'larını yoksaymasına yönelik talimatlar içerebilir. Bu talimatlar, "işlemleri" eventType
ELEMENT_IGNORED
ve ALL_ELEMENTS_IGNORED
ile 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 boyutu ve bu çocuğa ulaşmak için gereken kaydırma sayısı farklı cihaz form faktörlerinde farklı olduğundan, çocuğun mutlak olan veri konumuna güvenmek çok daha sağlam bir yaklaşımdı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ı, Robo komut dosyası işlemlerinin hedefi olan AdapterView alt öğelerinin mutlak veri konumlarını da adapterViewChildPosition
olarak yakalar.
RecyclerView ve AdapterView alt öğelerindeki işlemler aşağıdaki adımlarda gerçekleştirilir:
Robo test, ilgili alt öğenin, içeren RecyclerView veya AdapterView'da bir konumlandırma işlemiyle ekranda gösterilmesini sağlar.
Robo test, kaydedilen işlemi zaten ekranda gösterildiği için doğrudan alt öğede 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 bir Robo komut dosyası kaydedip Test Lab
Android Studio'da Robo komut dosyası oluşturabilirsiniz. Bu komut dosyası JSON dosyası olarak kaydedilir. Ardından, JSON dosyasını uygulamayla birlikte Firebase Test Lab'e yükleyebilir ve testi uygun şekilde çalıştırabilirsiniz.
Komut dosyası ekli bir Robo testi çalıştırdığınızda, Robo testi ö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, başarısız bir onay nedeniyle Robo komut dosyası yürütme işlemi durdurulur.
Aşağıdaki tabloda zorunlu özellikler listelenmiştir:
Özellik | Açıklama |
"eventType": "ASSERTION"
|
-- |
contextDescriptor
|
İddia edilen 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ı beyanı ö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 bir ekranda "Settings"
'ün algılanıp algılanmadığını kontrol eden bir Robo komut dosyası beyanı ö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"
|
Dokunmatik klavyenin hedef öğesini tıklar. |
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK"
|
Yazılım klavyesinin rastgele öğelerini maxNumberOfRuns keze kadar tıklar.
|
"eventType": "LIST_ITEM_CLICKED"
|
Android Studio'daki Robo komut dosyası kaydedici 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şlemi ö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 "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 bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK",
"maxNumberOfRuns": 5
}
Sanal klavyeyi devre dışı bırakma
Aşağıdaki tabloda zorunlu ö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 shell 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 Java normal ifadesi olarak beklenen çıkışı. Sonuç 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 test edilen uygulamaya tüm izinleri verir. Bu nedenle, bu işlem hiçbir işlem yapmaz. 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 ekranda Robo komut dosyasını içeren öğeleri tetikleyen 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 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, yoksayılan kullanıcı arayüzü widget'larının tüm alt öğelerini de yoksayar. Varsayılan olarakfalse
değerini alır.
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"
|
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, "John"
değerini kaynak kimliği "com.google.samples.apps.topeka:id/first_name"
olan bir kullanıcı arayüzü widget'ına gönderen 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 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 doğru 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 tıklama süresini 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 zorunlu özellikler listelenmiştir:
Özellik | Açıklama |
---|---|
"eventType": "ONE_POINT_GESTURE"
|
-- |
coordinates
|
Yüzde veya piksel olarak "(x1, y1)->(x2,y2)" şeklinde biçimlendirilmiş,tek noktalı bir hareket için 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 zorunlu ö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'deki 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, ekranda belirtilen childElementDescriptors
ile eşleşen kullanıcı arayüzü widget'ı bulunana, 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şisi kullanılarak kaydırılacak kullanıcı arayüzü widget'ını tanımlar. |
Aşağıda, ekranda "Orange"
metnini içeren kullanıcı arayüzü widget'ı 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ırma
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ü 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 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 birbirini dışlar.
|
pointTapYCoordinate
|
Dokunulan noktanın piksel Y koordinatı. pointTapXPercent ve pointTapYPercent ile birbirini dışlar.
|
pointTapXPercent
|
Dokunulan noktanın yüzdelik X koordinatı. pointTapXCoordinate ve pointTapYCoordinate ile birbirini dışlar.
|
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 zorunlu özellikler listelenmiştir:
Özellik | Açıklama |
"eventType": "POINT_TAP_ELEMENT"
|
-- |
pointTapXPercent
|
Hedef öğe içindeki yüzde X koordinatı. |
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ırma çubuğunu 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ırma
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
|
Milisaniye cinsinden ne kadar bekleneceğini belirtir. |
Aşağıda, üç saniye bekleyen bir Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "DELAYED_MESSAGE_POSTED",
"delayTime": 3000
}
Öğeyi bekleme
Bu işlem, Robo testin belirtilen zaman aşımına 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"
}
]
}