रोबो स्क्रिप्ट के बारे में जानकारी देने वाली गाइड

इस दस्तावेज़ में, रोबो स्क्रिप्ट के बारे में रेफ़रंस जानकारी दी गई है. इसमें, स्ट्रक्चर, सुविधाओं, इस्तेमाल, रिकॉर्डिंग, और कार्रवाइयों के बारे में जानकारी शामिल है. रोबो स्क्रिप्ट, ऐसी जांच हैं जो मोबाइल ऐप्लिकेशन के लिए, मैन्युअल क्वालिटी अश्योरेंस (क्यूए) टास्क को ऑटोमेट करती हैं. साथ ही, ये लगातार इंटिग्रेशन (सीआई) और लॉन्च से पहले की जाने वाली टेस्टिंग की रणनीतियों को चालू करती हैं. रोबो स्क्रिप्ट एक 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+ के लिए Robo स्क्रिप्ट सिंटैक्स, Android सिंटैक्स जैसा ही होता है. साथ ही, iOS+ के साथ काम करने वाली सुविधाएं, Android के साथ काम करने वाली सुविधाओं की तरह ही काम करती हैं.

iOS+ में ये कार्रवाइयां की जा सकती हैं:

  • दावा
  • क्लिक
  • क्लिक करके रखें
  • स्‍वाइप
  • सभी एलिमेंट को अनदेखा करें
  • इंतज़ार करें
  • स्क्रीनशॉट लेना
  • क्रॉल को खत्म करना

एलिमेंट डिस्क्रिप्टर में, पहचान करने वाले ये एट्रिब्यूट iOS+ में काम करते हैं:

  • कक्षा का नाम
  • पैरंट क्लास का नाम
  • कॉन्टेंट की जानकारी (और रेगुलर एक्सप्रेशन)
  • टेक्स्ट (और रेगुलर एक्सप्रेशन)

कॉन्टेक्स्ट डिस्क्रिप्टर में ट्रिगर करने की ये स्थितियां, iOS+ में काम करती हैं:

  • जांच में शामिल ऐप्लिकेशन दिखाया गया
  • एलिमेंट मौजूद है
  • रोबो स्क्रिप्ट के अलावा कोई दूसरी कार्रवाई की गई

बनावट

रोबो स्क्रिप्ट में कई एट्रिब्यूट होते हैं, जिनसे यह पता चलता है कि रोबो इसे कैसे लागू करता है. इनमें से ज़्यादातर एट्रिब्यूट की वैल्यू सबमिट करना ज़रूरी नहीं है. हालांकि, इनके लिए पहले से डिफ़ॉल्ट वैल्यू सेट होती हैं:

एट्रिब्यूट जानकारी
id यह एक पूर्णांक संख्या है, जो क्रॉल आउटपुट में इस रोबो स्क्रिप्ट को ट्रैक करने में मदद करती है. Robo में पहले से मौजूद Robo स्क्रिप्ट होती हैं, जिनमें उनके 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"
    }
  ]
}

यहां एक रोबो स्क्रिप्ट का उदाहरण दिया गया है, जो स्क्रिप्ट के अलावा की गई हर रोबो ऐक्शन के बाद पांच सेकंड तक इंतज़ार करती है:

