यह दस्तावेज़ संरचना, क्षमताओं, उपयोग, रिकॉर्डिंग और कार्यों सहित रोबो स्क्रिप्ट के बारे में संदर्भ जानकारी प्रदान करता है। रोबो स्क्रिप्ट ऐसे परीक्षण हैं जो मोबाइल ऐप्स के लिए मैन्युअल गुणवत्ता आश्वासन (क्यूए) कार्यों को स्वचालित करते हैं, और निरंतर एकीकरण (सीआई) और प्री-लॉन्च परीक्षण रणनीतियों को सक्षम करते हैं। रोबो स्क्रिप्ट एक JSON फ़ाइल है जो उपयोगकर्ता इंटरफ़ेस (UI) और अन्य क्रियाओं के अनुक्रम का वर्णन करती है।
आप निम्नलिखित तरीकों से रोबो स्क्रिप्ट बना सकते हैं:
रोबो स्क्रिप्ट रिकॉर्डिंग सुविधा का उपयोग करें। (केवल एंड्रॉइड)
रोबो स्क्रिप्ट मैन्युअल रूप से बनाएं। (एंड्रॉइड और आईओएस+)
रोबो स्क्रिप्ट को रिकॉर्ड करें और फिर इसे मैन्युअल रूप से संपादित करें। (केवल एंड्रॉइड)
रोबो स्क्रिप्ट का उपयोग करने के बारे में अधिक जानने के लिए, रोबो स्क्रिप्ट चलाएँ देखें।
परिचय
ऐप-अंडर-टेस्ट एंड्रॉइड एप्लिकेशन पैकेज (एपीके) जैसे अन्य इनपुट के साथ रोबो टेस्ट को रोबो स्क्रिप्ट प्रदान की जाती है।
निम्नलिखित रोबो स्क्रिप्ट का एक उदाहरण है जो एक उपयोगकर्ता को एक ऐप में साइन इन करता है, जो ऐप-अंडर-टेस्ट लॉन्च होने पर ट्रिगर होता है:
[
{
"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+ (बीटा) के लिए रोबो में रोबो स्क्रिप्ट के लिए सीमित समर्थन है। iOS+ के लिए रोबो स्क्रिप्ट सिंटैक्स एंड्रॉइड सिंटैक्स के समान है, और समर्थित iOS+ सुविधाएं अपने एंड्रॉइड समकक्षों के समान व्यवहार करती हैं।
निम्नलिखित क्रियाएँ iOS+ में समर्थित हैं:
- बल देकर कहना
- क्लिक
- लंबा क्लिक करें
- कड़ी चोट
- सभी तत्वों को अनदेखा करें
- इंतज़ार
- स्क्रीनशॉट लीजिये
- क्रॉल समाप्त करें
एलिमेंट डिस्क्रिप्टर में निम्नलिखित पहचानने वाली विशेषताएँ iOS+ में समर्थित हैं:
- कक्षा का नाम
- पूर्वज वर्ग का नाम
- सामग्री विवरण (और रेगेक्स)
- टेक्स्ट (और रेगेक्स)
संदर्भ विवरणकों में निम्नलिखित ट्रिगरिंग स्थितियाँ iOS+ में समर्थित हैं:
- परीक्षण के तहत ऐप दिखाया गया
- तत्व मौजूद
- गैर-रोबो स्क्रिप्ट क्रिया निष्पादित की गई
संरचना
रोबो स्क्रिप्ट में कई विशेषताएँ होती हैं जो बताती हैं कि रोबो इसे कैसे निष्पादित करता है। इनमें से अधिकांश विशेषताएँ पूर्वनिर्धारित डिफ़ॉल्ट मानों के साथ वैकल्पिक हैं:
गुण | विवरण |
id | एक पूर्णांक संख्या जो क्रॉल आउटपुट में इस रोबो स्क्रिप्ट को ट्रैक करने में मदद करती है। |
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 | पहले की गई लगातार गैर-रोबो स्क्रिप्ट क्रियाओं की संख्या। इसका उपयोग प्रत्येक nonRoboscriptActionCount रोबो क्रियाओं के बाद रोबो स्क्रिप्ट को ट्रिगर करने के लिए non_roboscript_action_performed स्थिति के साथ संयोजन में किया जाता है। डिफ़ॉल्ट रूप से, यह 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 मेल करने के लिए जावा रेगुलर एक्सप्रेशन। |
contentDescription | – |
contentDescriptionRegex | contentDescription मेल खाने के लिए जावा नियमित अभिव्यक्ति। |
text (जो स्क्रीन पर दिखाई देता है) | – |
textRegex | text से मेल खाने के लिए जावा नियमित अभिव्यक्ति। |
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
पर सेट किया जाता है, तो रोबो स्क्रिप्ट आंशिक मिलान, वर्तमान कार्रवाई को छोड़ने और निलंबन को नियोजित नहीं करती है। अर्थात्, रोबो स्क्रिप्ट को एक नियमित उपकरण परीक्षण के रूप में निष्पादित किया जाता है और जैसे ही इसकी कोई भी क्रिया निष्पादित नहीं की जा सकती वह विफल हो जाती है। -
notify
- यदिfalse
पर सेट किया गया है, तो रोबो स्क्रिप्ट अपने निष्पादन की शुरुआत और अंत में ऑन-स्क्रीन सूचनाएं नहीं दिखाती है। डिफ़ॉल्ट रूप से, यहtrue
है.
-
-
postscript
- रोबो स्क्रिप्ट पूरी होने के बाद लागू निष्पादन विकल्प:-
terminate
- यदिtrue
पर सेट किया जाता है, तो रोबो स्क्रिप्ट पूरी होने के बाद रोबो परीक्षण क्रॉल करना बंद कर देता है।
-
निम्नलिखित एक रोबो स्क्रिप्ट का उदाहरण है जिसे ऑन-स्क्रीन सूचनाओं के बिना 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
है (डिफ़ॉल्ट रूप से, सभी रोबो स्क्रिप्ट की निष्पादनpriority
1
समान है)। - यदि रोबो स्क्रिप्ट की प्राथमिकताएँ समान हैं, तो रोबो स्क्रिप्ट की सूची में सबसे पहले दिखाई देता है।
निम्नलिखित तीन रोबो स्क्रिप्ट वाली फ़ाइल का एक उदाहरण है जो एक ही क्रिया करती है और एक ही स्थिति से ट्रिगर होती है - ऐप-अंडर-टेस्ट अग्रभूमि में है:
[
{
"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 | रोबो द्वारा ऐप-अंडर-टेस्ट को क्रॉल करना समाप्त करने के बाद। |
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"
वाले यूआई विजेट वाली स्क्रीन पर सभी यूआई विजेट्स को अनदेखा कर देती है। दूसरी रोबो स्क्रिप्ट रोबो को यूआई विजेट्स को नजरअंदाज कर देती है जिनकी संसाधन आईडी जावा रेगेक्स ".*: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 और एडाप्टर व्यू विजेट के बच्चे गतिशील रूप से लोड किए जाते हैं और वर्तमान स्क्रीन से कई स्वाइप दूर प्रदर्शित किए जा सकते हैं। चूंकि स्क्रीन का आकार, और इस बच्चे तक पहुंचने के लिए आवश्यक स्वाइप की संख्या, अलग-अलग डिवाइस फॉर्म कारकों के लिए अलग-अलग होती है, इसलिए बच्चे की डेटा स्थिति पर भरोसा करना अधिक मजबूत होता है, जो पूर्ण है। इस बच्चे को स्क्रीन पर लाने और फिर उसकी स्क्रीन स्थिति का उपयोग करने के लिए आवश्यक स्वाइप की संख्या पर भरोसा करना एक कम मजबूत दृष्टिकोण है।
इसलिए, रोबो स्क्रिप्ट RecyclerView बच्चों की पूर्ण डेटा स्थिति को कैप्चर करती है जो कि recyclerViewChildPosition
के रूप में रोबो स्क्रिप्ट क्रियाओं के लक्ष्य हैं। रोबो स्क्रिप्ट एडाप्टर व्यू चिल्ड्रेन की पूर्ण डेटा स्थिति को भी कैप्चर करती है जो adapterViewChildPosition
के रूप में रोबो स्क्रिप्ट क्रियाओं के लक्ष्य हैं।
RecyclerView और एडाप्टर व्यू चिल्ड्रेन पर क्रियाएँ निम्नलिखित चरणों में की जाती हैं:
रोबो परीक्षण यह सुनिश्चित करता है कि संबंधित बच्चे को उसके रिसाइक्लर व्यू या एडाप्टर व्यू पर एक पोजिशनिंग क्रिया के माध्यम से स्क्रीन पर प्रदर्शित किया जाता है।
रोबो परीक्षण रिकॉर्ड की गई क्रिया को सीधे चाइल्ड तत्व पर निष्पादित करता है, क्योंकि यह पहले से ही स्क्रीन पर प्रदर्शित होता है।
निम्नलिखित एडॉप्टर व्यू ( 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
}
]
}
एंड्रॉइड स्टूडियो में रोबो स्क्रिप्ट रिकॉर्ड करें और इसे टेस्ट लैब में चलाएं
आप एंड्रॉइड स्टूडियो में एक रोबो स्क्रिप्ट बना सकते हैं, जो स्क्रिप्ट को JSON फ़ाइल के रूप में सहेजता है। फिर आप JSON फ़ाइल को एप्लिकेशन के साथ फायरबेस टेस्ट लैब में अपलोड कर सकते हैं और तदनुसार परीक्षण चला सकते हैं।
जब आप एक स्क्रिप्ट संलग्न करके रोबो टेस्ट चलाते हैं, तो रोबो टेस्ट पहले आपके पूर्व-स्क्रिप्टेड कार्यों के माध्यम से कदम उठाता है और फिर हमेशा की तरह ऐप का अन्वेषण करता है।
एंड्रॉइड स्टूडियो में रोबो स्क्रिप्ट JSON फ़ाइल बनाने के लिए, एंड्रॉइड स्टूडियो में टेस्ट लैब का उपयोग करके रोबो स्क्रिप्ट रिकॉर्ड करें में दिए गए चरणों का पालन करें।
रोबो स्क्रिप्ट क्रियाएँ
निम्नलिखित सामान्य वैकल्पिक विशेषता सभी क्रियाओं पर लागू होती है:
-
description
- रोबो परीक्षण आउटपुट में इस रोबो स्क्रिप्ट क्रिया के निष्पादन को ट्रैक करने में मदद करता है।
बल देकर कहना
यदि दावा की गई स्थिति सत्य है, तो रोबो स्क्रिप्ट अगली कार्रवाई के लिए जारी रहती है, जो एक और दावा हो सकता है। अन्यथा, विफल दावे के कारण रोबो स्क्रिप्ट निष्पादन रुका हुआ है।
निम्न तालिका आवश्यक विशेषताओं को सूचीबद्ध करती है:
गुण | विवरण |
"eventType": "ASSERTION" | -- |
contextDescriptor | दावा किए गए संदर्भ या स्थिति का वर्णन करता है। इसकी संरचना समान है और रोबो स्क्रिप्ट के 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"
}
]
}
}
निम्नलिखित रोबो स्क्रिप्ट अभिकथन का एक उदाहरण है जो जाँचता है कि OCR का उपयोग करके स्क्रीन पर "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" | सूची आइटम पर क्लिक करने के लिए एंड्रॉइड स्टूडियो में रोबो स्क्रिप्ट रिकॉर्डर द्वारा उपयोग किया जाता है। |
elementDescriptors | एंड्रॉइड यूआई पदानुक्रम का उपयोग करके क्लिक किए गए यूआई विजेट की पहचान करता है। visionText के साथ परस्पर अनन्य। |
visionText | OCR का उपयोग करके क्लिक किए गए तत्व की पहचान करता है। 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"
}
]
}
निम्नलिखित रोबो स्क्रिप्ट क्रिया का एक उदाहरण है जो OCR का उपयोग करके स्क्रीन पर पाई गई "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"
}
एडीबी शेल कमांड निष्पादित करें
निम्न तालिका आवश्यक विशेषताओं को सूचीबद्ध करती है:
गुण | विवरण |
"eventType": "ADB_SHELL_COMMAND" | -- |
command | एंड्रॉइड डीबग ब्रिज (एडीबी) शेल कमांड निष्पादित करने के लिए। |
निम्नलिखित विशेषता वैकल्पिक है:
-
expectedOutputRegex
- जावा रेगुलर एक्सप्रेशन के रूप में कमांड का अपेक्षित आउटपुट। यदि आउटपुट मेल नहीं खाता है, तो रोबो स्क्रिप्ट क्रिया विफल हो जाती है। डिफ़ॉल्ट रूप से, यह एक खाली स्ट्रिंग है, जिसका अर्थ है कि आउटपुट की जाँच नहीं की गई है।
निम्नलिखित रोबो स्क्रिप्ट क्रिया का एक उदाहरण है जो ऐप-अंडर-टेस्ट उपयोगकर्ता डेटा को साफ़ करता है:
{
"eventType": "ADB_SHELL_COMMAND",
"command": "pm clear __%APP_PACKAGE_NAME%__"
}
अनुमतियाँ प्रदान करें
यह क्रिया एस्प्रेसो टेस्ट रिकॉर्डर के साथ बैकवर्ड संगतता के लिए एंड्रॉइड स्टूडियो में रोबो स्क्रिप्ट रिकॉर्डर द्वारा रिकॉर्ड की जाती है। रोबो परीक्षण प्रत्येक क्रॉल की शुरुआत में ऐप-अंडर-टेस्ट को सभी अनुमतियाँ प्रदान करता है, और इस प्रकार, यह क्रिया नो-ऑप है। अपनी रोबो स्क्रिप्ट में इस क्रिया का उपयोग न करें।
निम्न तालिका आवश्यक विशेषताओं को सूचीबद्ध करती है:
गुण | विवरण |
"eventType": "PERMISSIONS_REQUEST" | -- |
स्क्रीन पर सभी तत्वों को अनदेखा करें
यह क्रिया रोबो को किसी भी स्क्रीन पर उन सभी तत्वों को अनदेखा कर देती है जो रोबो स्क्रिप्ट को ट्रिगर करते हैं।
निम्न तालिका आवश्यक विशेषताओं को सूचीबद्ध करती है:
गुण | विवरण |
"eventType": "ALL_ELEMENTS_IGNORED" | -- |
निम्नलिखित रोबो स्क्रिप्ट क्रिया का एक उदाहरण है जो रोबो को स्क्रीन पर सभी तत्वों को अनदेखा कर देता है:
{
"eventType": "ALL_ELEMENTS_IGNORED"
}
किसी तत्व को अनदेखा करें
यह क्रिया रोबो को उस तत्व (या तत्वों) को अनदेखा कर देती है जो निर्दिष्ट elementDescriptors
से मेल खाते हैं।
निम्न तालिका आवश्यक विशेषताओं को सूचीबद्ध करती है:
गुण | विवरण |
"eventType": "ELEMENT_IGNORED" | -- |
elementDescriptors | एंड्रॉइड यूआई पदानुक्रम का उपयोग करके नजरअंदाज किए गए यूआई विजेट की पहचान करता है। |
निम्नलिखित विशेषता वैकल्पिक है:
-
ignoreChildren
- यदिtrue
पर सेट किया जाता है, तो रोबो नजरअंदाज किए गए यूआई विजेट के सभी वंशजों को भी नजरअंदाज कर देता है। डिफ़ॉल्ट रूप से, यहfalse
है।
निम्नलिखित रोबो स्क्रिप्ट क्रिया का एक उदाहरण है जो रोबो को उन सभी तत्वों को अनदेखा कर देता है, जिनकी सामग्री का विवरण "Avatar"
से शुरू होता है:
{
"eventType": "ELEMENT_IGNORED",
"elementDescriptors": [
{
"contentDescriptionRegex": "Avatar.*"
}
]
}
इनपुट टेक्स्ट
निम्न तालिका आवश्यक विशेषताओं को सूचीबद्ध करती है:
गुण | विवरण |
---|---|
eventType | रोबो स्क्रिप्ट क्रिया का प्रकार निर्दिष्ट करता है। |
"eventType": "VIEW_TEXT_CHANGED" | दिए गए टेक्स्ट को लक्ष्य यूआई विजेट में इनपुट करता है। |
"eventType": "ENTER_TEXT" | दिए गए टेक्स्ट को लक्ष्य यूआई विजेट में इनपुट करता है और फिर इस यूआई विजेट पर एक KEYCODE_ENTER इवेंट भेजता है। |
elementDescriptors | एंड्रॉइड यूआई पदानुक्रम का उपयोग करके लक्ष्य यूआई विजेट की पहचान करता है। |
replacementText | लक्ष्य यूआई विजेट में इनपुट करने के लिए पाठ। |
निम्नलिखित रोबो स्क्रिप्ट क्रिया का एक उदाहरण है जो संसाधन आईडी "com.google.samples.apps.topeka:id/first_name"
के साथ यूआई विजेट में "John"
इनपुट करता है:
{
"eventType": "VIEW_TEXT_CHANGED",
"replacementText": "John",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/first_name"
}
]
}
लंबा क्लिक करें
निम्न तालिका आवश्यक विशेषताओं को सूचीबद्ध करती है:
गुण | विवरण |
"eventType": "VIEW_LONG_CLICKED" | -- |
elementDescriptors | एंड्रॉइड यूआई पदानुक्रम का उपयोग करके लक्ष्य यूआई विजेट की पहचान करता है। visionText के साथ परस्पर अनन्य। |
visionText | OCR का उपयोग करके लंबे समय से क्लिक किए गए तत्व की पहचान करता है। 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 क्रिया निष्पादित करें
यह क्रिया निर्दिष्ट लक्ष्य यूआई विजेट के लिए इनपुट मेथड एडिटर (आईएमई) पर वर्तमान एक्शन बटन दबाती है, उदाहरण के लिए, अगला, हो गया, और खोज।
निम्न तालिका आवश्यक विशेषताओं को सूचीबद्ध करती है:
गुण | विवरण |
---|---|
"eventType": "PRESSED_EDITOR_ACTION" | -- |
elementDescriptors | एंड्रॉइड यूआई पदानुक्रम का उपयोग करके लक्ष्य यूआई विजेट की पहचान करता है। |
निम्नलिखित रोबो स्क्रिप्ट क्रिया का एक उदाहरण है जो संसाधन आईडी "com.google.samples.apps.topeka:id/first_name"
के साथ UI विजेट पर IME क्रिया करता है:
{
"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" | एमुलेटर एपीआई 28 पर वापस दबाने के लिए एंड्रॉइड स्टूडियो में रोबो स्क्रिप्ट रिकॉर्डर द्वारा उपयोग किया जाता है। |
निम्नलिखित रोबो स्क्रिप्ट क्रिया का एक उदाहरण है जो पीछे की ओर दबाती है:
{
"eventType": "PRESSED_BACK"
}
होम दबाएँ
यह क्रिया डिवाइस पर एक KEYCODE_HOME
ईवेंट भेजती है।
निम्न तालिका आवश्यक विशेषताओं को सूचीबद्ध करती है:
गुण | विवरण |
"eventType": "GO_HOME" | -- |
निम्नलिखित रोबो स्क्रिप्ट क्रिया का एक उदाहरण है जो होम दबाता है:
{
"eventType": "GO_HOME"
}
किसी तत्व को दृश्य में स्क्रॉल करें
यह क्रिया रोबो टेस्ट को यूआई विजेट को आगे स्क्रॉल करती है जो निर्दिष्ट elementDescriptors
मेल खाता है जब तक कि यूआई विजेट जो निर्दिष्ट childElementDescriptors
से मेल खाता है वह स्क्रीन पर मौजूद नहीं होता है, या स्क्रॉल किए गए विजेट को अब स्क्रॉल नहीं किया जा सकता है, या 50 स्क्रॉल की अधिकतम संख्या तक नहीं पहुंच जाता है।
निम्न तालिका आवश्यक विशेषताओं को सूचीबद्ध करती है:
गुण | विवरण |
"eventType": "ELEMENT_SCROLL_INTO_VIEW" | -- |
elementDescriptors | एंड्रॉइड यूआई पदानुक्रम का उपयोग करके स्क्रॉल किए गए यूआई विजेट की पहचान करता है। |
childElementDescriptors | एंड्रॉइड यूआई पदानुक्रम का उपयोग करने के लिए स्क्रॉल करने के लिए यूआई विजेट की पहचान करता है। |
निम्नलिखित रोबो स्क्रिप्ट एक्शन का एक उदाहरण है जो यूआई विजेट को संसाधन आईडी "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 | एंड्रॉइड यूआई पदानुक्रम का उपयोग करके लक्ष्य यूआई विजेट की पहचान करता है। |
निम्नलिखित रोबो स्क्रिप्ट क्रिया का एक उदाहरण है जो संसाधन आईडी "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 | एंड्रॉइड यूआई पदानुक्रम का उपयोग करके लक्ष्य यूआई विजेट की पहचान करता है। |
निम्नलिखित रोबो स्क्रिप्ट क्रिया का एक उदाहरण है जो सीकबार के स्लाइडर को दाईं ओर ले जाता है:
{
"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 | एंड्रॉइड यूआई पदानुक्रम का उपयोग करके प्रतीक्षित यूआई विजेट की पहचान करता है। |
निम्नलिखित रोबो स्क्रिप्ट क्रिया का एक उदाहरण है जो स्क्रीन पर संसाधन आईडी "my.app.package:id/confirmation_button"
के साथ यूआई विजेट के प्रदर्शित होने के लिए 30 सेकंड तक प्रतीक्षा करता है:
{
"eventType": "WAIT_FOR_ELEMENT",
"delayTime": 30000,
"elementDescriptors": [
{
"resourceId": "my.app.package:id/confirmation_button"
}
]
}