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

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

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

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

iOS+ में, एलिमेंट डिस्क्रिप्टर में मौजूद इन आइडेंटिफ़ाइंग एट्रिब्यूट का इस्तेमाल किया जा सकता है:

  • कक्षा का नाम
  • पूर्वज क्लास का नाम
  • कॉन्टेंट का ब्यौरा (और रेगुलर एक्सप्रेशन)
  • टेक्स्ट (और रेगुलर एक्सप्रेशन)

iOS+ में, कॉन्टेक्स्ट डिस्क्रिप्टर में ट्रिगर करने की ये शर्तें पूरी होने पर, सूचनाएं भेजी जा सकती हैं:

  • टेस्ट के लिए उपलब्ध ऐप्लिकेशन दिखाया गया
  • Element present
  • रोबो स्क्रिप्ट के अलावा किसी अन्य स्क्रिप्ट का इस्तेमाल करके कार्रवाई की गई

बनावट

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

एट्रिब्यूट ब्यौरा
id यह एक पूर्णांक होता है. इससे क्रॉल आउटपुट में इस रोबो स्क्रिप्ट को ट्रैक करने में मदद मिलती है. Robo में पहले से ही Robo स्क्रिप्ट मौजूद होती हैं. इनमें अपने id होते हैं. हालांकि, अलग-अलग रोबो स्क्रिप्ट में एक ही id होने से उनके व्यवहार पर कोई असर नहीं पड़ता. हालांकि, क्रॉल आउटपुट में इन रोबो स्क्रिप्ट से की गई कार्रवाइयों के बीच अंतर करना मुश्किल हो सकता है. हमारा सुझाव है कि आप अपनी रोबो स्क्रिप्ट के लिए, id का यूनीक 1000 या इससे ज़्यादा का वर्शन असाइन करें, ताकि कोई विवाद न हो.
description id से मिलती-जुलती, लेकिन ज़्यादा जानकारी देने वाली.
crawlStage क्रॉल रोबो का वह चरण जिस पर यह रोबो स्क्रिप्ट लागू होती है. डिफ़ॉल्ट रूप से, यह क्रॉल करने का मुख्य चरण होता है.
priority अन्य रोबो स्क्रिप्ट की तुलना में, इस रोबो स्क्रिप्ट की प्राथमिकता. डिफ़ॉल्ट रूप से, सभी रोबो स्क्रिप्ट की प्राथमिकता 1 होती है.
maxNumberOfRuns इससे यह तय होता है कि क्रॉलिंग के दौरान, रोबो इस रोबो स्क्रिप्ट को कितनी बार चला सकता है. डिफ़ॉल्ट रूप से, रोबो एक रोबो स्क्रिप्ट को एक बार ही चला सकता है.
contextDescriptor इस Robo स्क्रिप्ट को ट्रिगर करने वाले कॉन्टेक्स्ट या शर्त के बारे में बताता है. अगर इसे शामिल नहीं किया जाता है, तो इस रोबो स्क्रिप्ट को ट्रिगर करने की शर्त हमेशा पूरी मानी जाती है. दूसरे शब्दों में, रोबो स्क्रिप्ट बिना शर्त के होती है.
actions इस रोबो स्क्रिप्ट की सभी कार्रवाइयां.

एक फ़ाइल में, एक या उससे ज़्यादा रोबो स्क्रिप्ट का कलेक्शन होता है.

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

[
  {
    "id": 1000,
    "description": "My first Robo script",
    "actions": [
      {
        "eventType": "DISABLE_KEYBOARD"
      }
    ]
  },
  {
    "id": 1001,
    "description": "My second Robo script",
    "actions": [
      {
        "eventType": "PRESSED_BACK"
      }
    ]
  }
]

कॉन्टेक्स्ट के बारे में जानकारी देने वाला एलिमेंट

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

एट्रिब्यूट ब्यौरा
"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" : "WAIT",
      "delayTime" : 5000
    }]
}

कार्रवाइयां

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

