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

इस दस्तावेज़ में रोबो स्क्रिप्ट के बारे में रेफ़रंस के तौर पर जानकारी दी गई है. इसमें संरचना, क्षमताएं, इस्तेमाल, रिकॉर्डिंग, और कार्रवाइयों के बारे में जानकारी शामिल है. रोबो स्क्रिप्ट, ऐसी जांच हैं जो मोबाइल ऐप्लिकेशन के लिए, मैन्युअल क्वालिटी एश्योरेंस (क्यूए) टास्क को ऑटोमेट करती हैं. साथ ही, ये लगातार इंटिग्रेशन (सीआई) और लॉन्च से पहले की जाने वाली टेस्टिंग की रणनीतियों को चालू करती हैं. रोबो स्क्रिप्ट एक JSON फ़ाइल होती है, जिसमें यूज़र इंटरफ़ेस (यूआई) और अन्य कार्रवाइयों के क्रम के बारे में बताया जाता है.

रोबो स्क्रिप्ट बनाने के लिए, ये तरीके अपनाए जा सकते हैं:

  • रोबो स्क्रिप्ट रिकॉर्डिंग की सुविधा का इस्तेमाल करें. (सिर्फ़ Android के लिए)

  • रोबो स्क्रिप्ट को मैन्युअल तरीके से बनाएं. (Android और iOS+)

  • रोबो स्क्रिप्ट रिकॉर्ड करें और फिर उसमें मैन्युअल तरीके से बदलाव करें. (सिर्फ़ Android के लिए)

रोबो स्क्रिप्ट का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, रोबो स्क्रिप्ट चलाना लेख पढ़ें.

शुरुआती जानकारी

रोबो टेस्ट के लिए, रोबो स्क्रिप्ट के साथ-साथ अन्य इनपुट भी दिए जाते हैं. जैसे, जांचा जा रहा ऐप्लिकेशन का Android ऐप्लिकेशन पैकेज (APK).

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

[
  {
    "crawlStage": "crawl",
    "contextDescriptor": {
      "condition": "app_under_test_shown"
    },
    "actions": [
      {
        "eventType": "VIEW_TEXT_CHANGED",
        "replacementText": "user123",
        "elementDescriptors": [
          {
            "resourceId": "my.app.package:id/username"
          }
        ]
      },
      {
        "eventType": "VIEW_TEXT_CHANGED",
        "replacementText": "12345",
        "elementDescriptors": [
          {
            "resourceId": "my.app.package:id/password"
          }
        ]
      },
      {
        "eventType": "VIEW_CLICKED",
        "elementDescriptors": [
          {
            "resourceId": "my.app.package:id/login"
          }
        ]
      }
    ]
  }
]

अगर किसी फ़ाइल में एक ही रोबो स्क्रिप्ट है और उसमें ऊपर दिए गए उदाहरण की तरह डिफ़ॉल्ट app_under_test_shown ट्रिगर करने की शर्त है, तो फ़ाइल में रोबो स्क्रिप्ट को आसान फ़ॉर्मैट में बताया जा सकता है. जैसे, उसकी कार्रवाइयों का क्रम:

[
  {
    "eventType": "VIEW_TEXT_CHANGED",
    "replacementText": "user123",
    "elementDescriptors": [
      {
        "resourceId": "my.app.package:id/username"
      }
    ]
  },
  {
    "eventType": "VIEW_TEXT_CHANGED",
    "replacementText": "12345",
    "elementDescriptors": [
      {
        "resourceId": "my.app.package:id/password"
      }
    ]
  },
  {
    "eventType": "VIEW_CLICKED",
    "elementDescriptors": [
      {
        "resourceId": "my.app.package:id/login"
      }
    ]
  }
]

रोबो स्क्रिप्ट के लिए iOS+ सहायता

iOS+ (बीटा) के लिए Robo में, रोबो स्क्रिप्ट के लिए सीमित सहायता मिलती है. iOS+ के लिए रोबो स्क्रिप्ट सिंटैक्स, Android सिंटैक्स जैसा ही होता है. साथ ही, iOS+ की काम करने वाली सुविधाएं, Android की सुविधाओं की तरह ही काम करती हैं.

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

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

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

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

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

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

बनावट

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

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

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

  • executionMode - रोबो स्क्रिप्ट के चलने पर, एक्ज़ीक्यूशन के विकल्प लागू होते हैं:
    • strict - अगर इसे true पर सेट किया जाता है, तो रोबो स्क्रिप्ट कुछ हद तक मैच करने, मौजूदा कार्रवाई को स्किप करने, और निलंबन की सुविधा का इस्तेमाल नहीं करती है. इसका मतलब है कि रोबो स्क्रिप्ट को सामान्य इंस्ट्रूमेंटेशन टेस्ट के तौर पर चलाया जाता है और अगर इसकी कोई भी कार्रवाई पूरी नहीं की जा सकती, तो यह टेस्ट फ़ेल हो जाता है. डिफ़ॉल्ट रूप से, यह false होता है.
    • dismiss_popups - अगर इसे true पर सेट किया जाता है, तो रोबो टेस्ट strict मोड में भी, रोबो स्क्रिप्ट को चलाते समय किसी भी अनचाहे डायलॉग को खारिज कर देता है. strict मोड में न होने पर, इस विकल्प का कोई असर नहीं पड़ता. डिफ़ॉल्ट रूप से, यह false है.
    • notify - अगर रोबो स्क्रिप्ट को false पर सेट किया जाता है, तो यह सुविधा लागू होने की शुरुआत और आखिर में, स्क्रीन पर सूचनाएं नहीं दिखाती है. डिफ़ॉल्ट रूप से, यह true होता है.
  • postscript - रोबो स्क्रिप्ट पूरी होने के बाद लागू होने वाले, लागू करने के विकल्प:
    • terminate - अगर इसे true पर सेट किया जाता है, तो रोबो स्क्रिप्ट पूरी होने के बाद, रोबो टेस्ट क्रॉल करना बंद कर देता है. डिफ़ॉल्ट रूप से, यह false होता है.

