Bu belgede, yapı, özellikler, kullanım, kayıt ve işlemler dahil olmak üzere Robo komut dosyaları hakkında referans bilgiler sağlanmaktadır. Robo komut dosyaları, mobil uygulamalar için manuel kalite güvencesi (QA) görevlerini otomatikleştiren ve sürekli entegrasyon (CI) ve lansman öncesi test stratejilerine imkan tanıyan testlerdir. Robo komut dosyası, bir kullanıcı arayüzü (UI) dizisini ve diğer işlemleri açıklayan bir JSON dosyasıdır.
Robo komut dosyasını aşağıdaki şekillerde oluşturabilirsiniz:
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ı, "uygulama altında test edilen Android uygulama paketi" (APK) gibi diğer girişlerin yanı sıra Robo test'e sağlanır.
Aşağıda, kullanıcıyı bir uygulamada oturum açan ve "under-test" çalıştırı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 varsayılan app_under_test_shown
tetikleme koşuluna sahipse yukarıdaki örnekte olduğu gibi, Robo komut dosyasını daha basit bir biçimde (tıpkı eylemlerinin ardından olduğu gibi) dosyada 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 dizimine benzerdir ve desteklenen iOS+ özellikleri Android'deki muadillerine benzer şekilde davranır.
Aşağıdaki işlemler iOS+'ta desteklenir:
- Onaylama
- Tıklama
- Uzun tıklama
- Kaydırma
- 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)
Bağlam tanımlayıcılarında aşağıdaki tetikleme koşulları iOS+'ta desteklenir:
- Test altındaki uygulama gösteriliyor
- Öğe mevcut
- Robo komut dosyası olmayan işlem 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ğerlerle isteğe bağlıdır:
Özellik | Açıklama |
id
|
Tarama çıkışlarında bu Robo komut dosyasının izlenmesine yardımcı olan bir tam sayı.
Robo'nun kendi id 'leri olan yerleşik Robo komut dosyaları vardır. Farklı Robo komut dosyalarındaki aynı id , bunların davranışını etkilemese de, tarama çıkışlarında işlemlerin bu Robo komut dosyalarından ayırt edilmesi zor olabilir. Çakışmaları önlemek için Robo komut dosyalarınıza 1000 veya daha yüksek bir id değeri atamanızı öneririz.
|
description
|
id özelliğine benzer ancak daha açıklayıcıdır.
|
crawlStage
|
Tarama Robo'nun aşaması, bu Robo komut dosyasını uygular. Varsayılan olarak ana tarama aşamasıdır. |
priority
|
Bu Robo komut dosyasının diğer Robo komut dosyalarına göre önceliği.
Varsayılan olarak tüm Robo komut dosyalarının önceliği 1 şeklindedir.
|
maxNumberOfRuns
|
Tarama sırasında Robo'nun 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şulu her zaman karşılanmış olarak kabul edilir; diğer bir deyişle Robo komut dosyası koşulsuzdur. |
actions
|
Bu Robo komut dosyasının tüm işlemleri. |
Tek bir dosyada, bir veya daha fazla Robo komut dosyası koleksiyonu bulunur.
Aşağıda, her biri taramanın başında bir kez yürütülen tek bir eyleme sahip iki koşulsuz Robo komut dosyası içeren bir dosya örneği verilmiştir:
[
{
"id": 1000,
"description": "My first Robo script",
"actions": [
{
"eventType": "DISABLE_KEYBOARD"
}
]
},
{
"id": 1001,
"description": "My second Robo script",
"actions": [
{
"eventType": "PRESSED_BACK"
}
]
}
]
Bağlam açıklayıcı
Bağlam açıklayıcısı, birkaç özellikten birini veya bunların bir 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"
|
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"
|
Ekranda elementDescriptors ile eşleşen bir kullanıcı arayüzü widget'ının bulunduğunu ve kontrol edilip edilmediğini kontrol eder.
|
"condition": "app_under_test_shown"
|
Altta uygulama testinin ö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. Bu, hiçbir uygulamanın ön planda çalışmadığı anlamına gelir. |
"condition": "non_roboscript_action_performed"
|
Robo testi 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 geçersiz kılınır. Örneğin, ekranda bir kullanıcı arayüzü widget'ı YOK veya test altındaki 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ısı.
element_present , element_disabled ve element_checked koşullarıyla birlikte kullanılır. visionText ile karşılıklı olarak hariç. Daha fazla bilgi için Öğe tanımlayıcıları bölümüne bakın.
|
visionText
|
Ekrandaki metinler, Optik Karakter Tanıma (OCR) API'si kullanılarak algılanır. visionText , element_present koşuluyla birlikte kullanılır. elementDescriptors ile karşılıklı olarak hariç.
|
nonRoboscriptActionCount
|
Daha önce gerçekleştirilen art arda Robo olmayan komut dosyası işlemlerinin sayısı. Her nonRoboscriptActionCount Robo işleminden sonra 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ü (ör. tıklama, metin düzenleme vb.) belirtir. Her işlem için gereklidir. |
elementDescriptors
|
Bir kullanıcı arayüzü widget'ını tanımlayan tanımlayı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çerdiği Robo komut dosyası hatası olmadan, bir ekranda hedef kullanıcı arayüzü widget'ını bulamadığında atlanır. Varsayılan olarak bu değer false şeklindedir.
|
replacementText
|
Hedef kullanıcı arayüzü widget'ına girilecek metin. Metin düzenleme işlemleri için gereklidir. |
swipeDirection
|
Kaydırmanın yönünü belirtir. Kaydırma işlemleri için gereklidir. |
delayTime
|
Ne kadar süre bekleneceğini (milisaniye cinsinden) belirtir. Bekleme işlemleri için gereklidir. |
pointTapXCoordinate ve pointTapYCoordinate
|
Dokunulan noktanın X ve Y pikseli koordinatları. pointTapXPercent ve pointTapYPercent ile karşılıklı olarak hariç.
Üzerine dokunma işlemleri için gereklidir.
|
pointTapXPercent ve pointTapYPercent
|
Dokunulan noktanın X ve Y koordinatlarının yüzdesi. pointTapXCoordinate ve pointTapYCoordinate ile karşılıklı olarak özelleştirilebilir. Üzerine dokunma işlemleri için gereklidir.
|
Aşağıda, hedef kullanıcı arayüzü widget'ları bulunmayan 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ı
Bir öğe tanımlayıcı, aşağıdaki tanımlayıcı özelliklerden birini veya daha fazlasını kullanarak bir kullanıcı arayüzü widget'ını tanımlar:
Özellik | Açıklama |
className
|
– |
ancestorClassName
|
Öğenin kullanıcı arayüzü hiyerarşisi üst öğesinin sınıf 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ımlanmamış olur. Örneğin, bir düğmede metin ve içerik açıklaması bulunmayabilir. Bazı özellik değerleri mevcut olsa bile belirli bir uygulama ekranında benzersiz olmayabilirler (resourceId
dahil).
Örneğin, bir listedeki öğeler arasında ayrım yapmak genellikle yalnızca
üst widget'ta bu öğelerin 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 yeterli olmadığı anlamına gelir. Bu nedenle, bir işlemin elementDescriptors
özelliği, ilki hedef kullanıcı arayüzü widget'ına, ikincisi hedef kullanıcı arayüzü widget'ının üst widget'ına karşılık gelecek ve bu şekilde devam edecek şekilde sıralanmış bir öğe tanımlayıcılar dizisi 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. Bunların 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, Robo komut dosyasındaki işlemler 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 yürütme seçenekleri uygulanır:strict
:true
değerine ayarlanırsa Robo komut dosyası kısmi eşleme, geçerli işlemi atlama ve askıya alma özelliklerini kullanmaz. Yani Robo komut dosyası normal bir araç testi olarak yürütülür ve işlemlerinden herhangi biri gerçekleştirilemediği anda başarısız olur. Varsayılan olarak bu değerfalse
'tır.dismiss_popups
-true
değerine ayarlanırsa Robo test,strict
modunda bile Robo komut dosyasını gerçekleştirirken beklenmedik iletişim kutularını kapatır.strict
modunda değilken bu seçeneğin hiçbir etkisi yoktur. Varsayılan olarakfalse
şeklindedir.notify
-false
değerine ayarlanırsa Robo komut dosyası yürütme işleminin başında ve sonunda ekran bildirimlerini göstermez. Varsayılan olarak bu,true
şeklindedir.
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 taramanın durdurulduğu, ekran bildirimleri olmadan çalışan 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 komut dosyasında bulunan ve Robo test tarafından çalıştırılmak üzere yüklenen gerçek değerle değiştirilen bir yer tutucudur. Şablon parametrelerine ön ek olarak çift alt çizgi, ardından yüzde işareti eklenir ve bu parametrelerin sonuna yüzde işareti ve ardından çift alt çizgi eklenir.
Robo komut dosyaları aşağıdaki şablon parametresini destekler:
__%APP_PACKAGE_NAME%__
- test altında uygulamanın paket adı.
Aşağıda, uygulama altında test sürecini durduran bir Robo komut dosyası örneği verilmiştir:
[
{
"eventType": "ADB_SHELL_COMMAND",
"command": "am force-stop __%APP_PACKAGE_NAME%__"
}
]
Yorum sayısı
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, Robo komut dosyasının tüm işlemleri tamamlanana (veya en azından yapılmaya çalışılana) kadar Robo komut dosyası etkin kalır. Robo test, gerçekleştirilecek bir işlem seçerken Robo komut dosyası işlemini eşleştirmeye çalışıyor. Robo komut dosyası, dayanıklılığı 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ştirilemiyorsa eşleşme ölçütleri gevşetilir ve eşleştirme yeniden denenir. Kısmi eşleme, Robo komut dosyası işleminin hedef kullanıcı arayüzü widget'ıyla eşleşirken en dıştaki öğe tanımlayıcısını dikkate almaz.
Kısmi eşleme başarılı olursa ilgili Robo komut dosyası işlemi her zamanki gibi 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. |
Geçerli 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 test mevcut Robo komut dosyası işlemini atlar (ve hiçbir zaman geri dönmez) ve sonrakini gerçekleştirir.
Bu teknik, uygulama davranışının sürümler arasında değişiklik gösterdiği veya kesintili olduğu senaryoları destekler. Örneğin, kayıt sırasında Robo komut dosyası yeniden oynatılırken ve farklı ekranlarda aralıklı bir iletişim gösterilebilir. |
Askıya al | Mevcut veya sonraki Robo komut dosyası işlemlerinin hiçbiri tamamen veya kısmen eşleştirilemiyorsa Robo komut dosyası geçici olarak askıya alınır ve Robo test, 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ı, istenen sayıda işlem için askıya alınmış olarak kalır. Bu nedenle, Robo komut dosyalarının Robo testi için başlangıç noktası olması gerekmez. Ayrıca Robo komut dosyası işlemlerini standart Robo test işlemleriyle birlikte kullanabilirsiniz. Bu teknik, uygulama davranışında kesinti yaşanan veya uygulama sürümleri arasındaki değişikliklerin Robo test'in standart işlemleriyle "boşlukları doldurması"na yetecek 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ği var.- En yüksek
priority
değerine sahiptir (varsayılan olarak tüm Robo komut dosyaları aynı yürütme işleminepriority
/1
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
}
]
}
]
Ap-under-test ön planda olduğunda Robo sırayla şu komutu tetikler:
"Robo script 2"
en yüksek önceliğe sahip olduğu için."Robo script 1"
çünkü aynı önceliğe sahip diğer geçerli Robo komut dosyaları arasında daha önce yer alır."Robo script 3"
, geçerli son Robo komut dosyası olarak değiştirildi.
Tekrarlanan çalıştırmalar
Robo varsayılan olarak tarama sırasında bir Robo komut dosyasını en fazla bir kez tetikler. Bu, maxNumberOfRuns
özelliği aracılığıyla ayarlanabilir.
Aşağıda, uygulama altında test uygulamasını 10 kereye kadar arka plana taşıyan 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ılıp test altındaki uygulamayı taramaya başlamadan önce. |
post_crawl
|
Robo, test altında uygulamayı taramayı bitirdikten sonra. |
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 olası tüm işlemler incelenirken. Robo varsayılan olarak geri basar. Bu, bazı senaryolarda istenmeyen bir durumdur. |
Bir Robo komut dosyasının crawlStage
özelliği belirtilmemişse crawl
olduğu ima edilir.
Aşağıda, Robo tarafından taramaya başlamadan önce test altındaki uygulama kullanıcı verilerini temizleyen bir Robo komut dosyası örneği verilmiştir:
{
"id": 1000,
"crawlStage": "pre_crawl",
"actions": [
{
"eventType": "ADB_SHELL_COMMAND",
"command": "pm clear __%APP_PACKAGE_NAME%__"
}
]
}
Aşağıda, Robo'ya bir onay iletişim kutusundan geri dönmeye (geri 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 eylemler
Robo komut dosyası koşullu işlemler içerebilir. Koşullu eylemler, Robo'nun bu işlemleri nasıl gerçekleştireceğini açıklayan üç ek özelliğe sahiptir:
Özellik | Açıklama |
priority
|
Bu koşullu işlemin, Robo komut dosyası içeren içindeki diğer koşullu işlemlere kıyasla önceliği. Varsayılan olarak, tüm koşullu işlemlerin önceliği 1 şeklindedir.
|
maxNumberOfRuns
|
Bu koşullu işlemin, kapsayıcı Robo komut dosyasının bir yürütülmesi sırasında kaç kez gerçekleştirilebileceğ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ıncontextDescriptor'ıyla aynı yapıya sahiptir ve benzer özellikler sunar. |
Bir Robo komut dosyası tetiklendiğinde, koşullu olmayan işlemlerini göründükleri sırayla teker teker gerçekleştirir. Robo komut dosyası koşullu işlemler içeriyorsa gerçekleştirilecek koşulsuz işlem seçilmeden önce her seferinde bunlar dikkate alınır. Herhangi bir koşullu işlem, önceliğine ve kalan çalıştırma sayısına göre tetiklenip 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 dosyalarının geçerli olabilmesi için en az bir tane koşulsuz işlem içermesi gerekir.
Aşağıda, Robo komut dosyası yürütülürken herhangi bir noktada ortaya çıkan pop-up iletişim kutularını kapatan koşullu eyleme sahip 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
}
}
İşlemler yoksayılıyor
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 yapılan "işlemlerin" yoksayıldığı anlamına gelir.
Yoksayma işlemleri içeren bir Robo komut dosyasının contextDescriptor
özelliği belirli bir ekranla eşleştiğinde, Robo yok sayma eylemleriyle hedeflenen kullanıcı arayüzü widget'larıyla etkileşimde bulunmaz (başka bir Robo komut dosyası işlemi, yoksayılan kullanıcı arayüzü widget'larından biri üzerinde işlem yapmasına neden olmadığı sürece).
Robo komut dosyaları; yoksayma, koşullu ve koşulsuz eylemlerin bir karışımını içerebilir. Diğer Robo komut dosyası işlemlerinden farklı olarak, priority
ve maxNumberOfRuns
özelliklerinin değerlerinden bağımsız olarak, Robo komut dosyasının contextDescriptor
öğesini içeren işlemler Robo taraması sırasında bir ekranla eşleştiği sürece işlemler yok sayılı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ğine sahip bir kullanıcı arayüzü widget'ı içeren bir ekranda kaynak kimlikleri ".*:id/done"
Java normal ifadesiyle eşleşen kullanıcı arayüzü widget'larını yoksaymasını sağlar
"my.app.package:id/main_screen"
:
[
{
"id": 1000,
"contextDescriptor": {
"condition": "element_present",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/ignored_screen"
}
]
},
"actions": [
{
"eventType": "ALL_ELEMENTS_IGNORED"
}
]
},
{
"id": 1001,
"contextDescriptor": {
"condition": "element_present",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/main_screen"
}
]
},
"actions": [
{
"eventType": "ELEMENT_IGNORED",
"elementDescriptors": [
{
"resourceIdRegex": ".*:id/done"
}
]
}
]
}
]
RecyclerView ve AdapterView desteği
RecyclerView ve AdapterView widget'larının alt öğeleri dinamik olarak yüklenir ve geçerli ekrandan uzakta hızlıca kaydırmayla görüntülenebilir. 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, çocuğu ekrana getirmek ve daha sonra ekranın konumunu kullanmak için gereken kaydırma sayısı ile 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 alanlarındaki işlemler aşağıdaki adımlarla gerçekleştirilir:
Robo testi, karşılık gelen alt öğenin RecyclerView veya AdapterView içeren öğelerindeki bir konumlandırma işlemiyle ekranda görüntülenmesini sağlar.
Robo test, kaydedilen işlemi zaten ekranda gösterildiği için doğrudan alt öğe üzerinde gerçekleştirir.
Aşağıda, AdapterView (android.widget.GridView
) alt öğesindeki bir 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, RecyclerView (android.support.v7.widget.RecyclerView
) alt öğelerindeki tıklama işlemine bir örnek 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ı kaydetme ve Test Lab'de çalıştırma
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'e yükleyebilir ve testi uygun şekilde çalıştırabilirsiniz.
Komut dosyası ekli bir Robo testi çalıştırdığınızda Robo ilk olarak önceden belirlediğiniz işlemleri test eder ve ardından uygulamayı her zamanki gibi keşfeder.
Android Studio'da Robo komut dosyası JSON dosyası oluşturmak için Android Studio'da Test Lab'i kullanarak Robo komut dosyası kaydetme bölümündeki adımları uygulayın.
Robo komut dosyası işlemleri
Aşağıdaki yaygın isteğe bağlı özellik tüm işlemler için geçerlidir:
description
- bu Robo komut dosyası işleminin Robo test çıkışlarında yürütülmesinin izlenmesine yardımcı olur.
Onaylama
Bildirilen koşul doğruysa Robo komut dosyası başka bir onay olabilecek bir sonraki işleme devam eder. Aksi takdirde, Robo komut dosyası yürütme işlemi başarısız bir onay nedeniyle durdurulur.
Aşağıdaki tabloda gerekli ö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 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 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 gerekli özellikler listelenmiştir:
Özellik | Açıklama |
---|---|
eventType
|
Robo komut dosyası işleminin türünü belirtir. |
"eventType": "VIEW_CLICKED"
|
Uygulama altında test edilen uygulamanın hedef öğesini tıklar. |
"eventType": "SOFT_KEYBOARD_CLICK"
|
Yazılım klavyesinin 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 karşılıklı olarak hariç.
|
visionText
|
OCR kullanarak tıklanan öğeyi tanımlar. elementDescriptors ile karşılıklı olarak hariç.
|
maxNumberOfRuns
|
eventType değeri SOFT_KEYBOARD_RANDOM_CLICK olduğunda, sanal klavyenin rastgele bir öğesinin kaç kez tıklanacağını belirtir.
Varsayılan değer 1 değeridir.
|
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 kullanan bir ekranda "Privacy Policy"
üzerini tıklayan Robo komut dosyası işlemine bir örnek verilmiştir:
{
"eventType": "VIEW_CLICKED",
"visionText": "Privacy Policy"
}
Aşağıda, "Emoji button"
içerik açıklamasına sahip yumuşak 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 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, yazılım klavyesini 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. Bu, varsayılan olarak boş bir dizedir. Yani çıkış kontrol edilmez.
Aşağıda, test altındaki uygulama 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 ver
Bu işlem, Espresso Test Kaydedici ile geriye dönük uyumluluk için Android Studio'da Robo komut dosyası kaydedicisi 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 gerekli özellikler listelenmiştir:
Özellik | Açıklama |
"eventType": "PERMISSIONS_REQUEST"
|
-- |
Ekrandaki tüm öğeleri yoksay
Bu işlem, Robo'nun içeren Robo komut dosyasını tetikleyen herhangi bir ekranda tüm öğeleri yoksaymasını sağlar.
Aşağıdaki tabloda gerekli özellikler listelenmiştir:
Özellik | Açıklama |
"eventType": "ALL_ELEMENTS_IGNORED"
|
-- |
Aşağıda, Robo'nun bir ekrandaki tüm öğeleri yoksaymasını sağlayan Robo komut dosyası işlemine bir örnek verilmiştir:
{
"eventType": "ALL_ELEMENTS_IGNORED"
}
Bir öğeyi yoksay
Bu işlem, Robo'nun belirtilen elementDescriptors
ile eşleşen bir öğeyi (veya öğeleri) yoksaymasını sağlar.
Aşağıdaki tabloda gerekli ö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
değerine ayarlanırsa Robo, yoksayılan 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 gerekli ö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"
|
belirtilen 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, "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 karşılıklı olarak hariç.
|
visionText
|
OCR kullanarak uzun tıklanan öğeyi tanımlar. elementDescriptors ile karşılıklı olarak hariç.
|
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 kullanıcı arayüzü widget'ında beş saniye uzunluğunda tıklama gerçekleştiren Robo komut dosyası işlemine bir örnek verilmiştir:
{
"eventType": "VIEW_LONG_CLICKED",
"elementDescriptors": [
{
"contentDescription": "Avatar 8"
}
],
"delayTime": 5000
}
Tek noktalı hareketi gerçekleştirme
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
değerine ayarlanırsa tek noktalı hareket, sürükleme ve bırakma işlemi gerçekleştirir. Bu değer varsayılan olarakfalse
şeklindedir.
Aşağıda, aşağı kaydırma işlemi gerçekleştiren Robo komut dosyası tek noktalı hareket işlemi örneği verilmiştir:
{
"eventType": "ONE_POINT_GESTURE",
"coordinates": "(50%,25%)->(50%,75%)"
}
İki noktalı hareket yap
Aşağıdaki tabloda gerekli özellikler listelenmiştir:
Özellik | Açıklama |
---|---|
"eventType": "TWO_POINT_GESTURE"
|
-- |
coordinates
|
İki noktalı hareket için, yüzde veya piksel olarak "(x1,y1)->(x2,y2),(x3,y3)->(x4,y4)" şeklinde biçimlendirilmiş dört koordinat. |
Aşağıda, sıkıştırma hareketi yapan Robo komut dosyası işlemine bir örnek 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) geçerli işlem düğmesine (ör. sonraki, bitti ve arama) basar.
Aşağıdaki tabloda gerekli ö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 kullanıcı arayüzü widget'ında IME işlemi gerçekleştiren Robo komut dosyası işlemine bir örnek verilmiştir:
{
"eventType": "PRESSED_EDITOR_ACTION",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/first_name"
}
]
}
Geri'ye bas
Aşağıdaki tabloda gerekli ö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 emülatörler API'si 28'e geri basmak için kullanılır. |
Aşağıda, geri basan Robo komut dosyası işlemine bir örnek verilmiştir:
{
"eventType": "PRESSED_BACK"
}
Ana sayfaya basın
Bu işlem, cihaza bir KEYCODE_HOME
etkinliği gönderir.
Aşağıdaki tabloda gerekli özellikler listelenmiştir:
Özellik | Açıklama |
"eventType": "GO_HOME"
|
-- |
Aşağıda, ana sayfa düğmesine basan Robo komut dosyası işlemine bir örnek verilmiştir:
{
"eventType": "GO_HOME"
}
Bir öğeyi görünüme kaydırma
Bu işlem, Robo testin belirtilen elementDescriptors
ile eşleşen kullanıcı arayüzü widget'ı ekranda görünene, kaydırılan widget'ın kaydırılamayacağına veya maksimum 50 kaydırma sınırına ulaşılana kadar, belirtilen elementDescriptors
ile eşleşen kullanıcı arayüzü widget'ını ileri kaydırmasını sağlar.childElementDescriptors
Aşağıdaki tabloda gerekli ö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 ve 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 sayısına ulaşılıncaya) kadar kaydıran bir Robo komut dosyası işlemine bir örnek 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 gerekli özellikler listelenmiştir:
Özellik | Açıklama |
---|---|
"eventType": "VIEW_SWIPED"
|
-- |
swipeDirection
|
Kaydırma işleminin 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 Robo komut dosyası işlemine bir örnek verilmiştir:
{
"eventType": "VIEW_SWIPED",
"swipeDirection": "Up",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/custom_content"
}
]
}
Ekran görüntüsü al
Aşağıdaki tabloda gerekli özellikler 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 gerekli özellikler listelenmiştir:
Özellik | Açıklama |
---|---|
"eventType": "POINT_TAP"
|
-- |
pointTapXCoordinate
|
Dokunulan noktanın piksel X koordinatı. pointTapXPercent ve pointTapYPercent ile karşılıklı hariç.
|
pointTapYCoordinate
|
Dokunulan noktanın piksel Y koordinatı. pointTapXPercent ve pointTapYPercent ile karşılıklı hariç.
|
pointTapXPercent
|
Dokunulan noktanın yüzde X koordinatı. pointTapXCoordinate ve pointTapYCoordinate ile karşılıklı hariç.
|
pointTapYPercent
|
Dokunulan noktanın Y koordinatı. pointTapXCoordinate ve pointTapYCoordinate ile karşılıklı hariç.
|
Aşağıda, bir ekranın ortasına dokunan Robo komut dosyası işlemi örneği verilmiştir:
{
"eventType": "POINT_TAP",
"pointTapXPercent": 50,
"pointTapYPercent": 50
}
Bir öğenin içindeki bir noktaya dokunun
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 gerekli özellikler listelenmiştir:
Özellik | Açıklama |
---|---|
"eventType": "TERMINATE_CRAWL"
|
-- |
Aşağıda, Robo testini durduran Robo komut dosyası işlemine bir örnek verilmiştir:
{
"eventType": "TERMINATE_CRAWL"
}
Bekle
Aşağıdaki tabloda gerekli özellikler listelenmiştir:
Özellik | Açıklama |
"eventType": "DELAYED_MESSAGE_POSTED"
|
-- |
delayTime
|
Ne kadar süre bekleneceğ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 test'in bir öğenin ekranda görünmesi için belirtilen zaman aşımı süresine kadar 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, kaynak kimliği "my.app.package:id/confirmation_button"
olan bir kullanıcı arayüzü widget'ının ekranda görünmesi için 30 saniye bekleyen Robo komut dosyası işlemine bir örnek verilmiştir:
{
"eventType": "WAIT_FOR_ELEMENT",
"delayTime": 30000,
"elementDescriptors": [
{
"resourceId": "my.app.package:id/confirmation_button"
}
]
}