एट्रिब्यूट ब्यौरा
eventType यह कार्रवाई का टाइप बताता है. जैसे, क्लिक, टेक्स्ट में बदलाव वगैरह. हर कार्रवाई के लिए ज़रूरी है.
elementDescriptors ऐसे डिस्क्रिप्टर जिनसे यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान होती है. यह उन सभी कार्रवाइयों के लिए ज़रूरी है जिनमें टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट होता है. जैसे, किसी बटन पर क्लिक करना.
optional अगर इसे true पर सेट किया जाता है, तो यह कार्रवाई तब नहीं की जाती, जब इसे पूरा नहीं किया जा सकता. उदाहरण के लिए, अगर स्क्रीन पर टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट नहीं मिलता है, तो इस कार्रवाई को छोड़ दिया जाता है. हालांकि, इससे रोबो स्क्रिप्ट पर कोई असर नहीं पड़ता. डिफ़ॉल्ट रूप से, वैल्यू false होती है.
replacementText टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट में डालने के लिए टेक्स्ट. टेक्स्ट में बदलाव करने से जुड़ी कार्रवाइयों के लिए ज़रूरी है.
swipeDirection इससे स्वाइप की दिशा के बारे में पता चलता है. स्वाइप करने पर होने वाली कार्रवाइयों के लिए ज़रूरी है.
delayTime इससे यह तय किया जाता है कि कितने मिलीसेकंड तक इंतज़ार करना है. इंतज़ार करने की कार्रवाइयों के लिए ज़रूरी है.
pointTapXCoordinate और pointTapYCoordinate टैप किए गए पॉइंट के पिक्सल X और Y कोऑर्डिनेट. pointTapXPercent और pointTapYPercent के साथ म्यूचुअली एक्सक्लूसिव. पॉइंट टैप करने की कार्रवाइयों के लिए ज़रूरी है.
pointTapXPercent और pointTapYPercent टैप किए गए पॉइंट के X और Y कोऑर्डिनेट का प्रतिशत. pointTapXCoordinate और pointTapYCoordinate के साथ म्यूचुअली एक्सक्लूसिव. पॉइंट टैप करने की कार्रवाइयों के लिए ज़रूरी है.

यहां टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट के बिना दो कार्रवाइयों वाली रोबो स्क्रिप्ट का उदाहरण दिया गया है. इसका मतलब है कि ये कार्रवाइयां किसी खास यूज़र इंटरफ़ेस (यूआई) विजेट पर काम नहीं करती हैं:

[
  {
    "eventType": "WAIT",
    "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"
      }
    ]
  }
]

प्रोग्राम चलाने के विकल्प

Robo स्क्रिप्ट में कार्रवाइयों की सूची से पहले, JSON ऑब्जेक्ट को प्रीफ़िक्स के तौर पर इस्तेमाल किया जा सकता है. यह ऑब्जेक्ट, उस Robo स्क्रिप्ट के लिए एक्ज़ीक्यूशन के विकल्प तय करता है. यह कॉन्फ़िगरेशन हेडर, 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": "WAIT",
    "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"
      }
    ]
  }
]

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

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

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

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

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

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

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

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

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

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

  1. इसमें contextDescriptor एट्रिब्यूट मौजूद है.
  2. इसमें सबसे ज़्यादा priority होता है. डिफ़ॉल्ट रूप से, सभी रोबो स्क्रिप्ट का priority, 1 के priority के बराबर होता है.
  3. अगर रोबो स्क्रिप्ट की प्राथमिकताएं एक जैसी हैं, तो यह रोबो स्क्रिप्ट की सूची में सबसे पहले दिखेगा.

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

[
  {
    "id": 1000,
    "description": "Robo script 1",
    "contextDescriptor": {
      "condition": "app_under_test_shown"
    },
    "actions": [
      {
        "eventType": "WAIT",
        "delayTime": 3000
      }
    ]
  },
  {
    "id": 1001,
    "description": "Robo script 2",
    "priority": "2",
    "contextDescriptor": {
      "condition": "app_under_test_shown"
    },
    "actions": [
      {
        "eventType": "WAIT",
        "delayTime": 3000
      }
    ]
  },
  {
    "id": 1002,
    "description": "Robo script 3",
    "contextDescriptor": {
      "condition": "app_under_test_shown"
    },
    "actions": [
      {
        "eventType": "WAIT",
        "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 Robo के लॉन्च होने और टेस्ट किए जा रहे ऐप्लिकेशन को क्रॉल करने से पहले.
post_crawl जब रोबो, टेस्ट किए जा रहे ऐप्लिकेशन को क्रॉल कर लेता है. post_crawl रोबो स्क्रिप्ट की अवधि 15 सेकंड से ज़्यादा नहीं होनी चाहिए. ऐसा न होने पर, क्रॉलिंग टाइम आउट हो सकती है.
crawl क्रॉल करने का मुख्य चरण, जब रोबो, टेस्ट किए जा रहे ऐप्लिकेशन को क्रॉल करता है.
close_screen जब Robo किसी स्क्रीन पर की जा सकने वाली सभी कार्रवाइयों को एक्सप्लोर कर लेता है, तब वह वापस जाने की कोशिश करता है. डिफ़ॉल्ट रूप से, 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"
        }
      ]
    }
  ]
}