{
  "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 कीवर्ड से शुरू होता है. इसके बाद, इसमें, लागू करने के लिए चुने गए विकल्पों को जेएसओएन के तौर पर दिखाया जाता है.

रोबो स्क्रिप्ट, इन विकल्पों के साथ काम करती हैं:

  • 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 तक पहुंच जाती है, तो उसे किसी क्रॉल में ट्रिगर नहीं किया जा सकता. अगर मौजूदा कॉन्टेक्स्ट से एक से ज़्यादा रोबो स्क्रिप्ट ट्रिगर हो सकती हैं, तो इन रोबो स्क्रिप्ट को प्राथमिकता दी जाती है:

  1. contextDescriptor एट्रिब्यूट मौजूद हो.
  2. सबसे ज़्यादा priority है (डिफ़ॉल्ट रूप से, सभी रोबो स्क्रिप्ट में 1 का एक ही priority होता है).
  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 जांचे जा रहे ऐप्लिकेशन को क्रॉल करने के बाद. post_crawl रोबो स्क्रिप्ट की अवधि 15 सेकंड से ज़्यादा नहीं होनी चाहिए. ऐसा न होने पर, क्रॉल टाइम आउट हो सकता है.
crawl मुख्य क्रॉल चरण, जब रोबो टेस्ट किए जा रहे ऐप्लिकेशन को क्रॉल करता है.
close_screen जब Robo किसी स्क्रीन से वापस जाने (बैकट्रैक) की कोशिश करता है, तो इस स्क्रीन पर मौजूद सभी संभावित कार्रवाइयों को एक्सप्लोर किया जाता है. डिफ़ॉल्ट रूप से, रोबोट, वापस जाने के लिए बटन दबाता है. हालांकि, कुछ मामलों में ऐसा नहीं करना चाहिए.

अगर रोबो स्क्रिप्ट के 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 शर्तें पूरी होने पर ट्रिगर होने वाली इस कार्रवाई को ट्रिगर करने वाला कॉन्टेक्स्ट/शर्त. इसका स्ट्रक्चर और सुविधाएं, रोबो स्क्रिप्ट के 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 और AdapterView के साथ काम करना

RecyclerView और AdapterView विजेट के चाइल्ड डाइनैमिक तौर पर लोड होते हैं और हो सकता है कि वे मौजूदा स्क्रीन से कई स्वाइप दूर दिखें. डिवाइस के अलग-अलग फ़ॉर्म फ़ैक्टर के लिए, स्क्रीन का साइज़ और बच्चे के डेटा तक पहुंचने के लिए ज़रूरी स्वाइप की संख्या अलग-अलग होती है. इसलिए, बच्चे के डेटा की जगह पर भरोसा करना ज़्यादा बेहतर होता है, क्योंकि यह सटीक होती है. इस बच्चे को स्क्रीन पर लाने के लिए, स्क्रीन पर स्वाइप करने की संख्या पर भरोसा करना और फिर स्क्रीन पर उसकी पोज़िशन का इस्तेमाल करना, कम असरदार तरीका है.

इसलिए, रोबो स्क्रिप्ट, RecyclerView के उन चाइल्ड की डेटा पोज़िशन को कैप्चर करती है जो रोबो स्क्रिप्ट ऐक्शन के टारगेट के तौर पर recyclerViewChildPosition के तौर पर मौजूद होते हैं. रोबो स्क्रिप्ट, adapterViewChildPosition के तौर पर, उन AdapterView चाइल्ड की डेटा पोज़िशन को भी कैप्चर करती है जो रोबो स्क्रिप्ट ऐक्शन के टारगेट हैं.

RecyclerView और AdapterView के चाइल्ड पर कार्रवाइयां, इन चरणों में की जाती हैं:

  1. रोबो टेस्ट यह पक्का करता है कि उसमें मौजूद RecyclerView या AdapterView पर पोज़िशनिंग ऐक्शन की मदद से, स्क्रीन पर उसी बच्चे को दिखाया जाए.

  2. रोबो टेस्ट, रिकॉर्ड की गई कार्रवाई को सीधे चाइल्ड एलिमेंट पर करता है, क्योंकि वह पहले से ही स्क्रीन पर दिख रहा होता है.

यहां 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 इसमें, दावा किए गए संदर्भ या स्थिति के बारे में बताया जाता है. इसका स्ट्रक्चर, रोबो स्क्रिप्ट के 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 के साथ एक साथ इस्तेमाल नहीं किया जा सकता.
matchIndex visionText का इस्तेमाल करके टारगेट एलिमेंट की पहचान करने पर, मैच होने वाले टारगेट एलिमेंट की जगह का इंडेक्स बताता है. अगर यह वैल्यू 0 है, तो रोबो स्क्रिप्ट ऐक्शन, मैच होने वाले पहले एलिमेंट को चुनता है. अगर यह वैल्यू 1 है, तो रोबो स्क्रिप्ट ऐक्शन, मैच होने वाले दूसरे एलिमेंट को चुनता है. इसके बाद, यह वैल्यू 1 से 0 तक बढ़ती जाती है. क्रम तय करने के लिए, बाईं से दाईं ओर और ऊपर से नीचे की ओर देखा जाता है. डिफ़ॉल्ट वैल्यू 0 है. इसमें, मैच होने वाली पहली वैल्यू चुनी जाती है.
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"
    }
  ]
}

