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

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

इन तरीकों से रोबो स्क्रिप्ट बनाई जा सकती है:

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

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

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

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

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

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

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

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

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

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

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

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

बनावट

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

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

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

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

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

कॉन्टेक्स्ट डिस्क्रिप्टर

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

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

कार्रवाई करने के विकल्प

आपके पास रोबो स्क्रिप्ट में कार्रवाइयों की सूची से पहले, JSON ऑब्जेक्ट को प्रीफ़िक्स के तौर पर इस्तेमाल करने का विकल्प होता है. यह 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": "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 स्क्रिप्ट की सभी कार्रवाइयां पूरी होने तक (या कम से कम कोशिश करने तक), Robo स्क्रिप्ट चालू रहती है. रोबो टेस्ट, कार्रवाई करने के लिए कोई विकल्प चुनते समय, रोबो स्क्रिप्ट की कार्रवाई से मेल खाने वाला विकल्प चुनने की कोशिश करता है. रोबो स्क्रिप्ट, इन तकनीकों का इस्तेमाल करके ज़्यादा भरोसेमंद बनती है:

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

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

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

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

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

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

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

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

  1. इसमें contextDescriptor एट्रिब्यूट मौजूद है.
  2. इसमें सबसे ज़्यादा priority है. डिफ़ॉल्ट रूप से, सभी रोबो स्क्रिप्ट का priority, 1 के बराबर होता है.
  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" को आखिरी रोबो स्क्रिप्ट के तौर पर इस्तेमाल किया गया था.

बार-बार रन करना

डिफ़ॉल्ट रूप से, Robo किसी क्रॉल के दौरान ज़्यादा से ज़्यादा एक बार Robo स्क्रिप्ट को ट्रिगर करता है. maxNumberOfRuns एट्रिब्यूट का इस्तेमाल करके, इसे अडजस्ट किया जा सकता है.

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

{
  "id": 1000,
  "maxNumberOfRuns": 10,
  "contextDescriptor": {
    "condition": "app_under_test_shown"
  },
  "actions": [
    {
      "eventType": "GO_HOME"
    }
  ]
}

क्रॉल स्टेज

रोबो स्क्रिप्ट, रोबो क्रॉल के अलग-अलग चरणों में लागू होती हैं:

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

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

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

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

यहां 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 डीबग ब्रिज (adb) की वह शेल कमांड जिसे चलाना है.

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

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

{
  "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 वाले एम्युलेटर पर वापस जाने के लिए किया जाता है.

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

{
  "eventType": "PRESSED_BACK"
}

होम बटन दबाएं

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

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

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

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

{
  "eventType": "GO_HOME"
}

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

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

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

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

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

{
  "eventType": "VIEW_SWIPED",
  "swipeDirection": "Up",
  "elementDescriptors": [
    {
      "resourceId": "my.app.package:id/custom_content"
    }
  ]
}

स्क्रीनशॉट लो

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

एट्रिब्यूट ब्यौरा
"eventType": "TAKE_SCREENSHOT" --
screenshotName इससे स्क्रीनशॉट की फ़ाइल का नाम तय किया जाता है.

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

{
  "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 इससे यह तय होता है कि कितनी देर (मिलीसेकंड में) इंतज़ार करना है.

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

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

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

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

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

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

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

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

अगले चरण