शर्तें पूरी होने पर ट्रिगर होने वाली कार्रवाइयां

रोबो स्क्रिप्ट में, शर्तों के हिसाब से कार्रवाइयां शामिल की जा सकती हैं. शर्तें पूरी होने पर ट्रिगर होने वाली कार्रवाइयों में तीन अतिरिक्त एट्रिब्यूट होते हैं. इनसे यह पता चलता है कि Robo उन्हें कैसे पूरा करता है:

एट्रिब्यूट ब्यौरा
priority इस शर्त के हिसाब से होने वाली कार्रवाई की प्राथमिकता, Robo स्क्रिप्ट में मौजूद अन्य शर्तों के हिसाब से होने वाली कार्रवाइयों की तुलना में. डिफ़ॉल्ट रूप से, सभी शर्तों के साथ की जाने वाली कार्रवाइयों की प्राथमिकता 1 होती है.
maxNumberOfRuns यह शर्त पूरी होने पर, Robo स्क्रिप्ट को एक बार चलाने के दौरान यह कार्रवाई कितनी बार की जा सकती है. डिफ़ॉल्ट रूप से, सभी शर्तों के साथ की जाने वाली कार्रवाइयों को, Robo स्क्रिप्ट के एक बार चलने पर ज़्यादा से ज़्यादा एक बार किया जा सकता है.
contextDescriptor वह कॉन्टेक्स्ट/शर्त जो इस कार्रवाई को ट्रिगर करती है. इसका स्ट्रक्चर रोबो स्क्रिप्ट के contextDescriptor जैसा ही होता है और इसमें मिलती-जुलती सुविधाएं होती हैं

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

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

{
  "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": "WAIT",
      "delayTime": 10000
    },
    {
      "description": "Screen on",
      "eventType": "ADB_SHELL_COMMAND",
      "command": "input keyevent 82"
    },
    {
      "description": "Wait for 10 seconds",
      "eventType": "WAIT",
      "delayTime": 10000
    }
}

कार्रवाइयों को अनदेखा करना

रोबो स्क्रिप्ट में, रोबो को किसी खास यूज़र इंटरफ़ेस (यूआई) विजेट या किसी स्क्रीन पर मौजूद सभी यूआई विजेट को अनदेखा करने के निर्देश दिए जा सकते हैं. इन निर्देशों में, eventType ELEMENT_IGNORED और ALL_ELEMENTS_IGNORED के साथ "कार्रवाइयों" को अनदेखा करने के तौर पर दिखाया गया है.

जब भी किसी स्क्रीन से, रोबो स्क्रिप्ट के contextDescriptor एट्रिब्यूट में मौजूद इग्नोर की जाने वाली कार्रवाइयों का मिलान होता है, तब रोबो, इग्नोर की जाने वाली कार्रवाइयों के टारगेट किए गए किसी भी यूज़र इंटरफ़ेस (यूआई) विजेट के साथ इंटरैक्ट नहीं करता. हालांकि, अगर कोई अन्य रोबो स्क्रिप्ट कार्रवाई, रोबो को इग्नोर किए गए किसी यूज़र इंटरफ़ेस (यूआई) विजेट पर कार्रवाई करने के लिए कहती है, तो रोबो ऐसा कर सकता है.

रोबो स्क्रिप्ट में, अनदेखा करने, शर्त के साथ, और बिना शर्त वाली कार्रवाइयां शामिल हो सकती हैं. अन्य Robo स्क्रिप्ट कार्रवाइयों के उलट, अनदेखा करने वाली कार्रवाइयां तब तक लागू होती हैं, जब तक कि Robo स्क्रिप्ट के contextDescriptor एट्रिब्यूट की वैल्यू, Robo क्रॉल के दौरान किसी स्क्रीन से मैच करती है. भले ही, priority और maxNumberOfRuns एट्रिब्यूट की वैल्यू कुछ भी हो.

