रोबो स्क्रिप्ट संदर्भ गाइड

यह दस्तावेज़ संरचना, क्षमताओं, उपयोग, रिकॉर्डिंग और कार्यों सहित रोबो स्क्रिप्ट के बारे में संदर्भ जानकारी प्रदान करता है। रोबो स्क्रिप्ट ऐसे परीक्षण हैं जो मोबाइल ऐप्स के लिए मैन्युअल गुणवत्ता आश्वासन (क्यूए) कार्यों को स्वचालित करते हैं, और निरंतर एकीकरण (सीआई) और प्री-लॉन्च परीक्षण रणनीतियों को सक्षम करते हैं। रोबो स्क्रिप्ट एक 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 एक पूर्णांक संख्या जो क्रॉल आउटपुट में इस रोबो स्क्रिप्ट को ट्रैक करने में मदद करती है। रोबो के पास अपनी स्वयं की id के साथ अंतर्निहित रोबो स्क्रिप्ट हैं। हालाँकि अलग-अलग रोबो स्क्रिप्ट में एक ही id उनके व्यवहार को प्रभावित नहीं करती है, लेकिन क्रॉल आउटपुट में इन रोबो स्क्रिप्ट से क्रियाओं को अलग करना चुनौतीपूर्ण हो सकता है। हम किसी भी टकराव से बचने के लिए आपकी रोबो स्क्रिप्ट के लिए 1000 या उससे अधिक की एक अद्वितीय 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 पर सेट किया जाता है, तो रोबो स्क्रिप्ट आंशिक मिलान, वर्तमान कार्रवाई को छोड़ने और निलंबन को नियोजित नहीं करती है। अर्थात्, रोबो स्क्रिप्ट को एक नियमित उपकरण परीक्षण के रूप में निष्पादित किया जाता है और जैसे ही इसकी कोई भी क्रिया निष्पादित नहीं की जा सकती वह विफल हो जाती है। डिफ़ॉल्ट रूप से, यह 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 तक पहुंच जाती है, तो इसे किसी दिए गए क्रॉल में ट्रिगर नहीं किया जा सकता है। यदि वर्तमान संदर्भ में एक से अधिक रोबो स्क्रिप्ट को ट्रिगर किया जा सकता है, तो निम्नलिखित क्रम में रोबो स्क्रिप्ट को चुनकर प्राथमिकता दी जाती है:

  1. एक contextDescriptor विशेषता है.
  2. सर्वोच्च priority है (डिफ़ॉल्ट रूप से, सभी रोबो स्क्रिप्ट की निष्पादन priority 1 समान है)।
  3. यदि रोबो स्क्रिप्ट की प्राथमिकताएँ समान हैं, तो रोबो स्क्रिप्ट की सूची में सबसे पहले दिखाई देता है।

निम्नलिखित तीन रोबो स्क्रिप्ट वाली फ़ाइल का एक उदाहरण है जो एक ही क्रिया करती है और एक ही स्थिति से ट्रिगर होती है - ऐप-अंडर-टेस्ट अग्रभूमि में है:

[
  {
    "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
      }
    ]
  }
]

जब ऐप-अंडर-टेस्ट अग्रभूमि में होता है, तो रोबो निम्नलिखित क्रम में ट्रिगर करता है:

  1. "Robo script 2" क्योंकि इसकी सर्वोच्च प्राथमिकता है।
  2. "Robo script 1" क्योंकि यह समान प्राथमिकता के साथ शेष लागू रोबो स्क्रिप्ट में पहले दिखाई देती है।
  3. अंतिम लागू रोबो स्क्रिप्ट के रूप में "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 और एडाप्टर व्यू चिल्ड्रेन पर क्रियाएँ निम्नलिखित चरणों में की जाती हैं:

  1. रोबो परीक्षण यह सुनिश्चित करता है कि संबंधित बच्चे को उसके रिसाइक्लर व्यू या एडाप्टर व्यू पर एक पोजिशनिंग क्रिया के माध्यम से स्क्रीन पर प्रदर्शित किया जाता है।

  2. रोबो परीक्षण रिकॉर्ड की गई क्रिया को सीधे चाइल्ड तत्व पर निष्पादित करता है, क्योंकि यह पहले से ही स्क्रीन पर प्रदर्शित होता है।

निम्नलिखित एडॉप्टर व्यू ( 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 स्वाइप की दिशा निर्दिष्ट करता है:
  • Left
  • Right
  • Up
  • Down
  • Forward - लक्ष्य यूआई विजेट की ऊर्ध्वाधर या क्षैतिज स्क्रॉलेबिलिटी के आधार पर या तो Down या Right
  • Backward - लक्ष्य यूआई विजेट की ऊर्ध्वाधर या क्षैतिज स्क्रॉलेबिलिटी के आधार पर या तो Up या Left
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"
    }
  ]
}

अगले कदम