Bu belge, yapı, yetenekler, kullanım, kayıt ve eylemler dahil olmak üzere Robo komut dosyaları hakkında referans bilgileri sağlar. Robo komut dosyaları, mobil uygulamalar için manuel kalite güvence (QA) görevlerini otomatikleştiren ve sürekli entegrasyon (CI) ve lansman öncesi test stratejilerini etkinleştiren testlerdir. Robo betiği, bir dizi kullanıcı arayüzü (UI) ve diğer eylemleri açıklayan bir JSON dosyasıdır.
Bir Robo betiğini aşağıdaki yollarla oluşturabilirsiniz:
Robo komut dosyası kaydetme özelliğini kullanın. (Yalnızca Android)
Robo komut dosyasını manuel olarak oluşturun. (Android ve iOS+)
Robo komut dosyasını kaydedin ve ardından manuel olarak düzenleyin. (Yalnızca Android)
Robo komut dosyalarını kullanma hakkında daha fazla bilgi edinmek için bkz. Robo komut dosyası çalıştırma .
giriiş
Robo komut dosyası, Robo testine, test edilen uygulama Android Uygulama Paketi (APK) gibi diğer girdilerin yanı sıra sağlanır.
Aşağıda, test edilen uygulama başlatıldığında tetiklenen, bir uygulamada kullanıcıyı imzalayan bir Robo komut dosyası örneği verilmiştir:
[
{
"crawlStage": "crawl",
"contextDescriptor": {
"condition": "app_under_test_shown"
},
"actions": [
{
"eventType": "VIEW_TEXT_CHANGED",
"replacementText": "user123",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/username"
}
]
},
{
"eventType": "VIEW_TEXT_CHANGED",
"replacementText": "12345",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/password"
}
]
},
{
"eventType": "VIEW_CLICKED",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/login"
}
]
}
]
}
]
Bir dosyada tek bir Robo komut dosyası varsa ve yukarıdaki örnekte olduğu gibi varsayılan app_under_test_shown
tetikleme koşuluna sahipse, o zaman bir dosyadaki Robo komut dosyasını, eylemlerinin bir sırası gibi daha basit bir format kullanarak 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özdizimi, Android sözdizimi ile aynıdır ve desteklenen iOS+ özellikleri, Android benzerlerine benzer şekilde davranır.
Aşağıdaki eylemler iOS+'ta desteklenir:
- İddia
- Tıklamak
- Uzun tıklama
- Tokatlamak
- Tüm öğeleri yoksay
- Beklemek
- 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ı
- Ata sınıf adı
- İçerik açıklaması (ve normal ifade)
- Metin (ve normal ifade)
Bağlam tanımlayıcılarındaki aşağıdaki tetikleyici koşullar iOS+'ta desteklenir:
- Test edilen uygulama gösteriliyor
- Eleman mevcut
- Robo olmayan komut dosyası eylemi gerçekleştirildi
Yapı
Bir Robo betiğinin, Robo'nun onu nasıl çalıştırdığını açıklayan çeşitli özellikleri vardır. Bu niteliklerin çoğu, önceden tanımlanmış varsayılan değerlerle isteğe bağlıdır:
Bağlanmak | Tanım |
id | Bu Robo betiğinin tarama çıktılarında izlenmesine yardımcı olan bir tam sayı. |
description | id benzer ancak daha açıklayıcıdır. |
crawlStage | Robo, bu Robo betiğini bir taramanın aşamasına uygular. Varsayılan olarak ana tarama aşamasıdır. |
priority | Bu Robo betiğinin diğer Robo betiklerine kıyasla önceliği. Varsayılan olarak tüm Robo komut dosyalarının önceliği 1 . |
maxNumberOfRuns | Bir tarama sırasında Robo'nun bu Robo komut dosyasını kaç kez çalıştırabileceğini belirtir. Robo, varsayılan olarak bir Robo komut dosyasını bir kez çalıştırabilir. |
contextDescriptor | Bu Robo betiğini tetikleyen bağlamı veya koşulu açıklar. Atlanırsa, bu Robo betiğinin tetikleme koşulunun her zaman karşılandığı kabul edilir; başka bir deyişle Robo betiği koşulsuzdur. |
actions | Bu Robo betiğinin tüm eylemleri. |
Tek bir dosya, bir veya daha fazla Robo komut dosyasının koleksiyonunu içerir.
Aşağıda, her biri taramanın başlangıcı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 tanımlayıcı
Bağlam tanımlayıcı, bir Robo betiğini bir veya birkaç özelliğin birleşimini kullanarak tetikleyen bağlamı veya koşulu tanımlar:
Bağlanmak | Tanım |
---|---|
"condition": "element_present" | elementDescriptors veya visionText tarafından belirtilen metinle eşleşen bir kullanıcı arayüzü widget'ının ekranda mevcut olup olmadığını kontrol eder. |
"condition": "element_disabled" | elementDescriptors ile eşleşen bir kullanıcı arayüzü widget'ının ekranda mevcut olup olmadığını ve onunla etkileşime geçilip erişilemediğini kontrol eder. |
"condition": "element_checked" | elementDescriptors ile eşleşen bir kullanıcı arayüzü widget'ının ekranda mevcut olup olmadığını ve kontrol edildiğini kontrol eder. |
"condition": "app_under_test_shown" | Test edilen uygulamanın ön planda çalışıp çalışmadığını kontrol eder. |
"condition": "default_launcher_shown" | Bir cihazın ana ekranının gösterilip gösterilmediğini kontrol eder; bu, ön planda hiçbir uygulamanın çalışmadığı anlamına gelir. |
"condition": "non_roboscript_action_performed" | Robo testi tarafından gerçekleştirilen son nonRoboscriptActionCount ardışık eylemlerin Robo komut dosyası eylemleri olmadığını kontrol eder. |
negateCondition | true olarak ayarlanırsa condition geçersiz kılar. Örneğin, ekranda bir kullanıcı arayüzü widget'ının OLMADIĞINI veya test edilen uygulamanın ön planda ÇALIŞMADIĞINI kontrol etmek için bu özelliği kullanabilirsiniz. |
elementDescriptors | Ekrandaki bir kullanıcı arayüzü widget'ını tanımlayan bir veya daha fazla öğe tanımlayıcı. element_present , element_disabled ve element_checked koşullarıyla birlikte kullanılır. visionText ile karşılıklı olarak özel. Daha fazla bilgi için bkz . Öğe tanımlayıcıları . |
visionText | Ekrandaki metin, Optik Karakter Tanıma (OCR) API'si kullanılarak algılanır. visionText element_present koşuluyla birlikte kullanılır. elementDescriptors ile karşılıklı olarak özeldir. |
nonRoboscriptActionCount | Daha önce gerçekleştirilen ardışık Robo komut dosyası olmayan eylemlerin sayısı. Her nonRoboscriptActionCount Robo eyleminden sonra bir Robo komut dosyasını tetiklemek için non_roboscript_action_performed koşuluyla birlikte kullanılır. Varsayılan olarak 1 . |
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 yer almaktadır:
{
"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 eyleminden 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
}]
}
Hareketler
Bir Robo komut dosyasındaki her eylem, aşağıdaki tabloda açıklanan bir veya daha fazla özellik-değer çiftinden oluşan bir paket olarak temsil edilir:
Bağlanmak | Tanım |
eventType | Eylemin türünü belirtir; örneğin tıklama, metin düzenleme vb. Her eylem için gereklidir. |
elementDescriptors | Bir kullanıcı arayüzü widget'ını tanımlayan tanımlayıcılar. Belirli bir düğmeye tıklamak gibi, hedef kullanıcı arayüzü widget'ına sahip tüm eylemler için gereklidir. |
optional | true olarak ayarlanırsa bu eylem gerçekleştirilemediğinde atlanır. Örneğin, hedef kullanıcı arayüzü widget'ını ekranda bulamadığında, içeren Robo komut dosyasında hata oluşmadan bu eylem atlanır. Varsayılan olarak değer false . |
replacementText | Hedef kullanıcı arayüzü widget'ına girilecek metin. Metin düzenleme işlemleri için gereklidir. |
swipeDirection | Kaydırma işleminin yönünü belirtir. Kaydırma eylemleri için gereklidir. |
delayTime | Ne kadar süre bekleneceğini milisaniye cinsinden belirtir. Bekleme eylemleri için gereklidir. |
pointTapXCoordinate ve pointTapYCoordinate | Dokunulan noktanın piksel X ve Y koordinatları. pointTapXPercent ve pointTapYPercent ile birbirini dışlayan. Noktaya dokunma eylemleri için gereklidir. |
pointTapXPercent ve pointTapYPercent | Dokunulan noktanın yüzde X ve Y koordinatları. pointTapXCoordinate ve pointTapYCoordinate ile birbirini dışlayan. Noktaya dokunma eylemleri için gereklidir. |
Aşağıda, hedef kullanıcı arayüzü widget'ları olmayan iki eylem içeren bir Robo komut dosyası örneği verilmiştir; bu, bu eylemlerin 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:
Bağlanmak | Tanım |
className | – |
ancestorClassName | Öğenin kullanıcı arayüzü hiyerarşisi öncülünün sınıf adı. Ata, öğ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ünen) | – |
textRegex | text eşleştirmek için Java normal ifadesi. |
groupViewChildPosition , recyclerViewChildPosition veya adapterViewChildPosition | Üst widget'ının türüne bağlı olarak bir UI widget'ının alt konumunu temsil eder. |
Çoğu zaman bu nitelikler tanımsızdır; örneğin bir düğmenin metni ve içerik açıklaması olmayabilir. Bazı öznitelik değerleri mevcut olsa bile, bunlar belirli bir uygulama ekranında ( resourceId
dahil) benzersiz olmayabilir.
Örneğin, bir listenin öğeleri arasında ayrım yapmak genellikle yalnızca bunların ana pencere öğesi içindeki farklı alt konumlarını kullanarak mümkündür. Bu, bir kullanıcı arayüzü widget'ını tanımlamak için yalnızca bir öğe tanımlayıcı kullanmanın genellikle yetersiz olduğu anlamına gelir. Bu nedenle, bir eylemin elementDescriptors
niteliği, ilki hedef kullanıcı arayüzü widget'ına, ikincisi hedef kullanıcı arayüzü widget'ının ana widget'ına karşılık gelecek şekilde sıralanmış bir dizi öğe tanımlayıcı içerir. Bir eylemin hedef kullanıcı arayüzü widget'ı, eylemin tüm öğe tanımlayıcıları karşılık gelen kullanıcı arayüzü widget'ı alt hiyerarşisiyle eşleştiğinde eşleşir.
Aşağıda, her ikisi de sağlanan öğe tanımlayıcılarını kullanarak hedef kullanıcı arayüzü widget'ını tanımlamanızı gerektiren, metin değiştirme ve tıklama eylemlerine sahip bir Robo komut dosyası örneği verilmiştir:
[
{
"eventType": "VIEW_TEXT_CHANGED",
"replacementText": "John",
"elementDescriptors": [
{
"className": "android.support.v7.widget.AppCompatEditText",
"groupViewChildPosition": 0,
"resourceId": "com.google.samples.apps.topeka:id/first_name"
},
{
"className": "android.widget.FrameLayout",
"groupViewChildPosition": 0
},
{
"className": "android.support.design.widget.TextInputLayout",
"groupViewChildPosition": 1
}
]
},
{
"eventType": "VIEW_CLICKED",
"elementDescriptors": [
{
"className": "android.support.design.widget.FloatingActionButton",
"groupViewChildPosition": 1,
"resourceId": "com.google.samples.apps.topeka:id/done"
},
{
"className": "android.widget.FrameLayout",
"groupViewChildPosition": 1,
"resourceId": "com.google.samples.apps.topeka:id/content"
},
{
"className": "android.widget.FrameLayout",
"groupViewChildPosition": 0,
"resourceId": "com.google.samples.apps.topeka:id/sign_in_content"
}
]
}
]
Yürütme seçenekleri
İsteğe bağlı olarak bir Robo betiğindeki eylemler listesinin önüne, söz konusu Robo betiğinin yürütme seçeneklerini belirten bir JSON nesnesi ekleyebilirsiniz. Bu yapılandırma başlığı, roboscript
anahtar sözcüğüyle 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
- bir Robo betiği çalışırken uygulanan yürütme seçenekleri:-
strict
-true
olarak ayarlanırsa, Robo betiği kısmi eşleştirmeyi, mevcut eylemi atlamayı ve askıya almayı uygulamaz. Yani, Robo betiği normal bir enstrümantasyon testi olarak yürütülür ve eylemlerinden herhangi biri gerçekleştirilemediğinde başarısız olur. -
notify
-false
olarak ayarlanırsa Robo betiği, yürütmenin başında ve sonunda ekrandaki bildirimleri göstermez. Varsayılan olaraktrue
.
-
-
postscript
- Robo betiği tamamlandıktan sonra uygulanan yürütme seçenekleri:-
terminate
-true
olarak ayarlanırsa, Robo testi, Robo betiği tamamlandıktan sonra taramayı durdurur.
-
Aşağıda, ekran bildirimleri olmadan strict
modda yürütülen, üç saniye boyunca uyuyan ve ardından taramanın durduğu bir Robo komut dosyasının örneği verilmiştir:
"roboscript": {
"executionMode": {
"strict": true,
"notify": false
},
"postscript": {
"terminate": true
}
}
[
{
"eventType": "DELAYED_MESSAGE_POSTED",
"delayTime": 3000
}
]
Şablon parametreleri
Bir şablon parametresi, bir Robo betiğindeki, Robo testi o Robo betiğini yürütmek için yüklediğinde gerçek değerle değiştirilen bir yer tutucudur. Şablon parametrelerinin önüne çift alt çizgi ve ardından yüzde işareti gelir ve son ek olarak yüzde işareti ve ardından çift alt çizgi gelir.
Robo komut dosyaları aşağıdaki şablon parametresini destekler:
-
__%APP_PACKAGE_NAME%__
- test edilen uygulamanın paket adı.
Aşağıda test edilen uygulama sürecini durduran bir Robo komut dosyası örneği verilmiştir:
[
{
"eventType": "ADB_SHELL_COMMAND",
"command": "am force-stop __%APP_PACKAGE_NAME%__"
}
]
Yorumlar
Bir Robo betiği, #
veya //
ile başlayan satırlar olan yorum satırlarını içerebilir.
Aşağıda birkaç yorum içeren bir Robo betiği örneği verilmiştir:
# Confirm a user account.
[
{
// Click the DONE button.
"eventType": "VIEW_CLICKED",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/done"
}
]
}
]
Yetenekler
Varsayılan olarak, bir Robo betiğinin tüm eylemleri tamamlanana (veya en azından denenene kadar) Robo betiği etkin kalır. Robo testi, gerçekleştirilecek bir eylemi seçerken bir Robo komut dosyası eylemiyle eşleşmeye çalışır. Robo komut dosyası, sağlamlığı artırmak için aşağıdaki teknikleri kullanır:
Teknik | Tanım |
Kısmi eşleştirme | Mevcut Robo komut dosyası eylemi tam olarak eşleştirilemiyorsa eşleştirme kriterleri gevşetilir ve eşleştirme yeniden denenir. Kısmi eşleştirme, bir Robo komut dosyası eyleminin hedef kullanıcı arayüzü widget'ını eşleştirirken en dıştaki öğe tanımlayıcısını dikkate almaz. Kısmi eşleştirme başarılı olursa ilgili Robo komut dosyası eylemi her zamanki gibi gerçekleştirilir. Bu teknik, ekran öğeleri yeniden düzenlendiğinde uygulama yapısının değiştiği senaryoları (örneğin uygulama sürümleri arasında) destekler. |
Mevcut eylemi atla | Mevcut Robo komut dosyası eylemi tamamen veya kısmen eşleştirilemiyorsa Robo, sonraki Robo komut dosyası eylemini eşleştirmeye çalışır. Sonraki eylem tamamen veya kısmen eşleşirse, Robo testi mevcut Robo komut dosyası eylemini atlar (ve hiçbir zaman geri dönmez) ve sonraki eylemi gerçekleştirir. Bu teknik, uygulama davranışının sürümler arasında değiştiği veya kesintili olduğu senaryoları destekler; örneğin, bir Robo komut dosyasının kaydedilmesi ve yeniden oynatılması sırasında farklı ekranlarda aralıklı bir iletişim kutusu görünebilir. |
Askıya almak | Mevcut veya sonraki Robo komut dosyası eylemleri tamamen veya kısmen eşleştirilemiyorsa, Robo komut dosyası geçici olarak askıya alınır ve Robo testi, diğer stratejilerini kullanarak gerçekleştirilecek bir eylemi seçer. Bu eylem tamamlandıktan sonra Robo testi, Robo komut dosyasını çalıştırmaya devam eder. Mevcut veya sonraki Robo komut dosyası eylemleri eşleştirilemediği sürece, Robo komut dosyası herhangi bir sayıda eylem için askıya alınmış durumda kalır. Bu nedenle, Robo komut dosyalarının bir Robo testi için mutlaka bir önsöz olması gerekmez ve Robo komut dosyası eylemlerini standart Robo test eylemleriyle serpiştirebilirsiniz. Bu teknik, uygulama davranışının değişken olduğu veya uygulama sürümleri arasındaki değişikliklerin, Robo testinin standart eylemleriyle "boşlukları doldurması"nı gerektirecek kadar büyük olduğu senaryoları destekler. |
Öncelikler
Bir Robo betiği maxNumberOfRuns
değerine ulaşırsa artık belirli bir taramada tetiklenemez. Geçerli bağlam tarafından birden fazla Robo komut dosyası tetiklenebiliyorsa, aşağıdaki sırayla Robo komut dosyası seçilerek öncelik verilir:
-
contextDescriptor
özelliğine sahiptir. - En yüksek
priority
sahiptir (varsayılan olarak tüm Robo komut dosyalarının yürütmepriority
1
). - Robo komut dosyalarının öncelikleri aynıysa, Robo komut dosyaları listesinin en başında görünür.
Aşağıda, aynı eylemi gerçekleştiren ve aynı koşulla tetiklenen üç Robo komut dosyası içeren bir dosya örneği verilmiştir (test edilen uygulama ön plandadır):
[
{
"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 planda olduğunda Robo sırasıyla aşağıdakileri tetikler:
-
"Robo script 2"
çünkü en yüksek önceliğe sahiptir. -
"Robo script 1"
çünkü aynı önceliğe sahip kalan uygulanabilir Robo komut dosyaları arasında daha önce görünür. - Geçerli son Robo betiği olarak
"Robo script 3"
.
Tekrarlanan koşular
Varsayılan olarak Robo, 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, test edilen uygulamayı 10 defaya kadar arka plana getiren 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ı | Tanım |
pre_crawl | Robo başlatılıp test edilen uygulamayı taramaya başlamadan önce. |
post_crawl | Robo, test edilen uygulamayı taramayı bitirdikten sonra. |
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ı eylemler araştırılır. Varsayılan olarak Robo, bazı senaryolarda istenmeyen bir durum olan geri basar. |
Bir Robo betiğinin crawlStage
niteliği belirtilmemişse crawl
olduğu ima edilir.
Aşağıda, Robo taramaya başlamadan önce test edilen 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 izleme) çalıştığında "Cancel"
e tıklaması talimatını veren 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
Bir Robo betiği koşullu eylemler içerebilir. Koşullu eylemlerin, Robo'nun bunları nasıl gerçekleştirdiğini açıklayan üç ek özelliği vardır:
Bağlanmak | Tanım |
priority | Bu koşullu eylemin, içerdiği Robo komut dosyasındaki diğer koşullu eylemlere kıyasla önceliği. Varsayılan olarak tüm koşullu eylemlerin önceliği 1 . |
maxNumberOfRuns | Bu koşullu eylemin, içerdiği Robo betiğinin bir yürütülmesi sırasında kaç kez gerçekleştirilebileceği. Varsayılan olarak, tüm koşullu eylemler, içerdikleri Robo komut dosyasının tek bir yürütülmesinde en fazla bir kez gerçekleştirilebilir. |
contextDescriptor | Bu koşullu eylemi tetikleyen bağlam/koşul. [Robo betiğinin bağlam Tanımlayıcısı](#context-descriptor) ile aynı yapıya sahiptir ve benzer yetenekler sunar. |
Tetiklendiğinde, bir Robo betiği koşulsuz eylemlerini görünüm sırasına göre birer birer gerçekleştirir. Bir Robo komut dosyası koşullu eylemler içeriyorsa, gerçekleştirilecek koşulsuz bir eylem seçilmeden önce her seferinde bunlar dikkate alınır. Önceliğine ve kalan çalıştırma sayısına göre herhangi bir koşullu eylem tetiklenir ve seçilirse, Robo betiği bu koşullu eylemi gerçekleştirir. Aksi halde, Robo betiği aşağıdaki koşulsuz eylemi gerçekleştirir. Geçerli olması için bir Robo komut dosyasının en az bir koşulsuz eylem içermesi gerekir.
Aşağıda, Robo betiğinin yürütülmesi sırasında herhangi bir noktada ortaya çıkmaları durumunda açılır diyalog kutularını kapatan, koşullu bir eylem içeren koşulsuz bir Robo betiğinin ö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
}
}
Eylemlerin göz ardı edilmesi
Bir Robo komut dosyası, Robo'nun belirli UI widget'larını veya belirli bir ekrandaki tüm UI widget'larını yok sayması için talimatlar içerebilir. Bu talimatlar, sırasıyla eventType
ELEMENT_IGNORED
ve ALL_ELEMENTS_IGNORED
ile "eylemlerin" yok sayılmasıyla temsil edilir.
Yoksayma eylemlerini içeren bir Robo komut dosyasının contextDescriptor
özelliği belirli bir ekranla eşleştiğinde, Robo, yok sayma eylemleri tarafından hedeflenen herhangi bir UI widget'ıyla etkileşime girmez (başka bir Robo komut dosyası eylemi, Robo'nun yoksayılan UI widget'larından birinde bir eylem gerçekleştirmesini sağlamadığı sürece).
Bir Robo komut dosyası, yok sayma, koşullu ve koşulsuz eylemlerin bir karışımını içerebilir. Diğer Robo komut dosyası eylemlerinden farklı olarak, priority
ve maxNumberOfRuns
niteliklerinin değerlerinden bağımsız olarak, içeren Robo komut dosyasının contextDescriptor
bir Robo taraması sırasında bir ekranla eşleştiği sürece yok sayma eylemleri uygulanır.
Aşağıda iki Robo betiği içeren bir dosya örneği verilmiştir. İlk Robo betiği, Robo'nun "my.app.package:id/ignored_screen"
kaynak kimliğine sahip bir kullanıcı arayüzü widget'ı içeren bir ekrandaki tüm UI widget'larını yok saymasını sağlar. İkinci Robo betiği, Robo'nun kaynak kimlikleri "my.app.package:id/main_screen"
".*:id/done"
" ile eşleşen UI widget'larını yok saymasını sağlar:
[
{
"id": 1000,
"contextDescriptor": {
"condition": "element_present",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/ignored_screen"
}
]
},
"actions": [
{
"eventType": "ALL_ELEMENTS_IGNORED"
}
]
},
{
"id": 1001,
"contextDescriptor": {
"condition": "element_present",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/main_screen"
}
]
},
"actions": [
{
"eventType": "ELEMENT_IGNORED",
"elementDescriptors": [
{
"resourceIdRegex": ".*:id/done"
}
]
}
]
}
]
RecyclerView ve AdapterView desteği
RecyclerView ve AdapterView widget'larının alt öğeleri dinamik olarak yüklenir ve geçerli ekrandan birçok kaydırma hareketi uzakta görüntülenebilir. Bir ekranın boyutu ve bu çocuğa ulaşmak için gereken kaydırma sayısı farklı cihaz form faktörleri için farklı olduğundan, çocuğun mutlak olan veri konumuna güvenmek çok daha sağlamdır. Bu çocuğu ekrana getirmek ve ardından ekran konumunu kullanmak için gereken kaydırma sayısına güvenmek daha az sağlam bir yaklaşımdır.
Bu nedenle Robo betiği, Robo betiği eylemlerinin hedefi olan RecyclerView alt öğelerinin mutlak veri konumlarını recyclerViewChildPosition
olarak yakalar. Robo betiği aynı zamanda Robo betiği eylemlerinin hedefi olan AdapterView alt öğelerinin mutlak veri konumlarını da adapterViewChildPosition
olarak yakalar.
RecyclerView ve AdapterView alt öğelerindeki eylemler aşağıdaki adımlarla gerçekleştirilir:
Robo testi, ilgili çocuğun, içerdiği RecyclerView veya AdapterView üzerinde bir konumlandırma eylemiyle ekranda görüntülenmesini sağlar.
Robo testi, kaydedilen eylemi ekranda zaten görüntülendiğinden doğrudan alt öğe üzerinde gerçekleştirir.
Aşağıda AdapterView ( android.widget.GridView
) alt öğesindeki tıklama eyleminin bir ö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 öğesindeki tıklama eyleminin bir ö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 betiği kaydedin ve bunu Test Lab'da çalıştırın
Android Studio'da, betiği bir JSON dosyası olarak kaydeden bir Robo betiği oluşturabilirsiniz. Daha sonra JSON dosyasını uygulamayla birlikte Firebase Test Lab'a yükleyebilir ve testi buna göre çalıştırabilirsiniz.
Bir komut dosyası eklenmiş bir Robo testi çalıştırdığınızda, Robo testi ilk olarak önceden komut dosyasıyla oluşturulan eylemleriniz üzerinden adım atar ve ardından uygulamayı her zamanki gibi keşfeder.
Android Studio'da bir Robo komut dosyası JSON dosyası oluşturmak için Android Studio'da Test Lab'ı kullanarak bir Robo komut dosyası kaydetme bölümündeki adımları izleyin.
Robo komut dosyası eylemleri
Aşağıdaki ortak isteğe bağlı özellik tüm eylemler için geçerlidir:
-
description
- Robo test çıktılarında bu Robo komut dosyası eyleminin yürütülmesinin izlenmesine yardımcı olur.
İddia
İddia edilen koşul doğruysa, Robo betiği başka bir iddia olabilecek bir sonraki eyleme geçer. Aksi takdirde Robo betiğinin yürütülmesi, başarısız bir onaylama nedeniyle durdurulur.
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
"eventType": "ASSERTION" | -- |
contextDescriptor | İddia edilen bağlamı veya koşulu açıklar. Robo betiğinin contextDescriptor'ı ile aynı yapıya sahiptir ve benzer yetenekler sunar. |
Aşağıda, test edilen uygulamanın ön planda olup olmadığını kontrol eden bir Robo komut dosyası onayı örneği verilmiştir:
{
"eventType": "ASSERTION",
"contextDescriptor": {
"condition": "app_under_test_shown"
}
}
Aşağıda "com.google.samples.apps.topeka:id/done"
kaynak kimliğine sahip bir kullanıcı arayüzü widget'ının ekranda mevcut olup olmadığını kontrol eden bir Robo komut dosyası onayı örneği verilmiştir:
{
"eventType": "ASSERTION",
"contextDescriptor": {
"condition": "element_present",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/done"
}
]
}
}
Aşağıda, OCR kullanılarak bir ekranda "Settings"
ALGILANMADIĞINI kontrol eden bir Robo komut dosyası onayı örneği verilmiştir:
{
"eventType": "ASSERTION",
"contextDescriptor": {
"condition": "element_present",
"negateCondition": true,
"visionText": "Settings"
}
}
Tıklamak
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
---|---|
eventType | Robo komut dosyası eyleminin türünü belirtir. |
"eventType": "VIEW_CLICKED" | Test edilen uygulamanın hedef öğesine tıklar. |
"eventType": "SOFT_KEYBOARD_CLICK" | Yazılım klavyesinin hedef öğesini tıklatır. |
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK" | Yazılım klavyesinin rastgele öğelerini maxNumberOfRuns katına kadar tıklatır. |
"eventType": "LIST_ITEM_CLICKED" | Liste öğelerini tıklamak için Android Studio'daki Robo komut dosyası kaydedici tarafından kullanılır. |
elementDescriptors | Tıklanan kullanıcı arayüzü widget'ını Android kullanıcı arayüzü hiyerarşisini kullanarak tanımlar. visionText ile karşılıklı olarak özel. |
visionText | OCR kullanarak tıklanan öğeyi tanımlar. elementDescriptors ile karşılıklı olarak özeldir. |
maxNumberOfRuns | eventType SOFT_KEYBOARD_RANDOM_CLICK olduğunda yazılım klavyesinin rastgele bir öğesine 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 bir Robo komut dosyası eylemi örneği verilmiştir:
{
"eventType": "VIEW_CLICKED",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/done"
}
]
}
Aşağıda, OCR kullanılarak bir ekranda tespit edilen "Privacy Policy"
na tıklayan bir Robo komut dosyası eyleminin örneği yer almaktadır:
{
"eventType": "VIEW_CLICKED",
"visionText": "Privacy Policy"
}
Aşağıda "Emoji button"
içerik açıklamasına sahip bir yumuşak klavye öğesini tıklatan bir Robo komut dosyası eyleminin örneği verilmiştir:
{
"eventType": "SOFT_KEYBOARD_CLICK",
"elementDescriptors": [
{
"contentDescription": "Emoji button"
}
]
}
Aşağıda, rastgele yazılım klavyesi öğelerini beş defaya kadar tıklatan bir Robo komut dosyası eyleminin örneği verilmiştir:
{
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK",
"maxNumberOfRuns": 5
}
Yazılım klavyesini devre dışı bırak
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
"eventType": "DISABLE_KEYBOARD" | -- |
Aşağıda yazılım klavyesini devre dışı bırakan bir Robo komut dosyası eylemi örneği verilmiştir:
{
"eventType": "DISABLE_KEYBOARD"
}
adb kabuk komutunu çalıştır
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
"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 çıktısı. Çıktı eşleşmezse Robo komut dosyası eylemi başarısız olur. Varsayılan olarak boş bir dizedir, yani çıktı kontrol edilmez.
Aşağıda, test edilen uygulama kullanıcı verilerini temizleyen bir Robo komut dosyası eylemi örneği verilmiştir:
{
"eventType": "ADB_SHELL_COMMAND",
"command": "pm clear __%APP_PACKAGE_NAME%__"
}
İzin verme
Bu eylem, Espresso Test Kaydedici ile geriye dönük uyumluluk için Android Studio'daki Robo komut dosyası kaydedici tarafından kaydedilir. Robo testi, her taramanın başlangıcında test edilen uygulamaya tüm izinleri verir ve dolayısıyla bu işlem işlem gerektirmez. Bu eylemi Robo komut dosyalarınızda KULLANMAYIN.
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
"eventType": "PERMISSIONS_REQUEST" | -- |
Ekrandaki tüm öğeleri göz ardı edin
Bu eylem, Robo'nun herhangi bir ekrandaki, içeren Robo komut dosyasını tetikleyen tüm öğeleri yok saymasını sağlar.
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
"eventType": "ALL_ELEMENTS_IGNORED" | -- |
Aşağıda, Robo'nun ekrandaki tüm öğeleri yok saymasını sağlayan bir Robo komut dosyası eylemi örneği verilmiştir:
{
"eventType": "ALL_ELEMENTS_IGNORED"
}
Bir öğeyi yoksay
Bu eylem, Robo'nun belirtilen elementDescriptors
ile eşleşen bir öğeyi (veya öğeleri) yok saymasını sağlar.
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
"eventType": "ELEMENT_IGNORED" | -- |
elementDescriptors | Android kullanıcı arayüzü hiyerarşisini kullanarak yok sayı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 aynı zamanda yok sayılan kullanıcı arayüzü widget'larının tüm alt öğelerini de yok sayar. Varsayılan olarakfalse
.
Aşağıda, Robo'nun içerik açıklamaları "Avatar"
ile başlayan tüm öğeleri yok saymasını sağlayan bir Robo komut dosyası eylemi örneği verilmiştir:
{
"eventType": "ELEMENT_IGNORED",
"elementDescriptors": [
{
"contentDescriptionRegex": "Avatar.*"
}
]
}
Giriş metni
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
---|---|
eventType | Robo komut dosyası eyleminin türünü belirtir. |
"eventType": "VIEW_TEXT_CHANGED" | Verilen metni hedef kullanıcı arayüzü widget'ına girer. |
"eventType": "ENTER_TEXT" | verilen metni hedef kullanıcı arayüzü widget'ına girer ve ardından bu kullanıcı arayüzü widget'ına bir KEYCODE_ENTER olayı 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ğiyle bir kullanıcı arayüzü widget'ına "John"
girişini yapan bir Robo komut dosyası eylemi örneği verilmiştir:
{
"eventType": "VIEW_TEXT_CHANGED",
"replacementText": "John",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/first_name"
}
]
}
Uzun tıklama
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
"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 özel. |
visionText | OCR kullanarak uzun süre tıklanan öğeyi tanımlar. elementDescriptors ile karşılıklı olarak özeldir. |
Aşağıdaki özellik isteğe bağlıdır:
-
delayTime
- uzun bir tıklamanın basılmasının milisaniye cinsinden ne kadar süreceğini belirtir.
Aşağıda "Avatar 8"
içerik açıklamasına sahip bir kullanıcı arayüzü widget'ına beş saniyelik bir tıklama gerçekleştiren Robo komut dosyası eyleminin bir örneği verilmiştir:
{
"eventType": "VIEW_LONG_CLICKED",
"elementDescriptors": [
{
"contentDescription": "Avatar 8"
}
],
"delayTime": 5000
}
Tek nokta hareketi gerçekleştirme
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
---|---|
"eventType": "ONE_POINT_GESTURE" | -- |
coordinates | Tek nokta hareketi 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 bir sürükle ve bırak eylemi gerçekleştirir. Varsayılan olarakfalse
.
Aşağıda, aşağı kaydırmayı gerçekleştiren Robo komut dosyası tek noktalı hareket eyleminin bir örneği verilmiştir:
{
"eventType": "ONE_POINT_GESTURE",
"coordinates": "(50%,25%)->(50%,75%)"
}
İki noktalı bir hareket gerçekleştirin
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
---|---|
"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, kıstırma hareketini gerçekleştiren bir Robo komut dosyası eyleminin örneği verilmiştir:
{
"eventType": "TWO_POINT_GESTURE",
"coordinates": "(50%,50%)->(25%,50%),(50%,50%)->(75%,50%)"
}
IME eylemi gerçekleştirme
Bu eylem, belirtilen hedef kullanıcı arayüzü widget'ı için Giriş Yöntemi Düzenleyicisi'nde (IME) geçerli eylem düğmesine (örneğin sonraki, tamamlandı ve ara) basar.
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
---|---|
"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 eylemi gerçekleştiren bir Robo komut dosyası eylemi örneği verilmiştir:
{
"eventType": "PRESSED_EDITOR_ACTION",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/first_name"
}
]
}
Geri tuşuna basın
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
eventType | Robo komut dosyası eyleminin türünü belirtir. |
"eventType": "PRESSED_BACK" | Cihaza bir KEYCODE_BACK olayı gönderir. |
"eventType": "PRESSED_BACK_EMULATOR_28" | Android Studio'daki Robo komut dosyası kaydedici tarafından emülatör API 28'e geri dönmek için kullanılır. |
Aşağıda geri basan bir Robo komut dosyası eyleminin örneği verilmiştir:
{
"eventType": "PRESSED_BACK"
}
Ana sayfaya basın
Bu eylem, cihaza bir KEYCODE_HOME
olayı gönderir.
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
"eventType": "GO_HOME" | -- |
Aşağıda ana sayfaya basan bir Robo komut dosyası eylemi örneği verilmiştir:
{
"eventType": "GO_HOME"
}
Bir öğeyi görünüme kaydırın
Bu eylem, Robo testinin belirtilen elementDescriptors
ile eşleşen UI widget'ını, belirtilen childElementDescriptors
ile eşleşen UI widget'ı ekranda mevcut olana veya kaydırılan widget artık kaydırılamaz hale gelene veya maksimum 50 kaydırma sayısına ulaşılana kadar ileri kaydırmasını sağlar.
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
"eventType": "ELEMENT_SCROLL_INTO_VIEW" | -- |
elementDescriptors | Android kullanıcı arayüzü hiyerarşisini kullanarak kaydırılan kullanıcı arayüzü widget'ını tanımlar. |
childElementDescriptors | Android kullanıcı arayüzü hiyerarşisini kullanarak kaydırılacak kullanıcı arayüzü widget'ını tanımlar. |
Aşağıda "my.app.package:id/scrollable_card_container"
kaynak kimliğine sahip UI widget'ını ekranda "Orange"
metnine sahip UI widget'ı görünene kadar (veya daha fazla kaydırma yapılamaz) kaydıran bir Robo komut dosyası eylemi örneği verilmiştir. gerçekleştirilmesi veya maksimum 50 kaydırma sayısına ulaşılması):
{
"eventType": "ELEMENT_SCROLL_INTO_VIEW",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/scrollable_card_container"
}
],
"childElementDescriptors": [
{
"text": "Orange"
}
]
}
Tokatlamak
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
---|---|
"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 bir Robo komut dosyası eylemi örneği verilmiştir:
{
"eventType": "VIEW_SWIPED",
"swipeDirection": "Up",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/custom_content"
}
]
}
Ekran görüntüsü al
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
"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ı eyleminin örneği verilmiştir:
{
"eventType": "TAKE_SCREENSHOT",
"screenshotName": "my_screenshot"
}
Ekranda bir noktaya dokunun
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
---|---|
"eventType": "POINT_TAP" | -- |
pointTapXCoordinate | Dokunulan noktanın piksel X koordinatı. pointTapXPercent ve pointTapYPercent ile birbirini dışlayan. |
pointTapYCoordinate | Dokunulan noktanın piksel Y koordinatı. pointTapXPercent ve pointTapYPercent ile birbirini dışlayan. |
pointTapXPercent | Dokunulan noktanın yüzde X koordinatı. pointTapXCoordinate ve pointTapYCoordinate ile birbirini dışlayan. |
pointTapYPercent | Dokunulan noktanın yüzde Y koordinatı. pointTapXCoordinate ve pointTapYCoordinate ile birbirini dışlayan. |
Aşağıda ekranın ortasına dokunan bir Robo komut dosyası eylemi örneği verilmiştir:
{
"eventType": "POINT_TAP",
"pointTapXPercent": 50,
"pointTapYPercent": 50
}
Bir öğenin içindeki bir noktaya dokunun
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
"eventType": "POINT_TAP_ELEMENT" | -- |
pointTapXPercent | Hedef öğe içindeki X koordinatının yüzdesi. |
pointTapYPercent | Hedef öğe içindeki Y koordinatının yüzdesi. |
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ırıcısını sağa hareket ettiren bir Robo komut dosyası eylemi örneği verilmiştir:
{
"eventType": "POINT_TAP_ELEMENT",
"pointTapXPercent": 80,
"pointTapYPercent": 50,
"elementDescriptors": [
{
"resourceId": "my.app.package:id/my_seekbar"
}
]
}
Taramayı sonlandır
Bu eylem Robo testini durdurur.
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
---|---|
"eventType": "TERMINATE_CRAWL" | -- |
Aşağıda, bir Robo testini durduran bir Robo komut dosyası eyleminin örneği verilmiştir:
{
"eventType": "TERMINATE_CRAWL"
}
Beklemek
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
"eventType": "DELAYED_MESSAGE_POSTED" | -- |
delayTime | Ne kadar süre bekleneceğini milisaniye cinsinden belirtir. |
Aşağıda üç saniye bekleyen bir Robo komut dosyası eyleminin örneği verilmiştir:
{
"eventType": "DELAYED_MESSAGE_POSTED",
"delayTime": 3000
}
Bir öğeyi bekleyin
Bu eylem, Robo testinin belirtilen zaman aşımına kadar bir öğenin ekranda görünmesini beklemesini sağlar.
Aşağıdaki tabloda gerekli özellikler listelenmektedir:
Bağlanmak | Tanım |
"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ünmesini 30 saniyeye kadar bekleyen bir Robo komut dosyası eylemi örneği verilmiştir:
{
"eventType": "WAIT_FOR_ELEMENT",
"delayTime": 30000,
"elementDescriptors": [
{
"resourceId": "my.app.package:id/confirmation_button"
}
]
}