यहां दो रोबो स्क्रिप्ट वाली फ़ाइल का उदाहरण दिया गया है. पहली Robo script, Robo को उस स्क्रीन पर मौजूद सभी यूज़र इंटरफ़ेस (यूआई) विजेट को अनदेखा करने के लिए कहती है जिस पर "my.app.package:id/ignored_screen" रिसॉर्स आईडी वाला यूज़र इंटरफ़ेस (यूआई) विजेट मौजूद है. दूसरी रोबो स्क्रिप्ट, रोबो को उन यूज़र इंटरफ़ेस (यूआई) विजेट को अनदेखा करने के लिए कहती है जिनके संसाधन आईडी, ".*:id/done" Java रेगुलर एक्सप्रेशन से मेल खाते हैं. ऐसा उस स्क्रीन पर किया जाता है जिसमें "my.app.package:id/main_screen" संसाधन आईडी वाला यूज़र इंटरफ़ेस (यूआई) विजेट होता है:

[
  {
    "id": 1000,
    "contextDescriptor": {
      "condition": "element_present",
      "elementDescriptors": [
        {
          "resourceId": "my.app.package:id/ignored_screen"
        }
      ]
    },
    "actions": [
      {
        "eventType": "ALL_ELEMENTS_IGNORED"
      }
    ]
  },
  {
    "id": 1001,
    "contextDescriptor": {
      "condition": "element_present",
      "elementDescriptors": [
        {
          "resourceId": "my.app.package:id/main_screen"
        }
      ]
    },
    "actions": [
      {
        "eventType": "ELEMENT_IGNORED",
        "elementDescriptors": [
          {
            "resourceIdRegex": ".*:id/done"
          }
        ]
      }
    ]
  }
]

RecyclerView और AdapterView के साथ काम करता है

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

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

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

  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 में Robo स्क्रिप्ट बनाई जा सकती है. यह स्क्रिप्ट, JSON फ़ाइल के तौर पर सेव होती है. इसके बाद, JSON फ़ाइल को Firebase Test Lab पर अपलोड किया जा सकता है. साथ ही, ऐप्लिकेशन के साथ टेस्ट चलाया जा सकता है.

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

Android Studio में रोबो स्क्रिप्ट की JSON फ़ाइल बनाने के लिए, Android Studio में Test Lab का इस्तेमाल करके रोबो स्क्रिप्ट रिकॉर्ड करना में दिया गया तरीका अपनाएं.

रोबो स्क्रिप्ट की कार्रवाइयां

यहां दिया गया सामान्य वैकल्पिक एट्रिब्यूट, सभी कार्रवाइयों पर लागू होता है:

  • description - इससे रोबो टेस्ट के आउटपुट में, रोबो स्क्रिप्ट की इस कार्रवाई को ट्रैक करने में मदद मिलती है.

दावा

अगर पुष्टि की गई शर्त सही है, तो रोबो स्क्रिप्ट अगले ऐक्शन पर जाती है. यह कोई और पुष्टि भी हो सकती है. ऐसा न करने पर, दावे के पूरा न होने की वजह से रोबो स्क्रिप्ट का एक्ज़ीक्यूशन रुक जाता है.

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

एट्रिब्यूट ब्यौरा
"eventType": "ASSERTION" --
contextDescriptor इसमें पुष्टि किए गए कॉन्टेक्स्ट या शर्त के बारे में बताया जाता है. इसका स्ट्रक्चर Robo स्क्रिप्ट के contextDescriptor जैसा ही होता है और इसमें मिलती-जुलती सुविधाएं होती हैं.

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

{
  "eventType": "ASSERTION",
  "contextDescriptor": {
    "condition": "app_under_test_shown"
  }
}

यहां Robo स्क्रिप्ट के दावे का एक उदाहरण दिया गया है. इससे यह पता चलता है कि स्क्रीन पर, रिसॉर्स आईडी "com.google.samples.apps.topeka:id/done" वाला यूज़र इंटरफ़ेस (यूआई) विजेट मौजूद है या नहीं:

{
  "eventType": "ASSERTION",
  "contextDescriptor": {
    "condition": "element_present",
    "elementDescriptors": [
      {
        "resourceId": "com.google.samples.apps.topeka:id/done"
      }
    ]
  }
}

यहाँ Robo स्क्रिप्ट के दावे का एक उदाहरण दिया गया है. इसमें यह जाँच की जाती है कि ओसीआर का इस्तेमाल करके, स्क्रीन पर "Settings" का पता नहीं लगाया गया है:

{
  "eventType": "ASSERTION",
  "contextDescriptor": {
    "condition": "element_present",
    "negateCondition": true,
    "visionText": "Settings"
  }
}

क्लिक

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

एट्रिब्यूट ब्यौरा
eventType इससे Robo स्क्रिप्ट ऐक्शन का टाइप पता चलता है.
"eventType": "VIEW_CLICKED" यह कुकी, टेस्ट किए जा रहे ऐप्लिकेशन के टारगेट एलिमेंट पर क्लिक करती है.
"eventType": "SOFT_KEYBOARD_CLICK" सॉफ़्ट कीबोर्ड के टारगेट एलिमेंट पर क्लिक करता है.
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK" सॉफ्ट कीबोर्ड के रैंडम एलिमेंट पर maxNumberOfRuns बार तक क्लिक करता है.
"eventType": "LIST_ITEM_CLICKED" इस कुकी का इस्तेमाल Android Studio में Robo script recorder करता है. इसका इस्तेमाल सूची में मौजूद आइटम पर क्लिक करने के लिए किया जाता है.
elementDescriptors यह कुकी, Android यूज़र इंटरफ़ेस (यूआई) के क्रम का इस्तेमाल करके, क्लिक किए गए यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करती है. visionText के साथ म्यूचुअली एक्सक्लूसिव है.
visionText यह कुकी, ओसीआर का इस्तेमाल करके क्लिक किए गए एलिमेंट की पहचान करती है. elementDescriptors के साथ इस्तेमाल नहीं किया जा सकता.
matchIndex visionText का इस्तेमाल करके टारगेट एलिमेंट की पहचान करने पर, यह एट्रिब्यूट मैच किए गए टारगेट एलिमेंट के इंडेक्स के बारे में बताता है. अगर यह 0 है, तो रोबो स्क्रिप्ट ऐक्शन, मैच होने वाले पहले एलिमेंट को चुनता है. अगर यह 1 है, तो रोबो स्क्रिप्ट ऐक्शन, मैच होने वाले दूसरे एलिमेंट को चुनता है. इसी तरह, आगे भी यह प्रोसेस जारी रहती है. इनकी क्रम से लगाने की प्रोसेस, बाएं से दाएं और ऊपर से नीचे की ओर होती है. डिफ़ॉल्ट वैल्यू 0 होती है. इसका मतलब है कि पहले मैच को चुना जाता है.
maxNumberOfRuns इससे यह तय होता है कि जब eventType SOFT_KEYBOARD_RANDOM_CLICK हो, तब सॉफ़्ट कीबोर्ड के किसी रैंडम एलिमेंट पर कितनी बार क्लिक करना है. डिफ़ॉल्ट वैल्यू 1 है.

यहां, Robo स्क्रिप्ट की ऐसी कार्रवाई का उदाहरण दिया गया है जिसमें "com.google.samples.apps.topeka:id/done" रिसॉर्स आईडी वाले बटन पर क्लिक किया जाता है:

{
  "eventType": "VIEW_CLICKED",
  "elementDescriptors": [
    {
      "resourceId": "com.google.samples.apps.topeka:id/done"
    }
  ]
}

यहां Robo स्क्रिप्ट की ऐसी कार्रवाई का उदाहरण दिया गया है जिसमें ओसीआर का इस्तेमाल करके स्क्रीन पर पहचाने गए "Search" शब्द के दूसरे उदाहरण पर क्लिक किया जाता है:

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

यहां Robo स्क्रिप्ट की ऐसी कार्रवाई का उदाहरण दिया गया है जिसमें कॉन्टेंट के ब्यौरे "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 डीबग ब्रिज (एडीबी) की वह शेल कमांड जिसे चलाना है.

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

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

यहाँ रोबो स्क्रिप्ट की ऐसी कार्रवाई का उदाहरण दिया गया है जिससे टेस्ट किए जा रहे ऐप्लिकेशन का उपयोगकर्ता का डेटा मिट जाता है:

