इस दस्तावेज़ में रोबो स्क्रिप्ट के बारे में रेफ़रंस जानकारी दी गई है, जिसमें स्ट्रक्चर, क्षमताएं, इस्तेमाल, रिकॉर्डिंग, और कार्रवाइयाँ. रोबो स्क्रिप्ट ऐसे टेस्ट जो मोबाइल ऐप्लिकेशन के लिए, मैन्युअल क्वालिटी अश्योरेंस (QA) के टास्क अपने-आप होते हैं और लगातार इंटिग्रेशन (सीआई) और लॉन्च से पहले की जांच की रणनीतियों को चालू करना होगा. अ रोबो स्क्रिप्ट एक JSON फ़ाइल है, जो यूज़र इंटरफ़ेस (यूआई) के क्रम के बारे में बताती है और दूसरी कार्रवाइयां.
रोबो स्क्रिप्ट को इन तरीकों से बनाया जा सकता है:
रोबो स्क्रिप्ट रिकॉर्डिंग की सुविधा का इस्तेमाल करें. (सिर्फ़ Android वर्शन पर)
रोबो स्क्रिप्ट को मैन्युअल तरीके से बनाएं. (Android और iOS+)
रोबो स्क्रिप्ट रिकॉर्ड करें और फिर उसमें मैन्युअल तरीके से बदलाव करें. (सिर्फ़ Android वर्शन पर)
रोबो स्क्रिप्ट का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, रन अ रोबो का इस्तेमाल करना देखें स्क्रिप्ट.
शुरुआती जानकारी
रोबो स्क्रिप्ट को रोबो टेस्ट के लिए, ऐप्लिकेशन के अंडर-टेस्ट Android ऐप्लिकेशन का पैकेज (APK).
रोबो स्क्रिप्ट का एक उदाहरण नीचे दिया गया है, जो उपयोगकर्ता को ऐप्लिकेशन में साइन इन करता है, यह तब ट्रिगर होता है, जब ऐप्लिकेशन-अंडर-टेस्ट लॉन्च होता है:
[
{
"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"
}
]
}
]
}
]
अगर फ़ाइल में एक रोबो स्क्रिप्ट है और वह डिफ़ॉल्ट है
app_under_test_shown
ट्रिगर करने की शर्त, जैसा कि ऊपर दिए गए उदाहरण में बताया गया है, इसके बाद आप
किसी फ़ाइल में रोबो स्क्रिप्ट को और आसान फ़ॉर्मैट का इस्तेमाल करके तय कर सकता है - ठीक
इसकी कार्रवाइयों का क्रम:
[
{
"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"
}
]
}
]
रोबो स्क्रिप्ट के लिए iOS+ सहायता
iOS+ (बीटा) के लिए Robo रोबो स्क्रिप्ट के लिए सीमित काम करता है. कॉन्टेंट बनाने iOS+ के लिए रोबो स्क्रिप्ट सिंटैक्स, Android सिंटैक्स और काम करने वाले iOS+ के बराबर है सुविधाएं, अपने Android वर्शन की तरह ही काम करती हैं.
iOS+ पर ये कार्रवाइयां की जा सकती हैं:
- दावा
- क्लिक
- देर तक क्लिक करें
- स्वाइप
- सभी एलिमेंट को अनदेखा करें
- इंतज़ार करें
- स्क्रीनशॉट लेने के लिए
- क्रॉल करना बंद करें
एलिमेंट डिस्क्रिप्टर में, नीचे दिए गए एट्रिब्यूट की पहचान करने वाले एट्रिब्यूट का इस्तेमाल किया जा सकता है iOS+:
- कक्षा का नाम
- पहले से मौजूद क्लास का नाम
- कॉन्टेंट की जानकारी और रेगुलर एक्सप्रेशन
- टेक्स्ट (और रेगुलर एक्सप्रेशन)
कॉन्टेक्स्ट डिस्क्रिप्टर में ट्रिगर करने की शर्तें इनके साथ काम करती हैं iOS+:
- टेस्ट में ऐप्लिकेशन दिखाया गया
- एलिमेंट मौजूद है
- नॉन-रोबो स्क्रिप्ट पर कार्रवाई की गई
बनावट
रोबो स्क्रिप्ट में ऐसे कई एट्रिब्यूट होते हैं जो बताते हैं कि रोबो इसे कैसे एक्ज़ीक्यूट करता है. पहले से तय डिफ़ॉल्ट वैल्यू के लिए, इनमें से ज़्यादातर एट्रिब्यूट ज़रूरी नहीं हैं:
एट्रिब्यूट | जानकारी |
id
|
यह एक पूर्णांक संख्या है, जो क्रॉल आउटपुट में इस रोबो स्क्रिप्ट को ट्रैक करने में मदद करती है.
रोबो ने खुद के id के साथ, रोबो स्क्रिप्ट बनाई है. हालांकि
अलग-अलग रोबो स्क्रिप्ट में मौजूद एक ही id से
व्यवहार, क्रॉल आउटपुट में इन रोबो स्क्रिप्ट से अलग-अलग कार्रवाइयों में अंतर करता है
चुनौती भरा हो सकता है. हमारा सुझाव है कि आप इनका यूनीक id
किसी भी कॉन्फ़्लिक्ट से बचने के लिए, आपकी रोबो स्क्रिप्ट के लिए 1000 या इसके बाद का वर्शन.
|
description
|
id के समान लेकिन ज़्यादा जानकारी देने वाला.
|
crawlStage
|
रोबो, क्रॉल करने का वह स्टेज है जिस पर यह रोबो स्क्रिप्ट लागू होती है. डिफ़ॉल्ट रूप से, यह क्रॉल का मुख्य चरण है. |
priority
|
अन्य रोबो स्क्रिप्ट की तुलना में इस रोबो स्क्रिप्ट की प्राथमिकता.
डिफ़ॉल्ट रूप से, सभी रोबो स्क्रिप्ट की प्राथमिकता 1 होती है.
|
maxNumberOfRuns
|
इससे पता चलता है कि क्रॉल के दौरान रोबो इस रोबो को कितनी बार एक्ज़ीक्यूट कर सकता है स्क्रिप्ट. डिफ़ॉल्ट रूप से, रोबो किसी रोबो स्क्रिप्ट को एक बार चला सकता है. |
contextDescriptor
|
उस कॉन्टेक्स्ट या स्थिति के बारे में बताता है जो इस रोबो स्क्रिप्ट को ट्रिगर करता है. अगर हटाया जाता है, तो इस रोबो स्क्रिप्ट की ट्रिगर करने की शर्त को हमेशा मिलता है; दूसरे शब्दों में, रोबो स्क्रिप्ट बिना किसी शर्त के होती है. |
actions
|
इस रोबो स्क्रिप्ट की सभी कार्रवाइयां. |
किसी एक फ़ाइल में, एक या उससे ज़्यादा रोबो स्क्रिप्ट का कलेक्शन होता है.
यहां एक ऐसी फ़ाइल का उदाहरण दिया गया है जिसमें बिना किसी शर्त के दो रोबो स्क्रिप्ट हैं. हर स्क्रिप्ट में इसमें एक ऐसी कार्रवाई होनी चाहिए जिसे क्रॉल की शुरुआत में एक बार लागू किया गया हो:
[
{
"id": 1000,
"description": "My first Robo script",
"actions": [
{
"eventType": "DISABLE_KEYBOARD"
}
]
},
{
"id": 1001,
"description": "My second Robo script",
"actions": [
{
"eventType": "PRESSED_BACK"
}
]
}
]
कॉन्टेक्स्ट डिस्क्रिप्टर
कॉन्टेक्स्ट डिस्क्रिप्टर रोबो को ट्रिगर करने वाले कॉन्टेक्स्ट या शर्त के बारे में बताता है स्क्रिप्ट:
एट्रिब्यूट | जानकारी |
---|---|
"condition": "always"
|
हमेशा रोबो स्क्रिप्ट ट्रिगर करता है. |
"condition": "element_present"
|
इस बात की जांच करता है कि यूज़र इंटरफ़ेस (यूआई) विजेट, elementDescriptors या
visionText का तय किया गया टेक्स्ट, स्क्रीन पर मौजूद है.
|
"condition": "element_disabled"
|
जांच करता है कि elementDescriptors से मेल खाने वाला यूज़र इंटरफ़ेस (यूआई) विजेट
ये स्क्रीन पर मौजूद होती हैं और इनसे इंटरैक्ट नहीं किया जा सकता.
|
"condition": "element_checked"
|
जांच करता है कि elementDescriptors से मेल खाने वाला यूज़र इंटरफ़ेस (यूआई) विजेट
स्क्रीन पर मौजूद है और उसे चुना जाता है.
|
"condition": "app_under_test_shown"
|
यह जांचता है कि ऐप्लिकेशन की जांच के तहत यह सुविधा फ़ोरग्राउंड में चल रही है या नहीं. |
"condition": "default_launcher_shown"
|
यह जांचता है कि डिवाइस की होम स्क्रीन दिखाई गई है या नहीं. इसका मतलब है कि कोई ऐप्लिकेशन नहीं फ़ोरग्राउंड में चल रहे हैं. |
"condition": "non_roboscript_action_performed"
|
जांच करता है कि पिछले nonRoboscriptActionCount लगातार
रोबो टेस्ट से की जाने वाली कार्रवाइयां, रोबो स्क्रिप्ट ऐक्शन नहीं होती हैं.
|
negateCondition
|
अगर इसे true पर सेट किया जाता है, तो condition को अस्वीकार कर दिया जाता है. इसके लिए
उदाहरण के लिए, इस एट्रिब्यूट का इस्तेमाल करके यह पता लगाया जा सकता है कि यूज़र इंटरफ़ेस (यूआई) विजेट
स्क्रीन पर मौजूद है या यह कि ऐप्लिकेशन की जांच के नतीजे के तौर पर
फ़ोरग्राउंड है.
|
elementDescriptors
|
एक या एक से ज़्यादा एलिमेंट डिस्क्रिप्टर, जो स्क्रीन पर यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करते हैं.
इसका इस्तेमाल element_present के साथ किया जाता है,
element_disabled , और element_checked
शर्तें. visionText के साथ म्यूचुअली एक्सक्लूसिव. ज़्यादा के लिए
जानकारी के लिए, एलिमेंट डिस्क्रिप्टर देखें.
|
visionText
|
ऑप्टिकल कैरेक्टर रिकग्निशन की मदद से स्क्रीन पर दिख रहे टेक्स्ट का पता लगाया जा रहा है
(ओसीआर) एपीआई. visionText का इस्तेमाल
element_present स्थिति. इनके साथ म्यूचुअली एक्सक्लूसिव
elementDescriptors .
|
nonRoboscriptActionCount
|
नॉन-रोबो स्क्रिप्ट से पहले की गई लगातार की गई कार्रवाइयों की संख्या. हां
non_roboscript_action_performed के साथ मिलाकर इस्तेमाल किया गया
के बाद रोबो स्क्रिप्ट ट्रिगर करने की शर्त
nonRoboscriptActionCount रोबो ऐक्शन. डिफ़ॉल्ट रूप से, यह
1 .
|
रोबो स्क्रिप्ट का एक उदाहरण नीचे दिया गया है, जो यूज़र इंटरफ़ेस (यूआई) विजेट से ट्रिगर होती है
जिसके पास रिसॉर्स आईडी "my.app.package:id/page_header"
मौजूद है
स्क्रीन:
{
"id": 1000,
"contextDescriptor": {
"condition": "element_present",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/page_header"
}
]
},
"actions": [
{
"eventType": "VIEW_CLICKED",
"elementDescriptors": [
{
"text": "Settings"
}
]
}
]
}
रोबो स्क्रिप्ट का एक उदाहरण नीचे दिया गया है, जो
ऑप्टिकल कैरेक्टर रिकग्निशन (ओसीआर) की मदद से "Privacy Policy"
का पता लगाया गया:
{
"id": 1000,
"description": "Vision text Robo script",
"contextDescriptor": {
"condition": "element_present",
"visionText": "Privacy Policy"
},
"actions": [
{
"eventType": "VIEW_CLICKED",
"visionText": "Privacy Policy"
}
]
}
रोबो स्क्रिप्ट का एक उदाहरण नीचे दिया गया है, जो इसके बाद 5 सेकंड तक इंतज़ार करता है हर नॉन-स्क्रिप्ट रोबो ऐक्शन:
{
"contextDescriptor": {
"condition": "non_roboscript_action_performed"
},
"maxNumberOfRuns" : 1000,
"actions" : [
{
"eventType" : "DELAYED_MESSAGE_POSTED",
"delayTime" : 5000
}]
}
कार्रवाइयां
रोबो स्क्रिप्ट में होने वाली हर कार्रवाई को एक या उससे ज़्यादा के बंडल के तौर पर दिखाया जाता है एट्रिब्यूट-वैल्यू पेयर, जिनकी जानकारी इस टेबल में दी गई है:
एट्रिब्यूट | जानकारी |
eventType
|
इससे यह पता चलता है कि कार्रवाई किस तरह की है. उदाहरण के लिए, क्लिक, टेक्स्ट में बदलाव करने की सुविधा वगैरह. हर कार्रवाई के लिए ज़रूरी. |
elementDescriptors
|
यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करने वाली जानकारी. ऐसी सभी कार्रवाइयों के लिए ज़रूरी है इसमें एक टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट होता है, जैसे किसी खास बटन पर क्लिक करना. |
optional
|
अगर true पर सेट है, तो यह कार्रवाई तब छोड़ दी जाती है, जब यह नहीं की जा सकती
प्रदर्शन किया. उदाहरण के लिए, इस कार्रवाई को तब छोड़ दिया जाता है, जब इसे
स्क्रीन पर टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट – रोबो को शामिल किए बिना
स्क्रिप्ट. डिफ़ॉल्ट रूप से, यह वैल्यू false होती है.
|
replacementText
|
टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट में डाला जाने वाला टेक्स्ट. टेक्स्ट में बदलाव करने के लिए ज़रूरी है कार्रवाइयां. |
swipeDirection
|
स्वाइप की दिशा बताता है. स्वाइप करने पर होने वाली कार्रवाइयों के लिए ज़रूरी है. |
delayTime
|
बताता है कि कितने समय तक इंतज़ार करना है. यह जानकारी मिलीसेकंड में दी जाती है. इंतज़ार से जुड़ी कार्रवाइयों के लिए ज़रूरी है. |
pointTapXCoordinate और pointTapYCoordinate
|
टैप किए गए पॉइंट के पिक्सल X और Y कोऑर्डिनेट. म्यूचुअली एक्सक्लूसिव
pointTapXPercent और pointTapYPercent के साथ.
पॉइंट पर टैप करने से जुड़ी कार्रवाइयों के लिए ज़रूरी है.
|
pointTapXPercent और pointTapYPercent
|
टैप किए गए पॉइंट के X और Y कोऑर्डिनेट का प्रतिशत. म्यूचुअली
खास तौर पर, pointTapXCoordinate और
pointTapYCoordinate . पॉइंट पर टैप करने से जुड़ी कार्रवाइयों के लिए ज़रूरी है.
|
नीचे बिना टारगेट वाली दो कार्रवाइयों वाली रोबो स्क्रिप्ट का उदाहरण दिया गया है यूज़र इंटरफ़ेस (यूआई) विजेट. इसका मतलब है कि ये कार्रवाइयां किसी खास यूज़र इंटरफ़ेस (यूआई) पर नहीं होती हैं विजेट:
[
{
"eventType": "DELAYED_MESSAGE_POSTED",
"delayTime": 3000
},
{
"eventType": "PRESSED_BACK"
}
]
एलिमेंट डिस्क्रिप्टर
एलिमेंट डिस्क्रिप्टर, यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करता है. इसके लिए, वह एक या एक से ज़्यादा इन एट्रिब्यूट की पहचान करना ज़रूरी है:
एट्रिब्यूट | जानकारी |
className
|
– |
ancestorClassName
|
एलिमेंट के यूज़र इंटरफ़ेस (यूआई) हैरारकी के एंसेस्टर का क्लास नाम. एंसेस्टर कोई भी होता है पैरंट नोड को एलिमेंट के यूज़र इंटरफ़ेस (यूआई) हैरारकी में देखा जा सकता है, जिसमें एलिमेंट भी शामिल है वह भी ऐसा कर सकता है. |
resourceId
|
– |
resourceIdRegex
|
resourceId से मेल खाने वाला Java रेगुलर एक्सप्रेशन.
|
contentDescription
|
– |
contentDescriptionRegex
|
contentDescription से मेल खाने वाला Java रेगुलर एक्सप्रेशन.
|
text (यह स्क्रीन पर दिखता है)
|
– |
textRegex
|
text से मेल खाने वाला Java रेगुलर एक्सप्रेशन.
|
groupViewChildPosition ,
recyclerViewChildPosition या
adapterViewChildPosition
|
यह यूज़र इंटरफ़ेस (यूआई) विजेट की चाइल्ड पोज़िशन दिखाता है. यह इस बात पर निर्भर करता है कि पैरंट विजेट. |
अक्सर ये एट्रिब्यूट तय नहीं होते. उदाहरण के लिए, ऐसा हो सकता है कि कोई बटन
टेक्स्ट और कॉन्टेंट की जानकारी होनी चाहिए. भले ही, कुछ एट्रिब्यूट की वैल्यू मौजूद हों,
हो सकता है कि दिए गए ऐप्लिकेशन की स्क्रीन पर, ये यूनीक न हों (इसमें resourceId
भी शामिल है).
उदाहरण के लिए, किसी सूची के आइटम के बीच अंतर करना आम तौर पर सिर्फ़ संभव है
पैरंट विजेट में, बच्चों की अलग-अलग पोज़िशन का इस्तेमाल करके. इसका मतलब है
यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करने के लिए, सिर्फ़ एक एलिमेंट डिस्क्रिप्टर का इस्तेमाल करना
काफ़ी नहीं है. इसलिए, किसी कार्रवाई की elementDescriptors
एट्रिब्यूट में
इन एलिमेंट डिस्क्रिप्टर का क्रम इस तरह सेट किया जाता है कि पहला
टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट से मेल खाता हो और दूसरा वाला टारगेट से मेल खाता हो
यूज़र इंटरफ़ेस (यूआई) विजेट का पैरंट विजेट वगैरह. किसी ऐक्शन के टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट को मैच किया गया है
जब इसके सभी एलिमेंट डिस्क्रिप्टर, संबंधित यूज़र इंटरफ़ेस (यूआई) विजेट से मेल खाते हों
सब-हैरारकी.
टेक्स्ट बदलने और क्लिक के साथ रोबो स्क्रिप्ट का एक उदाहरण नीचे दिया गया है कार्रवाइयां, जिनमें से दोनों का इस्तेमाल करके आपको टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करनी होगी दिए गए एलिमेंट डिस्क्रिप्टर:
[
{
"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"
}
]
}
]
प्लान लागू करने के विकल्प
रोबो स्क्रिप्ट में, JSON के साथ कार्रवाइयों की सूची को प्रीफ़िक्स किया जा सकता है. हालांकि, ऐसा करना ज़रूरी नहीं है
ऑब्जेक्ट है, जो उस रोबो स्क्रिप्ट को चलाने के विकल्प तय करता है. यह
कॉन्फ़िगरेशन हेडर, roboscript
कीवर्ड से शुरू होता है. इसके बाद,
पसंद के हिसाब से लागू करने के विकल्पों का JSON फ़ॉर्मैट.
रोबो स्क्रिप्ट में, इन्हें चलाने के ये विकल्प काम करते हैं:
executionMode
- रोबो स्क्रिप्ट के चलने पर, एक्ज़ीक्यूशन के विकल्प लागू होते हैं:strict
- अगरtrue
पर सेट किया जाता है, तो रोबो स्क्रिप्ट काम नहीं करती है कुछ हद तक मैच करना, मौजूदा कार्रवाई को स्किप करना, और निलंबन. इसका मतलब है कि रोबो स्क्रिप्ट को नियमित इंस्ट्रुमेंटेशन टेस्ट के तौर पर एक्ज़ीक्यूट किया जाता है और जैसे ही इसकी कोई भी कार्रवाई नहीं की जा सकती, तो वह काम करना बंद कर देता है. डिफ़ॉल्ट रूप से, यहfalse
है.dismiss_popups
- अगर इसेtrue
पर सेट किया जाता है, तो रोबो टेस्ट किसी भी अनचाहे को खारिज कर देगा डायलॉग, रोबो स्क्रिप्ट को परफ़ॉर्म करते समयstrict
मोड में भी होते हैं. यहstrict
मोड में न होने पर, विकल्प का कोई असर नहीं पड़ता. डिफ़ॉल्ट रूप से, यहfalse
.notify
- अगर इसेfalse
पर सेट किया जाता है, तो रोबो स्क्रिप्ट स्क्रीन पर नहीं दिखेगी सूचनाएं लागू होती हैं. डिफ़ॉल्ट रूप से, यहtrue
है.
postscript
- रोबो स्क्रिप्ट के पूरा होने के बाद, प्रोग्राम चलाने के विकल्प लागू होते हैं:terminate
- अगरtrue
पर सेट किया जाता है, तो रोबो टेस्ट, रोबो के बाद क्रॉल करना बंद कर देता है स्क्रिप्ट पूरी हो गई है. डिफ़ॉल्ट रूप से, यहfalse
है.
रोबो स्क्रिप्ट को बिना किसी नियम के strict
मोड में लागू किया गया एक उदाहरण नीचे दिया गया है
स्क्रीन पर तीन सेकंड तक बंद रहने वाली सूचनाएं होती हैं, जिनके बाद क्रॉल होता है
स्टॉप:
"roboscript": {
"executionMode": {
"strict": true,
"notify": false
},
"postscript": {
"terminate": true
}
}
[
{
"eventType": "DELAYED_MESSAGE_POSTED",
"delayTime": 3000
}
]
टेंप्लेट के पैरामीटर
टेंप्लेट पैरामीटर, रोबो स्क्रिप्ट में मौजूद एक प्लेसहोल्डर होता है. इसे इससे बदला जाता है उस समय की असली वैल्यू, जब रोबो टेस्ट उस रोबो स्क्रिप्ट को एक्ज़ीक्यूशन के लिए लोड करता है. टेंप्लेट पैरामीटर के आगे डबल अंडरस्कोर लगा होता है. इसके बाद प्रतिशत का निशान होता है, और इसके बाद प्रतिशत के निशान के साथ एक दोहरा अंडरस्कोर लगा होता है.
रोबो स्क्रिप्ट, नीचे दिए गए टेंप्लेट पैरामीटर के साथ काम करते हैं:
__%APP_PACKAGE_NAME%__
- ऐप्लिकेशन की जांच में लगे पैकेज का नाम.
रोबो स्क्रिप्ट का एक उदाहरण नीचे दिया गया है, जो ऐप्लिकेशन की जांच के तहत आने वाले ऐप्लिकेशन को रोकता है प्रक्रिया:
[
{
"eventType": "ADB_SHELL_COMMAND",
"command": "am force-stop __%APP_PACKAGE_NAME%__"
}
]
टिप्पणियां
रोबो स्क्रिप्ट में टिप्पणी की पंक्तियां हो सकती हैं, जो इनसे शुरू होने वाली पंक्तियां होती हैं
#
या //
.
कुछ टिप्पणियों वाली रोबो स्क्रिप्ट का एक उदाहरण नीचे दिया गया है:
# Confirm a user account.
[
{
// Click the DONE button.
"eventType": "VIEW_CLICKED",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/done"
}
]
}
]
मिलने वाली अनुमतियां
डिफ़ॉल्ट रूप से, जब तक रोबो स्क्रिप्ट की सभी कार्रवाइयां पूरी नहीं हो जातीं (या कम से कम करने की कोशिश की जाती है), रोबो स्क्रिप्ट चालू रहती है. रोबो टेस्ट रोबो स्क्रिप्ट कार्रवाई, जब भी कार्रवाई करने के लिए कोई कार्रवाई चुनी जा रही हो. रोबो स्क्रिप्ट ताकत बढ़ाने के लिए नीचे दी गई तकनीकों का इस्तेमाल करता है:
तकनीक | जानकारी |
कुछ हद तक मैच करने की सुविधा | अगर रोबो स्क्रिप्ट की मौजूदा कार्रवाई पूरी तरह मैच नहीं हो पाती है, तो
शर्तों में ढील दी गई है और मिलान करने की फिर से कोशिश की जाती है. कुछ हद तक मैच करने वाले नतीजे
मिलान करते समय, बाहरी एलिमेंट डिस्क्रिप्टर पर
रोबो स्क्रिप्ट ऐक्शन का टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट.
अगर कुछ हद तक मैच हो जाता है, तो उससे जुड़ी रोबो स्क्रिप्ट ऐक्शन सामान्य तरीके से किया जाता है. यह तकनीक उन स्थितियों में काम करती है जिनमें ऐप्लिकेशन के स्ट्रक्चर में बदलाव होता है. उदाहरण के लिए, जब स्क्रीन पर दिखता है, तो ऐप्लिकेशन के अलग-अलग वर्शन के बीच में एलिमेंट को फिर से व्यवस्थित किया जाता है. |
मौजूदा कार्रवाई को छोड़ें | अगर रोबो स्क्रिप्ट की मौजूदा कार्रवाई पूरी तरह या कुछ हद तक मैच नहीं हो पाती है,
रोबो, रोबो स्क्रिप्ट के बाद होने वाली कार्रवाई को मैच करने की कोशिश करता है. अगर इसके बाद
रोबो टेस्ट स्किप करता है और कभी वापस नहीं लौटता, यह पूरी तरह या कुछ हद तक मैच करता है
यह मौजूदा रोबो स्क्रिप्ट ऐक्शन है और उसके बाद वाला ऐक्शन करता है.
यह तकनीक, तब काम करती है, जब ऐप्लिकेशन के काम करने का तरीका बदलता है या लगातार अपडेट न हो रहा हो. उदाहरण के लिए, जब ऐसा हो कि एक-दूसरे के साथ वे रोबो की रिकॉर्डिंग बनाम फिर से चलाकर अलग-अलग स्क्रीन पर दिखते हैं स्क्रिप्ट. |
निलंबित | अगर रोबो स्क्रिप्ट की मौजूदा या बाद की कार्रवाइयां, पूरी तरह से या
पूरी तरह मैच नहीं किया गया, रोबो स्क्रिप्ट कुछ समय के लिए निलंबित कर दी गई है और रोबो टेस्ट किया जा रहा है
अन्य रणनीतियों का इस्तेमाल करके किसी कार्रवाई को चुनता है. इस कार्रवाई के बाद
पूरा होने पर, रोबो टेस्ट फिर रोबो स्क्रिप्ट को फिर से चलाना शुरू कर देता है.
जब तक रोबो स्क्रिप्ट की मौजूदा या बाद की कार्रवाइयों का मिलान नहीं किया जा सकता, रोबो स्क्रिप्ट कितनी भी कार्रवाइयों के लिए निलंबित रहती है. इस तरह, रोबो यह ज़रूरी नहीं है कि स्क्रिप्ट रोबो टेस्ट के लिए एक प्रस्ताव रखें, साथ ही, स्टैंडर्ड रोबो टेस्ट के साथ रोबो स्क्रिप्ट ऐक्शन को इंटरस्पर किया जा सकता है कार्रवाइयां. यह तकनीक, ऐसी स्थितियों पर काम करती है जब ऐप्लिकेशन के काम करने के तरीके में गड़बड़ी हो, या जब ऐप्लिकेशन के वर्शन के बीच इतने बड़े बदलाव होते हैं कि रोबो टेस्ट "अंतर कम करने" की ज़रूरत है स्टैंडर्ड कार्रवाइयों के साथ किया जा सकता है. |
प्राथमिकताएं
अगर रोबो स्क्रिप्ट अपने maxNumberOfRuns
तक पहुंच जाती है, तो उसे ट्रिगर नहीं किया जा सकता
दिए गए क्रॉल में. अगर एक से ज़्यादा रोबो स्क्रिप्ट, मौजूदा
के हिसाब से प्राथमिकता तय की जाती है. इसके लिए रोबो स्क्रिप्ट को, नीचे दिए गए क्रम में
के हिसाब से:
- इसमें
contextDescriptor
एट्रिब्यूट है. - इसमें सबसे ज़्यादा
priority
हैं (डिफ़ॉल्ट रूप से, सभी रोबो स्क्रिप्ट एक जैसी होती हैं1
में सेpriority
एक्ज़ीक्यूशन). - यह रोबो स्क्रिप्ट की सूची में सबसे पहले दिखता है, अगर रोबो स्क्रिप्ट प्राथमिकताएं एक जैसे हैं.
नीचे तीन रोबो स्क्रिप्ट वाली एक फ़ाइल का उदाहरण दिया गया है, जो एक जैसी कार्रवाई होती है और एक जैसी स्थिति से ट्रिगर होती है. ऐसे में, ऐप्लिकेशन-अंडर-टेस्ट में फ़ोरग्राउंड में:
[
{
"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
}
]
}
]
जब ऐप्लिकेशन अंडर-टेस्ट फ़ोरग्राउंड में होता है, तब रोबो ये ट्रिगर करता है. क्रम:
"Robo script 2"
, क्योंकि इसकी प्राथमिकता सबसे ज़्यादा है."Robo script 1"
, क्योंकि यह लागू होने वाले बाकी ऑफ़र में पहले दिखता है समान प्राथमिकता वाली रोबो स्क्रिप्ट.- आखिरी लागू रोबो स्क्रिप्ट के तौर पर
"Robo script 3"
.
बार-बार दौड़ना
डिफ़ॉल्ट रूप से, क्रॉल के दौरान रोबो, रोबो स्क्रिप्ट को ज़्यादा से ज़्यादा एक बार ट्रिगर करता है. यह काम किया जा सकता है
maxNumberOfRuns
एट्रिब्यूट की मदद से अडजस्ट किए गए.
रोबो स्क्रिप्ट का एक उदाहरण नीचे दिया गया है, जो ऐप्लिकेशन के टेस्ट को 10 बार तक बैकग्राउंड में:
{
"id": 1000,
"maxNumberOfRuns": 10,
"contextDescriptor": {
"condition": "app_under_test_shown"
},
"actions": [
{
"eventType": "GO_HOME"
}
]
}
क्रॉल करने की स्थिति
रोबो स्क्रिप्ट, किसी रोबो क्रॉल के अलग-अलग स्टेज पर लागू होती हैं:
क्रॉल करने की स्थिति | जानकारी |
pre_crawl
|
रोबो के लॉन्च होने और अंडर-टेस्ट में ऐप्लिकेशन को क्रॉल करना शुरू करने से पहले. |
post_crawl
|
जब रोबो, ऐप्लिकेशन के टेस्ट के नतीजों को क्रॉल कर लेता है. ऐप्लिकेशन
post_crawl रोबो स्क्रिप्ट इतने समय में 15 सेकंड से ज़्यादा नहीं होनी चाहिए
अवधि नहीं बताई गई है. ऐसा नहीं होने पर क्रॉल खत्म हो सकता है.
|
crawl
|
क्रॉल करने का मुख्य स्टेज, जब रोबो, टेस्ट में ऐप्लिकेशन को क्रॉल करता है. |
close_screen
|
जब रोबो किसी स्क्रीन से वापस (बैकट्रैक) वापस जाने की कोशिश करता है, तो इस स्क्रीन पर हो सकने वाली सभी कार्रवाइयों के बारे में बताया गया है. डिफ़ॉल्ट रूप से, रोबो वापस दबा दिया जाता है, जो कुछ मामलों में हमारी पसंद नहीं होती. |
अगर रोबो स्क्रिप्ट का crawlStage
एट्रिब्यूट नहीं बताया गया है, तो यह
crawl
होना चाहिए.
रोबो स्क्रिप्ट का एक उदाहरण नीचे दिया गया है, जो टेस्ट में शामिल ऐप्लिकेशन का इस्तेमाल करने वाले उपयोगकर्ताओं का डेटा हटा देता है इस डेटा को रोबो के क्रॉल करने से पहले:
{
"id": 1000,
"crawlStage": "pre_crawl",
"actions": [
{
"eventType": "ADB_SHELL_COMMAND",
"command": "pm clear __%APP_PACKAGE_NAME%__"
}
]
}
नीचे रोबो स्क्रिप्ट का एक उदाहरण दिया गया है, जिसमें रोबो को क्लिक करने का निर्देश दिया गया है
जब भी वह पुष्टि के बाद वापस जाने (बैकट्रैक) पर वापस जाने की कोशिश करता है, तो "Cancel"
डायलॉग:
{
"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"
}
]
}
]
}
शर्तें पूरी होने पर ट्रिगर होने वाली कार्रवाइयां
रोबो स्क्रिप्ट में, शर्तों के साथ की जाने वाली कार्रवाइयां हो सकती हैं. शर्तों वाली कार्रवाइयों में तीन होते हैं अतिरिक्त एट्रिब्यूट, जिनसे पता चलता है कि रोबो इनके लिए काम करता है या नहीं:
एट्रिब्यूट | जानकारी |
priority
|
अन्य विकल्पों की तुलना में, शर्त के साथ की जाने वाली इस कार्रवाई की प्राथमिकता
इसकी रोबो स्क्रिप्ट में शर्त वाली कार्रवाइयां. डिफ़ॉल्ट रूप से, सभी
शर्तों के साथ की जाने वाली कार्रवाइयों की प्राथमिकता 1 है.
|
maxNumberOfRuns
|
किसी नियम के मुताबिक, इस कार्रवाई को कितनी बार किया जा सकता है करने की कोशिश की जा सकती है. डिफ़ॉल्ट रूप से, सभी शर्तों के साथ इन कार्रवाइयों को एक बार में ज़्यादा से ज़्यादा एक बार पूरा किया जा सकता है. जिसमें रोबो स्क्रिप्ट शामिल है. |
contextDescriptor
|
शर्तों के हिसाब से की जाने वाली इस कार्रवाई को ट्रिगर करने वाला संदर्भ/शर्त. इसमें और ऐसी ही सुविधाएं देता है जो रोबो स्क्रिप्ट का कॉन्टेक्स्टडिस्क्रिप्टर |
ट्रिगर किए जाने पर, रोबो स्क्रिप्ट अपनी बिना शर्त वाली कार्रवाइयां एक-एक करके करता है दिखने का क्रम तय करें. अगर रोबो स्क्रिप्ट में कंडिशनल ऐक्शन हैं, तो वे बिना शर्त वाली कार्रवाई को चुनने से पहले, हर बार इन बातों पर ध्यान दिया जाता है. अगर आपने कोई भी शर्त वाली कार्रवाई अपनी प्राथमिकता के आधार पर ट्रिगर और चुनी जाती है और तो रोबो स्क्रिप्ट इस सशर्त कार्रवाई को अंजाम देती है. ऐसा नहीं होने पर, रोबो स्क्रिप्ट बिना किसी शर्त के यह कार्रवाई करती है. होना चाहिए मान्य है, तो रोबो स्क्रिप्ट में कम से कम एक बिना शर्त वाली कार्रवाई होनी चाहिए.
यहां बिना शर्त वाली रोबो स्क्रिप्ट का एक उदाहरण दिया गया है ऐसी कार्रवाई जो रोबो के दौरान किसी भी समय पॉप-अप डायलॉग दिखने पर उसे खारिज कर देती है स्क्रिप्ट निष्पादन:
{
"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
}
}
कार्रवाइयों को अनदेखा करें
रोबो स्क्रिप्ट में, रोबो के लिए खास यूज़र इंटरफ़ेस (यूआई) को अनदेखा करने के निर्देश हो सकते हैं
किसी खास स्क्रीन पर विजेट या सभी यूज़र इंटरफ़ेस (यूआई) विजेट. ये निर्देश
"कार्रवाइयों" को अनदेखा करके दिखाया जाता है eventType
ELEMENT_IGNORED
और
ALL_ELEMENTS_IGNORED
संगत.
जब किसी रोबो स्क्रिप्ट में, इसे अनदेखा करने वाला contextDescriptor
एट्रिब्यूट हो
कार्रवाइयां दी गई स्क्रीन से मेल खाती हैं, रोबो किसी यूज़र इंटरफ़ेस (यूआई) विजेट से इंटरैक्ट नहीं करता
इसे अनदेखा करने की कार्रवाइयों से टारगेट किया जाता है (जब तक कि कोई अन्य रोबो स्क्रिप्ट ऐक्शन
रोबो, अनदेखा किए गए यूज़र इंटरफ़ेस (यूआई) विजेट में से किसी एक पर कोई कार्रवाई करता है).
रोबो स्क्रिप्ट में अनदेखा करने, कंडिशनल, और बिना शर्त वाले
कार्रवाइयां. रोबो स्क्रिप्ट की अन्य कार्रवाइयों के उलट, कार्रवाइयों को अनदेखा तब तक लागू किया जाता है, जब तक
क्योंकि रोबो स्क्रिप्ट का contextDescriptor
रोबो क्रॉल, priority
और maxNumberOfRuns
के मान की परवाह किए बिना
एट्रिब्यूट की वैल्यू सबमिट करें.
दो रोबो स्क्रिप्ट वाली फ़ाइल का एक उदाहरण नीचे दिया गया है. पहला रोबो
स्क्रिप्ट की वजह से रोबो, स्क्रीन पर मौजूद सभी यूज़र इंटरफ़ेस (यूआई) विजेट को अनदेखा कर देता है. इस स्क्रीन पर दिखने वाला यूज़र इंटरफ़ेस (यूआई) विजेट,
संसाधन आईडी "my.app.package:id/ignored_screen"
. दूसरी रोबो स्क्रिप्ट,
रोबो, यूज़र इंटरफ़ेस (यूआई) विजेट को अनदेखा करता है, जिनके संसाधन आईडी Java regex ".*:id/done"
से मेल खाते हैं
संसाधन आईडी के साथ यूज़र इंटरफ़ेस (यूआई) विजेट वाली स्क्रीन
"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 और AdapterView के लिए सहायता
RecyclerView और AdapterView के विजेट, डाइनैमिक तौर पर लोड होते हैं और प्रदर्शित हो सकता है. क्योंकि और इस बच्चे के स्क्रीन पर स्वाइप करने की संख्या अलग-अलग है. के लिए, अलग-अलग डिवाइसों के नाप या आकार के हिसाब से, यह बच्चे के डेटा की स्थिति, जो कि सटीक है. इस तरह के कॉन्टेंट पर भरोसा करने पर, इस बच्चे को स्क्रीन पर लाने के लिए ज़रूरी स्वाइप की संख्या और तो स्क्रीन की पोज़िशन का इस्तेमाल करें.
इसलिए, रोबो स्क्रिप्ट RecyclerView की ऐब्सलूट डेटा पोज़िशन को कैप्चर करती है
जो रोबो स्क्रिप्ट ऐक्शन का टारगेट इस तरह हैं
recyclerViewChildPosition
. रोबो स्क्रिप्ट पूरे डेटा को भी कैप्चर करती है
AdapterView चिल्ड्रेन की स्थितियां, जो रोबो स्क्रिप्ट कार्रवाइयों का टारगेट हैं
adapterViewChildPosition
.
बच्चों के लिए RecyclerView और AdapterView पर कार्रवाइयां, यहां दी गई हैं चरण:
रोबो टेस्ट से यह पक्का होता है कि संबंधित बच्चे को स्क्रीन पर दिखाया जाएगा RecyclerView या AdapterView में मौजूद, आपकी जगह की जानकारी (पोज़िशनिंग) का इस्तेमाल करना.
रोबो टेस्ट रिकॉर्ड की गई कार्रवाई को सीधे चाइल्ड एलिमेंट पर करता है, क्योंकि जो पहले से ही स्क्रीन पर दिख रहा हो.
AdapterView पर क्लिक ऐक्शन का एक उदाहरण नीचे दिया गया है
(android.widget.GridView
) बच्चा:
{
"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
}
]
}
RecyclerView पर क्लिक ऐक्शन का एक उदाहरण नीचे दिया गया है
(android.support.v7.widget.RecyclerView
) बच्चा:
{
"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 में रोबो स्क्रिप्ट रिकॉर्ड करें और उसे Test Lab में चलाएं
Android Studio में रोबो स्क्रिप्ट बनाई जा सकती है. इससे स्क्रिप्ट इस तरह सेव होती है JSON फ़ाइल. इसके बाद, JSON फ़ाइल को Firebase Test Lab पर अपलोड किया जा सकता है और उसके अनुसार जांच करें.
जब अटैच की गई स्क्रिप्ट के साथ रोबो टेस्ट किया जाता है, तो रोबो और फिर हमेशा की तरह ऐप्लिकेशन को एक्सप्लोर करता है.
Android Studio में रोबो स्क्रिप्ट JSON फ़ाइल बनाने के लिए, इसमें दिया गया तरीका अपनाएं Android Studio में Test Lab का इस्तेमाल करके, रोबो स्क्रिप्ट रिकॉर्ड करें.
रोबो स्क्रिप्ट कार्रवाइयां
यह सामान्य वैकल्पिक एट्रिब्यूट सभी कार्रवाइयों पर लागू होता है:
description
- इससे रोबो में इस रोबो स्क्रिप्ट ऐक्शन को ट्रैक करने में मदद मिलती है टेस्ट आउटपुट.
दावा
अगर दावा की गई शर्त सही है, तो रोबो स्क्रिप्ट अगली जो दूसरा दावा भी हो सकता है. अगर ऐसा नहीं होता है, तो रोबो स्क्रिप्ट को एक्ज़ीक्यूट करना को सफल न होने की वजह से रोक दिया गया है.
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
एट्रिब्यूट | जानकारी |
"eventType": "ASSERTION"
|
-- |
contextDescriptor
|
दावा किए गए संदर्भ या शर्त के बारे में बताता है. इसका स्ट्रक्चर एक जैसा है और ऐसी ही सुविधाएं देता है रोबो स्क्रिप्ट का कॉन्टेक्स्टडिस्क्रिप्टर. |
रोबो स्क्रिप्ट के लिए किए जाने वाले दावे का एक उदाहरण नीचे दिया गया है, जो जांच करता है कि ऐप्लिकेशन-अंडर-टेस्ट फ़ोरग्राउंड में है:
{
"eventType": "ASSERTION",
"contextDescriptor": {
"condition": "app_under_test_shown"
}
}
रोबो स्क्रिप्ट में किए जाने वाले दावे का एक उदाहरण नीचे दिया गया है, जो इस बात की जांच करता है कि एक यूज़र इंटरफ़ेस (यूआई)
संसाधन आईडी "com.google.samples.apps.topeka:id/done"
वाला विजेट यह है
स्क्रीन पर मौजूद है:
{
"eventType": "ASSERTION",
"contextDescriptor": {
"condition": "element_present",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/done"
}
]
}
}
रोबो स्क्रिप्ट के दावे का एक उदाहरण नीचे दिया गया है, जो
ओसीआर का इस्तेमाल करके, स्क्रीन पर "Settings"
नहीं मिला:
{
"eventType": "ASSERTION",
"contextDescriptor": {
"condition": "element_present",
"negateCondition": true,
"visionText": "Settings"
}
}
क्लिक
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
एट्रिब्यूट | जानकारी |
---|---|
eventType
|
यह बताता है कि रोबो स्क्रिप्ट ऐक्शन किस तरह का है. |
"eventType": "VIEW_CLICKED"
|
ऐप्लिकेशन अंडर-टेस्ट के टारगेट एलिमेंट पर क्लिक करता है. |
"eventType": "SOFT_KEYBOARD_CLICK"
|
सॉफ़्ट कीबोर्ड के टारगेट एलिमेंट पर क्लिक करता है. |
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK"
|
सॉफ़्ट कीबोर्ड के यहां तक के किसी भी एलिमेंट पर क्लिक करता है
maxNumberOfRuns बार.
|
"eventType": "LIST_ITEM_CLICKED"
|
Android Studio में रोबो स्क्रिप्ट रिकॉर्डर, सूची पर क्लिक करने के लिए इस्तेमाल करता है आइटम. |
elementDescriptors
|
यह Android यूज़र इंटरफ़ेस (यूआई) की हैरारकी का इस्तेमाल करके, क्लिक किए गए यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करता है.
visionText के साथ म्यूचुअली एक्सक्लूसिव.
|
visionText
|
ओसीआर का इस्तेमाल करके क्लिक किए गए एलिमेंट की पहचान करता है. इनके साथ म्यूचुअली एक्सक्लूसिव
elementDescriptors .
|
maxNumberOfRuns
|
इससे पता चलता है कि सॉफ़्ट कीबोर्ड के किसी रैंडम एलिमेंट पर कितनी बार क्लिक करना है,
जब eventType , SOFT_KEYBOARD_RANDOM_CLICK हो.
डिफ़ॉल्ट वैल्यू 1 है.
|
रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण नीचे दिया गया है, जो
संसाधन आईडी "com.google.samples.apps.topeka:id/done"
:
{
"eventType": "VIEW_CLICKED",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/done"
}
]
}
रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण नीचे दिया गया है, जो
ओसीआर का इस्तेमाल करके, स्क्रीन पर "Privacy Policy"
का पता चला:
{
"eventType": "VIEW_CLICKED",
"visionText": "Privacy Policy"
}
रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण नीचे दिया गया है, जो सॉफ़्ट पर क्लिक करता है
कॉन्टेंट के ब्यौरे "Emoji button"
वाला कीबोर्ड एलिमेंट:
{
"eventType": "SOFT_KEYBOARD_CLICK",
"elementDescriptors": [
{
"contentDescription": "Emoji button"
}
]
}
रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण नीचे दिया गया है, जो रैंडम सॉफ़्ट पर क्लिक करता है कीबोर्ड एलिमेंट पांच बार तक के होने चाहिए:
{
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK",
"maxNumberOfRuns": 5
}
सॉफ़्ट कीबोर्ड बंद करें
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
विशेषता | ब्यौरा |
"eventType": "DISABLE_KEYBOARD"
|
-- |
रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण नीचे दिया गया है, जो सॉफ़्ट को बंद करती है कीबोर्ड:
{
"eventType": "DISABLE_KEYBOARD"
}
adb शेल कमांड लागू करें
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
विशेषता | ब्यौरा |
"eventType": "ADB_SHELL_COMMAND"
|
-- |
command
|
Android डीबग ब्रिज (adb) शेल कमांड को एक्ज़ीक्यूट करना है. |
यह एट्रिब्यूट ज़रूरी नहीं है:
expectedOutputRegex
- Java रेगुलर के रूप में निर्देश का अनुमानित आउटपुट एक्सप्रेशन से अलग है. अगर आउटपुट मैच नहीं करता है, तो रोबो स्क्रिप्ट ऐक्शन नहीं होता है. इन्होंने बदलाव किया है डिफ़ॉल्ट तौर पर, यह एक खाली स्ट्रिंग है. इसका मतलब है कि आउटपुट की जांच नहीं की गई है.
रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण नीचे दिया गया है, जो ऐप्लिकेशन के अंडर-टेस्ट उपयोगकर्ता का डेटा:
{
"eventType": "ADB_SHELL_COMMAND",
"command": "pm clear __%APP_PACKAGE_NAME%__"
}
अनुमतियां दें
इस कार्रवाई को रोबो स्क्रिप्ट रिकॉर्डर, Android Studio में Espresso Test Recorder के साथ पुराने सिस्टम के साथ काम करने की सुविधा. रोबो टेस्ट, ऐप्लिकेशन में अंडर-टेस्ट की शुरुआत में ही सभी अनुमतियां दे देता है से ट्रैक किया जा सकता है. इसलिए, इस कार्रवाई के ख़िलाफ़ कोई कार्रवाई नहीं की जा सकती. इस कार्रवाई का इस्तेमाल अपने रोबो स्क्रिप्ट.
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
विशेषता | ब्यौरा |
"eventType": "PERMISSIONS_REQUEST"
|
-- |
स्क्रीन पर मौजूद सभी एलिमेंट को अनदेखा करना
इस कार्रवाई से, रोबो किसी भी स्क्रीन पर मौजूद उन सभी एलिमेंट को अनदेखा कर देता है जो जिसमें रोबो स्क्रिप्ट शामिल है.
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
विशेषता | ब्यौरा |
"eventType": "ALL_ELEMENTS_IGNORED"
|
-- |
यहां रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण दिया गया है, जो रोबो को अनदेखा कर देता है स्क्रीन पर मौजूद एलिमेंट:
{
"eventType": "ALL_ELEMENTS_IGNORED"
}
किसी एलिमेंट को अनदेखा करना
यह कार्रवाई रोबो को ऐसे एलिमेंट (या एलिमेंट) को अनदेखा कर देती है जो बताए गए एलिमेंट से मेल खाते हैं
elementDescriptors
.
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
विशेषता | ब्यौरा |
"eventType": "ELEMENT_IGNORED"
|
-- |
elementDescriptors
|
Android यूज़र इंटरफ़ेस (यूआई) हैरारकी का इस्तेमाल करके, अनदेखा किए गए यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करता है. |
यह एट्रिब्यूट ज़रूरी नहीं है:
ignoreChildren
- अगरtrue
पर सेट है, तो रोबो इसके सभी डिसेंडेंट को भी अनदेखा कर देता है अनदेखा किया गया यूज़र इंटरफ़ेस(यूआई) विजेट. डिफ़ॉल्ट रूप से, यहfalse
है.
यहां रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण दिया गया है, जो रोबो को अनदेखा कर देता है
एलिमेंट, जिनके कॉन्टेंट की जानकारी "Avatar"
से शुरू होती है:
{
"eventType": "ELEMENT_IGNORED",
"elementDescriptors": [
{
"contentDescriptionRegex": "Avatar.*"
}
]
}
टेक्स्ट डालें
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
विशेषता | ब्यौरा |
---|---|
eventType
|
यह बताता है कि रोबो स्क्रिप्ट ऐक्शन किस तरह का है. |
"eventType": "VIEW_TEXT_CHANGED"
|
दिए गए टेक्स्ट को टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट में इनपुट करता है. |
"eventType": "ENTER_TEXT"
|
दिए गए टेक्स्ट को टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट में डालता है और फिर
इस यूज़र इंटरफ़ेस (यूआई) विजेट के लिए KEYCODE_ENTER इवेंट.
|
elementDescriptors
|
Android यूज़र इंटरफ़ेस (यूआई) की हैरारकी का इस्तेमाल करके, टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करता है. |
replacementText
|
टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट में डाला जाने वाला टेक्स्ट. |
रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण नीचे दिया गया है, जो "John"
को
रिसॉर्स आईडी वाला यूज़र इंटरफ़ेस (यूआई) विजेट
"com.google.samples.apps.topeka:id/first_name"
:
{
"eventType": "VIEW_TEXT_CHANGED",
"replacementText": "John",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/first_name"
}
]
}
देर तक क्लिक करें
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
विशेषता | ब्यौरा |
"eventType": "VIEW_LONG_CLICKED"
|
-- |
elementDescriptors
|
Android यूज़र इंटरफ़ेस (यूआई) की हैरारकी का इस्तेमाल करके, टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करता है. म्यूचुअली
सिर्फ़ visionText के साथ.
|
visionText
|
ओसीआर का इस्तेमाल करके, देर तक क्लिक किए गए एलिमेंट की पहचान करता है. इनके साथ म्यूचुअली एक्सक्लूसिव
elementDescriptors .
|
यह एट्रिब्यूट ज़रूरी नहीं है:
delayTime
- तय करता है कि किसी क्लिक को दबाकर रखने की अवधि कितनी देर तक होती है. इसमें मिलीसेकंड.
रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण नीचे दिया गया है, जो
कॉन्टेंट के ब्यौरे वाले यूज़र इंटरफ़ेस (यूआई) विजेट पर कुछ सेकंड तक क्लिक: "Avatar 8"
:
{
"eventType": "VIEW_LONG_CLICKED",
"elementDescriptors": [
{
"contentDescription": "Avatar 8"
}
],
"delayTime": 5000
}
एक पॉइंट के जेस्चर का इस्तेमाल करें
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
विशेषता | ब्यौरा |
---|---|
"eventType": "ONE_POINT_GESTURE"
|
-- |
coordinates
|
एक बिंदु वाले जेस्चर के लिए दो निर्देशांक, जो "(x1,y1)->(x2,y2)" फ़ॉर्मैट में होते हैं का इस्तेमाल किया जा सकता है. |
यह एट्रिब्यूट ज़रूरी नहीं है:
dragAndDrop
- अगरtrue
पर सेट किया जाता है, तो एक बिंदु वाला जेस्चर 'खींचें और छोड़ें' कार्रवाई करें. डिफ़ॉल्ट रूप से, यहfalse
है.
रोबो स्क्रिप्ट के एक पॉइंट वाले जेस्चर ऐक्शन का एक उदाहरण नीचे दिया गया है नीचे की ओर स्वाइप करता है:
{
"eventType": "ONE_POINT_GESTURE",
"coordinates": "(50%,25%)->(50%,75%)"
}
दो पॉइंट वाले जेस्चर का इस्तेमाल करें
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
विशेषता | ब्यौरा |
---|---|
"eventType": "TWO_POINT_GESTURE"
|
-- |
coordinates
|
दो-बिंदु जेस्चर के लिए चार निर्देशांक, जो इस रूप में प्रारूपित हैं "(x1,y1)->(x2,y2),(x3,y3)->(x4,y4)" का इस्तेमाल किया जा सकता है. |
नीचे रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण दिया गया है, जो पिंच आउट करता है जेस्चर:
{
"eventType": "TWO_POINT_GESTURE",
"coordinates": "(50%,50%)->(25%,50%),(50%,50%)->(75%,50%)"
}
IME से कार्रवाई करें
इस कार्रवाई से मौजूदा ऐक्शन बटन दबाया जाता है. उदाहरण के लिए, अगला, हो गया, और दिए गए टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट के लिए, इनपुट के तरीके के एडिटर (IME) पर खोजें.
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
विशेषता | ब्यौरा |
---|---|
"eventType": "PRESSED_EDITOR_ACTION"
|
-- |
elementDescriptors
|
Android यूज़र इंटरफ़ेस (यूआई) की हैरारकी का इस्तेमाल करके, टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करता है. |
रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण नीचे दिया गया है, जो IME ऐक्शन करता है
संसाधन आईडी वाले यूज़र इंटरफ़ेस (यूआई) विजेट पर
"com.google.samples.apps.topeka:id/first_name"
:
{
"eventType": "PRESSED_EDITOR_ACTION",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/first_name"
}
]
}
'वापस जाएं' बटन दबाएं
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
विशेषता | ब्यौरा |
eventType
|
यह बताता है कि रोबो स्क्रिप्ट ऐक्शन किस तरह का है. |
"eventType": "PRESSED_BACK"
|
डिवाइस पर KEYCODE_BACK इवेंट भेजता है.
|
"eventType": "PRESSED_BACK_EMULATOR_28"
|
Android Studio में रोबो स्क्रिप्ट रिकॉर्डर, 'वापस जाएं' बटन दबाने के लिए इस्तेमाल करता है Emulator API 28 पर. |
रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण नीचे दिया गया है, जो वापस दबाता है:
{
"eventType": "PRESSED_BACK"
}
होम बटन दबाएं
ऐसा करने से, डिवाइस पर KEYCODE_HOME
इवेंट भेजा जाता है.
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
विशेषता | ब्यौरा |
"eventType": "GO_HOME"
|
-- |
नीचे रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण दिया गया है, जो होम बटन को दबाता है:
{
"eventType": "GO_HOME"
}
किसी एलिमेंट को स्क्रोल करके देखना
इस कार्रवाई से, रोबो टेस्ट को स्क्रोल करके उस यूज़र इंटरफ़ेस (यूआई) विजेट को फ़ॉरवर्ड कर दिया जाता है जो
दिए गए से मेल खाने वाले यूज़र इंटरफ़ेस (यूआई) विजेट तक elementDescriptors
को तय किया गया
childElementDescriptors
स्क्रीन पर मौजूद है या स्क्रोल किया गया विजेट
अब स्क्रोल नहीं किया जाएगा या स्क्रोल करने की तय सीमा पूरी हो गई है.
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
विशेषता | ब्यौरा |
"eventType": "ELEMENT_SCROLL_INTO_VIEW"
|
-- |
elementDescriptors
|
Android यूज़र इंटरफ़ेस (यूआई) की हैरारकी का इस्तेमाल करके, स्क्रोल किए गए यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करता है. |
childElementDescriptors
|
यह Android यूज़र इंटरफ़ेस (यूआई) हैरारकी का इस्तेमाल करके, स्क्रोल करने के लिए यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करता है. |
नीचे रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण दिया गया है, जो यूज़र इंटरफ़ेस (यूआई) विजेट को स्क्रोल करता है
यूज़र इंटरफ़ेस (यूआई) तक, संसाधन आईडी "my.app.package:id/scrollable_card_container"
के साथ
"Orange"
टेक्स्ट वाला विजेट स्क्रीन पर मौजूद है या अब और स्क्रोल नहीं किया जा सकता
किया गया है या 50 से ज़्यादा स्क्रोल नहीं किए जा सकते):
{
"eventType": "ELEMENT_SCROLL_INTO_VIEW",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/scrollable_card_container"
}
],
"childElementDescriptors": [
{
"text": "Orange"
}
]
}
स्वाइप
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
विशेषता | ब्यौरा |
---|---|
"eventType": "VIEW_SWIPED"
|
-- |
swipeDirection
|
स्वाइप की दिशा तय करता है:
|
elementDescriptors
|
Android यूज़र इंटरफ़ेस (यूआई) की हैरारकी का इस्तेमाल करके, टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करता है. |
रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण नीचे दिया गया है, जो यूज़र इंटरफ़ेस (यूआई) विजेट को ऊपर की ओर स्वाइप करता है
संसाधन आईडी "my.app.package:id/custom_content"
का इस्तेमाल करके:
{
"eventType": "VIEW_SWIPED",
"swipeDirection": "Up",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/custom_content"
}
]
}
स्क्रीनशॉट लेने के लिए
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
विशेषता | ब्यौरा |
"eventType": "TAKE_SCREENSHOT"
|
-- |
screenshotName
|
स्क्रीनशॉट फ़ाइल का नाम बताता है. |
रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण नीचे दिया गया है, जो स्क्रीनशॉट लेता है:
{
"eventType": "TAKE_SCREENSHOT",
"screenshotName": "my_screenshot"
}
स्क्रीन पर किसी बिंदु पर टैप करें
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
विशेषता | ब्यौरा |
---|---|
"eventType": "POINT_TAP"
|
-- |
pointTapXCoordinate
|
टैप किए गए पॉइंट का पिक्सल X कोऑर्डिनेट. इनके साथ म्यूचुअली एक्सक्लूसिव
pointTapXPercent और pointTapYPercent .
|
pointTapYCoordinate
|
टैप किए गए पॉइंट का पिक्सल Y कोऑर्डिनेट. इनके साथ म्यूचुअली एक्सक्लूसिव
pointTapXPercent और pointTapYPercent .
|
pointTapXPercent
|
टैप किए गए पॉइंट का प्रतिशत X निर्देशांक. इनके साथ म्यूचुअली एक्सक्लूसिव
pointTapXCoordinate और pointTapYCoordinate .
|
pointTapYPercent
|
टैप किए गए पॉइंट का प्रतिशत Y निर्देशांक. इनके साथ म्यूचुअली एक्सक्लूसिव
pointTapXCoordinate और pointTapYCoordinate .
|
रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण यहां दिया गया है. यह ऐक्शन गेम के बीच में आने वाले स्क्रीन:
{
"eventType": "POINT_TAP",
"pointTapXPercent": 50,
"pointTapYPercent": 50
}
एलिमेंट में किसी पॉइंट पर टैप करें
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
विशेषता | ब्यौरा |
"eventType": "POINT_TAP_ELEMENT"
|
-- |
pointTapXPercent
|
लक्ष्य एलीमेंट में प्रतिशत X निर्देशांक. |
pointTapYPercent
|
टारगेट एलिमेंट में Y निर्देशांक का प्रतिशत. |
elementDescriptors
|
Android यूज़र इंटरफ़ेस (यूआई) हैरारकी का इस्तेमाल करके, टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करता है. |
रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण नीचे दिया गया है, जो सीकबार के दाईं ओर स्लाइडर:
{
"eventType": "POINT_TAP_ELEMENT",
"pointTapXPercent": 80,
"pointTapYPercent": 50,
"elementDescriptors": [
{
"resourceId": "my.app.package:id/my_seekbar"
}
]
}
क्रॉल करना बंद करें
इस कार्रवाई से रोबो टेस्ट रुक जाता है.
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
विशेषता | ब्यौरा |
---|---|
"eventType": "TERMINATE_CRAWL"
|
-- |
रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण नीचे दिया गया है, जो रोबो टेस्ट को रोकता है:
{
"eventType": "TERMINATE_CRAWL"
}
इंतज़ार करें
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
विशेषता | ब्यौरा |
"eventType": "DELAYED_MESSAGE_POSTED"
|
-- |
delayTime
|
बताता है कि कितने समय तक इंतज़ार करना है. यह जानकारी मिलीसेकंड में दी जाती है. |
रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण नीचे दिया गया है, जो तीन से सेकंड:
{
"eventType": "DELAYED_MESSAGE_POSTED",
"delayTime": 3000
}
किसी एलिमेंट का इंतज़ार करें
इस कार्रवाई से रोबो टेस्ट तब तक इंतज़ार करता है, जब तक स्क्रीन पर कोई एलिमेंट नहीं दिखता समय खत्म होना.
इस टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
विशेषता | ब्यौरा |
"eventType": "WAIT_FOR_ELEMENT"
|
-- |
delayTime
|
इंतज़ार का समय मिलीसेकंड में बताता है. |
elementDescriptors
|
Android यूज़र इंटरफ़ेस (यूआई) हैरारकी का इस्तेमाल करके, उस यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करता है जिसकी इंतज़ार कर रहा है. |
रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण नीचे दिया गया है, जो एक बार में 30 तक इंतज़ार करता है
रिसॉर्स आईडी वाले यूज़र इंटरफ़ेस (यूआई) विजेट के लिए सेकंड
स्क्रीन पर दिखाने के लिए "my.app.package:id/confirmation_button"
:
{
"eventType": "WAIT_FOR_ELEMENT",
"delayTime": 30000,
"elementDescriptors": [
{
"resourceId": "my.app.package:id/confirmation_button"
}
]
}