यहां एक रोबो स्क्रिप्ट ऐक्शन का उदाहरण दिया गया है. यह ओसीआर का इस्तेमाल करके, स्क्रीन पर "Search" शब्द के दूसरी बार दिखने पर क्लिक करता है:

{
  "eventType": "VIEW_CLICKED",
  "visionText": "Search",
  "matchIndex": 1
}

यहां रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण दिया गया है, जो कॉन्टेंट के ब्यौरे "Emoji button" वाले सॉफ्ट कीबोर्ड एलिमेंट पर क्लिक करता है:

{
  "eventType": "SOFT_KEYBOARD_CLICK",
  "elementDescriptors": [
    {
      "contentDescription": "Emoji button"
    }
  ]
}

यहां एक रोबो स्क्रिप्ट ऐक्शन का उदाहरण दिया गया है, जो रैंडम सॉफ़्ट कीबोर्ड एलिमेंट पर ज़्यादा से ज़्यादा पांच बार क्लिक करता है:

{
  "eventType": "SOFT_KEYBOARD_RANDOM_CLICK",
  "maxNumberOfRuns": 5
}

सॉफ़्ट कीबोर्ड बंद करना

यहां दी गई टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:

विशेषता ब्यौरा
"eventType": "DISABLE_KEYBOARD" --

यहां एक रोबो स्क्रिप्ट ऐक्शन का उदाहरण दिया गया है, जो सॉफ़्ट कीबोर्ड को बंद करता है:

{
  "eventType": "DISABLE_KEYBOARD"
}

adb shell कमांड चलाना

यहां दी गई टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:

विशेषता ब्यौरा
"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" --

स्क्रीन पर मौजूद सभी एलिमेंट को अनदेखा करना

इस कार्रवाई से, Robo किसी भी स्क्रीन पर मौजूद उन सभी एलिमेंट को अनदेखा कर देता है जिनमें Robo स्क्रिप्ट मौजूद होती है.

यहां दी गई टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:

विशेषता ब्यौरा
"eventType": "ALL_ELEMENTS_IGNORED" --

यहां रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण दिया गया है, जिससे रोबो किसी स्क्रीन पर मौजूद सभी एलिमेंट को अनदेखा कर देता है:

{
  "eventType": "ALL_ELEMENTS_IGNORED"
}

किसी एलिमेंट को अनदेखा करना

इस कार्रवाई से, Robo उस एलिमेंट (या एलिमेंट) को अनदेखा कर देता है जो तय किए गए 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 के साथ एक साथ इस्तेमाल नहीं किया जा सकता.
matchIndex visionText का इस्तेमाल करके टारगेट एलिमेंट की पहचान करने पर, मैच होने वाले टारगेट एलिमेंट की जगह का इंडेक्स बताता है. अगर यह वैल्यू 0 है, तो रोबो स्क्रिप्ट ऐक्शन, मैच होने वाले पहले एलिमेंट को चुनता है. अगर यह वैल्यू 1 है, तो रोबो स्क्रिप्ट ऐक्शन, मैच होने वाले दूसरे एलिमेंट को चुनता है. इसके बाद, यह वैल्यू 1 से 0 तक बढ़ती जाती है. क्रम तय करने के लिए, बाईं से दाईं ओर और ऊपर से नीचे की ओर देखा जाता है. डिफ़ॉल्ट वैल्यू 0 है. इसमें, मैच होने वाली पहली वैल्यू चुनी जाती है.