{
  "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 पर सेट किया जाता है, तो Robo, नज़रअंदाज़ किए गए यूज़र इंटरफ़ेस(यूआई) विजेट के सभी डिसेंडेंट को भी नज़रअंदाज़ करता है. डिफ़ॉल्ट रूप से, यह false पर सेट होता है.

यहां रोबो स्क्रिप्ट की कार्रवाई का एक उदाहरण दिया गया है. इससे रोबो उन सभी एलिमेंट को अनदेखा कर देता है जिनकी कॉन्टेंट की जानकारी "Avatar" से शुरू होती है:

{
  "eventType": "ELEMENT_IGNORED",
  "elementDescriptors": [
    {
      "contentDescriptionRegex": "Avatar.*"
    }
  ]
}

इनपुट टेक्स्ट

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

एट्रिब्यूट ब्यौरा
eventType इससे Robo स्क्रिप्ट ऐक्शन का टाइप पता चलता है.
"eventType": "VIEW_TEXT_CHANGED" यह कमांड, दिए गए टेक्स्ट को टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट में डालती है.
"eventType": "ENTER_TEXT" दिए गए टेक्स्ट को टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट में डालता है. इसके बाद, इस यूआई विजेट को KEYCODE_ENTER इवेंट भेजता है.
elementDescriptors यह Android यूज़र इंटरफ़ेस (यूआई) के क्रम का इस्तेमाल करके, टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करता है.
replacementText टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट में डालने के लिए टेक्स्ट.

यहां Robo स्क्रिप्ट की कार्रवाई का एक उदाहरण दिया गया है. इसमें "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 है, तो रोबो स्क्रिप्ट ऐक्शन, मैच होने वाले दूसरे एलिमेंट को चुनता है. इसी तरह, आगे भी यह प्रोसेस जारी रहती है. इनकी क्रम से लगाने की प्रोसेस, बाएं से दाएं और ऊपर से नीचे की ओर होती है. डिफ़ॉल्ट वैल्यू 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 पर सेट होता है.

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

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

{
  "eventType": "PRESSED_EDITOR_ACTION",
  "elementDescriptors": [
    {
      "resourceId": "com.google.samples.apps.topeka:id/first_name"
    }
  ]
}

वापस जाएं

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

एट्रिब्यूट ब्यौरा
eventType इससे Robo स्क्रिप्ट ऐक्शन का टाइप पता चलता है.
"eventType": "PRESSED_BACK" यह डिवाइस को KEYCODE_BACK इवेंट भेजता है.
"eventType": "PRESSED_BACK_EMULATOR_28" इस कुकी का इस्तेमाल Android Studio में रोबो स्क्रिप्ट रिकॉर्डर करता है. इसका इस्तेमाल, API 28 वाले एम्युलेटर पर वापस जाने के लिए किया जाता है.

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

{
  "eventType": "PRESSED_BACK"
}

होम बटन दबाएं

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

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

एट्रिब्यूट ब्यौरा
"eventType": "GO_HOME" --

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

{
  "eventType": "GO_HOME"
}

किसी एलिमेंट को व्यू में स्क्रोल करना

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

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

एट्रिब्यूट ब्यौरा
"eventType": "ELEMENT_SCROLL_INTO_VIEW" --
elementDescriptors इससे Android यूज़र इंटरफ़ेस (यूआई) के क्रम का इस्तेमाल करके, स्क्रोल किए गए यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान की जाती है.
childElementDescriptors यह कुकी, Android यूज़र इंटरफ़ेस (यूआई) के क्रम का इस्तेमाल करके, उस यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करती है जिस पर स्क्रोल करना है.

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

यहां Robo स्क्रिप्ट ऐक्शन का एक उदाहरण दिया गया है. इसमें, "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": "WAIT" (or "DELAYED_MESSAGE_POSTED") --
delayTime इससे यह तय किया जाता है कि कितने मिलीसेकंड तक इंतज़ार करना है.

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

{
  "eventType": "WAIT",
  "delayTime": 3000
}

किसी एलिमेंट के दिखने का इंतज़ार करना

इस कार्रवाई से, Robo टेस्ट को स्क्रीन पर किसी एलिमेंट के दिखने का इंतज़ार करने के लिए कहा जाता है. यह इंतज़ार, तय किए गए टाइम आउट तक किया जाता है.

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

एट्रिब्यूट ब्यौरा
"eventType": "WAIT_FOR_ELEMENT" --
delayTime यह विकल्प, इंतज़ार के टाइम आउट को मिलीसेकंड में तय करता है.
elementDescriptors यह कुकी, Android यूज़र इंटरफ़ेस (यूआई) के क्रम का इस्तेमाल करके, इंतज़ार किए जा रहे यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करती है.

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

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

अगले चरण