यहां strict मोड में, स्क्रीन पर सूचनाएं दिखाए बिना चलाई गई रोबो स्क्रिप्ट का उदाहरण दिया गया है. यह स्क्रिप्ट तीन सेकंड के लिए रुकती है और इसके बाद क्रॉल करना बंद कर देती है:

"roboscript": {
  "executionMode": {
    "strict": true,
    "notify": false
  },
  "postscript": {
    "terminate": true
  }
}
[
  {
    "eventType": "DELAYED_MESSAGE_POSTED",
    "delayTime": 3000
  }
]

टेंप्लेट पैरामीटर

टेंप्लेट पैरामीटर, रोबो स्क्रिप्ट में मौजूद एक प्लेसहोल्डर होता है. जब रोबो टेस्ट, उस रोबो स्क्रिप्ट को लागू करने के लिए लोड करता है, तो उसे असल वैल्यू से बदल दिया जाता है. टेंप्लेट के पैरामीटर के आगे डबल अंडरस्कोर और उसके बाद प्रतिशत का चिह्न होता है. साथ ही, पैरामीटर के आखिर में प्रतिशत का चिह्न और उसके बाद डबल अंडरस्कोर होता है.

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

  • __%APP_PACKAGE_NAME%__ - ऐप्लिकेशन की जांच में लगे पैकेज का नाम.

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

[
  {
    "eventType": "ADB_SHELL_COMMAND",
    "command": "am force-stop __%APP_PACKAGE_NAME%__"
  }
]

टिप्पणियां

रोबो स्क्रिप्ट में टिप्पणी वाली लाइनें हो सकती हैं. ये लाइनें # या // से शुरू होती हैं.

कुछ टिप्पणियों वाली रोबो स्क्रिप्ट का एक उदाहरण नीचे दिया गया है:

# Confirm a user account.
[
  {
    // Click the DONE button.
    "eventType": "VIEW_CLICKED",
    "elementDescriptors": [
      {
        "resourceId": "com.google.samples.apps.topeka:id/done"
      }
    ]
  }
]

मिलने वाली अनुमतियां

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

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

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

मौजूदा कार्रवाई को स्किप करना अगर रोबो स्क्रिप्ट की मौजूदा कार्रवाई पूरी तरह या कुछ हद तक मैच नहीं हो पाती है, तो रोबो, रोबो स्क्रिप्ट के बाद होने वाली कार्रवाई से मैच करने की कोशिश करता है. अगर इसके बाद की कार्रवाई पूरी तरह या कुछ हद तक मैच होती है, तो रोबो टेस्ट मौजूदा रोबो स्क्रिप्ट ऐक्शन को छोड़कर आगे नहीं बढ़ता है.

यह तकनीक उन स्थितियों में काम करती है जब ऐप्लिकेशन के वर्शन के बीच उसका व्यवहार बदलता है या वह ठीक से काम नहीं करता. उदाहरण के लिए, जब किसी रोबोट स्क्रिप्ट को रिकॉर्ड करने के बजाय उसे फिर से चलाने पर, बीच-बीच में अलग-अलग स्क्रीन पर डायलॉग दिख सकता है.

निलंबित अगर रोबो स्क्रिप्ट की मौजूदा या बाद की कार्रवाइयों का पूरी तरह या कुछ हिस्सा मैच नहीं होता है, तो रोबो स्क्रिप्ट कुछ समय के लिए निलंबित कर दी जाती है. इसके बाद, रोबो टेस्ट अपनी दूसरी रणनीतियों का इस्तेमाल करके कोई कार्रवाई चुनता है. इस कार्रवाई के पूरा होने के बाद, रोबो टेस्ट, रोबो स्क्रिप्ट को फिर से चलाना शुरू कर देता है.

जब तक मौजूदा या बाद की रोबो स्क्रिप्ट की कार्रवाइयों को मैच नहीं किया जा सकता, तब तक रोबो स्क्रिप्ट किसी भी संख्या में कार्रवाइयों के लिए निलंबित रहती है. इसलिए, रोबो स्क्रिप्ट को रोबो टेस्ट के लिए प्रोलॉग के तौर पर इस्तेमाल करना ज़रूरी नहीं है. साथ ही, रोबो स्क्रिप्ट की कार्रवाइयों को स्टैंडर्ड रोबो टेस्ट की कार्रवाइयों के साथ जोड़ा जा सकता है. यह तकनीक उन स्थितियों में काम करती है जब ऐप्लिकेशन का व्यवहार ठीक से काम न कर रहा हो या ऐप्लिकेशन के वर्शन के बीच का अंतर इतना ज़्यादा हो कि रोबो टेस्ट को अपनी स्टैंडर्ड कार्रवाइयों के साथ "गैप को भरना" पड़े.

प्राथमिकताएं

अगर कोई रोबो स्क्रिप्ट अपने maxNumberOfRuns तक पहुंच जाती है, तो उसे किसी क्रॉल में ट्रिगर नहीं किया जा सकता. अगर मौजूदा कॉन्टेक्स्ट से एक से ज़्यादा रोबो स्क्रिप्ट ट्रिगर हो सकती हैं, तो इन रोबो स्क्रिप्ट को प्राथमिकता दी जाती है:

  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" --

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

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

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

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

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

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

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

अगले चरण