इस एट्रिब्यूट का इस्तेमाल करना ज़रूरी नहीं है:

  • 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 Android यूज़र इंटरफ़ेस (यूआई) की हैरारकी का इस्तेमाल करके, टारगेट किए गए यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करता है.

यहां एक रोबो स्क्रिप्ट ऐक्शन का उदाहरण दिया गया है, जो रिसॉर्स आईडी "com.google.samples.apps.topeka:id/first_name" वाले यूज़र इंटरफ़ेस (यूआई) विजेट पर 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" Android Studio में रोबो स्क्रिप्ट रिकॉर्डर का इस्तेमाल, एमुलेटर एपीआई 28 पर वापस जाने के लिए किया जाता है.

यहां एक रोबो स्क्रिप्ट ऐक्शन का उदाहरण दिया गया है, जो 'वापस जाएं' बटन को दबाता है:

{
  "eventType": "PRESSED_BACK"
}

होम बटन दबाएं

यह कार्रवाई, डिवाइस पर KEYCODE_HOME इवेंट भेजती है.

यहां दी गई टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:

विशेषता ब्यौरा
"eventType": "GO_HOME" --

यहां होम बटन को दबाने वाली रोबो स्क्रिप्ट ऐक्शन का उदाहरण दिया गया है:

{
  "eventType": "GO_HOME"
}

किसी एलिमेंट को देखने के लिए स्क्रोल करना

इस कार्रवाई से, रोबो टेस्ट, तय किए गए elementDescriptors से मैच करने वाले यूज़र इंटरफ़ेस (यूआई) विजेट को तब तक आगे की ओर स्क्रोल करता है, जब तक कि तय किए गए childElementDescriptors से मैच करने वाला यूज़र इंटरफ़ेस (यूआई) विजेट स्क्रीन पर मौजूद न हो जाए या स्क्रोल किए गए विजेट को फिर से स्क्रोल न किया जा सके या ज़्यादा से ज़्यादा 50 स्क्रोल तक न पहुंच जाए.

यहां दी गई टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:

विशेषता ब्यौरा
"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 स्वाइप करने की दिशा बताता है:
  • Left
  • Right
  • Up
  • Down
  • Forward - टारगेट किए गए यूज़र इंटरफ़ेस विजेट के वर्टिकल या हॉरिज़ॉन्टल स्क्रोल करने की सुविधा के आधार पर, Down या Right.
  • Backward - टारगेट किए गए यूज़र इंटरफ़ेस (यूआई) विजेट के वर्टिकल या हॉरिज़ॉन्टल स्क्रोल करने की सुविधा के आधार पर, Up या Left.
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 यूज़र इंटरफ़ेस (यूआई) की हैरारकी का इस्तेमाल करके, टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करता है.

यहां रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण दिया गया है, जो कि seekbar के स्लाइडर को दाईं ओर ले जाता है:

{
  "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 यूज़र इंटरफ़ेस (यूआई) की हैरारकी का इस्तेमाल करके, इंतज़ार किए जा रहे यूआई विजेट की पहचान करता है.

यहां एक रोबो स्क्रिप्ट ऐक्शन का उदाहरण दिया गया है. यह स्क्रीन पर, संसाधन आईडी "my.app.package:id/confirmation_button" वाले यूज़र इंटरफ़ेस (यूआई) विजेट के दिखने के लिए 30 सेकंड तक इंतज़ार करता है:

{
  "eventType": "WAIT_FOR_ELEMENT",
  "delayTime": 30000,
  "elementDescriptors": [
    {
      "resourceId": "my.app.package:id/confirmation_button"
    }
  ]
}

अगले चरण