इस दस्तावेज़ में, रोबो स्क्रिप्ट के बारे में जानकारी दी गई है. इसमें स्क्रिप्ट का स्ट्रक्चर, उसकी क्षमताएं, इस्तेमाल करने का तरीका, रिकॉर्डिंग, और कार्रवाइयां शामिल हैं. रोबो स्क्रिप्ट, मोबाइल ऐप्लिकेशन के लिए मैन्युअल क्वालिटी अश्योरेंस (क्यूए) के टास्क को अपने-आप पूरा करने वाले टेस्ट होते हैं. साथ ही, ये लगातार इंटिग्रेशन (सीआई) और लॉन्च से पहले टेस्टिंग की रणनीतियों को चालू करते हैं. रोबो स्क्रिप्ट एक JSON फ़ाइल होती है. इसमें यूज़र इंटरफ़ेस (यूआई) और अन्य कार्रवाइयों के क्रम के बारे में बताया जाता है.
इन तरीकों से रोबो स्क्रिप्ट बनाई जा सकती है:
- रोबो स्क्रिप्ट रिकॉर्डिंग की सुविधा का इस्तेमाल करें. (सिर्फ़ Android के लिए) 
- Robo स्क्रिप्ट को मैन्युअल तरीके से बनाएं. (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+ के लिए Robo स्क्रिप्ट का सिंटैक्स, Android के सिंटैक्स जैसा ही होता है. साथ ही, iOS+ की सुविधाएं, Android की सुविधाओं की तरह ही काम करती हैं.
iOS+ में ये कार्रवाइयाँ की जा सकती हैं:
- दावा
- क्लिक
- क्लिक करके रखें
- स्वाइप करें
- सभी एलिमेंट को अनदेखा करें
- इंतज़ार करें
- स्क्रीनशॉट लेना
- क्रॉल करना बंद करें
iOS+ में, एलिमेंट डिस्क्रिप्टर में मौजूद इन आइडेंटिफ़ाइंग एट्रिब्यूट का इस्तेमाल किया जा सकता है:
- कक्षा का नाम
- पूर्वज क्लास का नाम
- कॉन्टेंट का ब्यौरा (और रेगुलर एक्सप्रेशन)
- टेक्स्ट (और रेगुलर एक्सप्रेशन)
iOS+ में, कॉन्टेक्स्ट डिस्क्रिप्टर में ट्रिगर करने की ये शर्तें पूरी की जा सकती हैं:
- जांच के लिए उपलब्ध ऐप्लिकेशन दिखाया गया है
- Element present
- रोबो स्क्रिप्ट के अलावा किसी और स्क्रिप्ट की मदद से की गई कार्रवाई
बनावट
रोबो स्क्रिप्ट में कई एट्रिब्यूट होते हैं. इनसे पता चलता है कि रोबो स्क्रिप्ट को कैसे एक्ज़ीक्यूट करता है. इनमें से ज़्यादातर एट्रिब्यूट वैकल्पिक हैं. इनकी डिफ़ॉल्ट वैल्यू पहले से तय होती हैं:
| एट्रिब्यूट | ब्यौरा | 
| 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 ऑब्जेक्ट को जोड़ने का विकल्प होता है. यह ऑब्जेक्ट, उस रोबो स्क्रिप्ट के लिए एक्ज़ीक्यूशन के विकल्प तय करता है. यह कॉन्फ़िगरेशन हेडर, roboscript कीवर्ड से शुरू होता है. इसके बाद, एक्ज़ीक्यूशन के विकल्पों को JSON के कोड में दिखाया जाता है.
रोबो स्क्रिप्ट, इन विकल्पों के साथ काम करती हैं:
- executionMode- रोबो स्क्रिप्ट के चलने पर लागू होने वाले एक्ज़ीक्यूशन के विकल्प:- strict- अगर इसे- trueपर सेट किया जाता है, तो रोबो स्क्रिप्ट पूरी तरह से मैच न होने वाले एलिमेंट को ढूंढने, मौजूदा कार्रवाई को छोड़ने, और निलंबित करने की सुविधा का इस्तेमाल नहीं करती है. इसका मतलब है कि Robo स्क्रिप्ट को सामान्य इंस्ट्रुमेंटेशन टेस्ट के तौर पर एक्ज़ीक्यूट किया जाता है. अगर इसकी कोई भी कार्रवाई पूरी नहीं होती है, तो यह टेस्ट फ़ेल हो जाता है. डिफ़ॉल्ट रूप से, यह- 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 स्क्रिप्ट अपने maxNumberOfRuns तक पहुंच जाती है, तो उसे किसी क्रॉल में ट्रिगर नहीं किया जा सकता. अगर मौजूदा कॉन्टेक्स्ट से एक से ज़्यादा रोबो स्क्रिप्ट ट्रिगर की जा सकती हैं, तो प्राथमिकता इस क्रम में दी जाती है:
- इसमें contextDescriptorएट्रिब्यूट मौजूद है.
- इसमें सबसे ज़्यादा priorityहोता है (डिफ़ॉल्ट रूप से, सभी रोबो स्क्रिप्ट में1का एक जैसाpriorityहोता है).
- अगर रोबो स्क्रिप्ट की प्राथमिकताएं एक जैसी हैं, तो यह रोबो स्क्रिप्ट की सूची में सबसे ऊपर दिखता है.
यहां एक ऐसी फ़ाइल का उदाहरण दिया गया है जिसमें तीन रोबो स्क्रिप्ट हैं. ये तीनों स्क्रिप्ट एक ही कार्रवाई करती हैं और एक ही शर्त के पूरा होने पर ट्रिगर होती हैं. शर्त यह है कि जांच किया जा रहा ऐप्लिकेशन फ़ोरग्राउंड में हो:
[
  {
    "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
      }
    ]
  }
]
जब जांच किया जा रहा ऐप्लिकेशन फ़ोरग्राउंड में होता है, तब रोबो इन कार्रवाइयों को इस क्रम में ट्रिगर करता है:
- "Robo script 2", क्योंकि इसकी प्राथमिकता सबसे ज़्यादा है.
- "Robo script 1", क्योंकि यह एक जैसी प्राथमिकता वाली अन्य रोबो स्क्रिप्ट की तुलना में पहले दिखता है.
- "Robo script 3"के तौर पर इस्तेमाल की गई आखिरी रोबो स्क्रिप्ट.
बार-बार होने वाले रन
डिफ़ॉल्ट रूप से, रोबो किसी क्रॉल के दौरान ज़्यादा से ज़्यादा एक बार रोबो स्क्रिप्ट को ट्रिगर करता है. 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 वापस जाता है. हालांकि, कुछ स्थितियों में ऐसा नहीं होना चाहिए. | 
अगर किसी रोबो स्क्रिप्ट के 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 स्क्रिप्ट में, शर्त के हिसाब से कार्रवाइयां शामिल हो सकती हैं. शर्तें पूरी होने पर ट्रिगर होने वाली कार्रवाइयों में तीन अतिरिक्त एट्रिब्यूट होते हैं. इनसे यह पता चलता है कि 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" रिसॉर्स आईडी वाला यूज़र इंटरफ़ेस (यूआई) विजेट मौजूद है. दूसरी रोबो स्क्रिप्ट, रोबो को ऐसे यूज़र इंटरफ़ेस (यूआई) विजेट को अनदेखा करने के लिए कहती है जिनके रिसॉर्स आईडी, ".*: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 के चाइल्ड पर कार्रवाइयां इन चरणों में की जाती हैं:
- रोबो टेस्ट यह पक्का करता है कि स्क्रीन पर मौजूद RecyclerView या AdapterView पर पोज़िशनिंग ऐक्शन के ज़रिए, बच्चे को दिखाया जाए. 
- रोबो टेस्ट, रिकॉर्ड की गई कार्रवाई को सीधे तौर पर चाइल्ड एलिमेंट पर करता है, क्योंकि यह पहले से ही स्क्रीन पर दिख रहा होता है. 
यहां 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 | यह दावा किए गए कॉन्टेक्स्ट या शर्त के बारे में बताता है. इसका स्ट्रक्चर Robo स्क्रिप्ट के contextDescriptor जैसा होता है और इसमें मिलती-जुलती सुविधाएं होती हैं. | 
यहां Robo स्क्रिप्ट के दावे का एक उदाहरण दिया गया है. इससे यह पता चलता है कि टेस्ट किया जा रहा ऐप्लिकेशन फ़ोरग्राउंड में है या नहीं:
{
  "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है, तो रोबो स्क्रिप्ट ऐक्शन, मैच होने वाले दूसरे एलिमेंट को चुनता है. इसी तरह, यह क्रम आगे भी चलता रहता है. इनका क्रम, बाएं से दाएं और ऊपर से नीचे की ओर तय होता है. The
       default value is0(the first match is picked). | 
| 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 रेगुलर एक्सप्रेशन के तौर पर, कमांड का अनुमानित आउटपुट. अगर आउटपुट मैच नहीं करता है, तो रोबो स्क्रिप्ट की कार्रवाई पूरी नहीं होती. डिफ़ॉल्ट रूप से, यह एक खाली स्ट्रिंग होती है. इसका मतलब है कि आउटपुट की जांच नहीं की जाती.
यहां रोबो स्क्रिप्ट की ऐसी कार्रवाई का उदाहरण दिया गया है जिससे टेस्ट किए जा रहे ऐप्लिकेशन का उपयोगकर्ता डेटा मिट जाता है:
{
  "eventType": "ADB_SHELL_COMMAND",
  "command": "pm clear __%APP_PACKAGE_NAME%__"
}
मंज़ूरी दें
इस कार्रवाई को Android Studio में रोबो स्क्रिप्ट रिकॉर्डर रिकॉर्ड करता है, ताकि Espresso Test Recorder के साथ बैकवर्ड कंपैटिबिलिटी बनी रहे. रोबो टेस्ट, हर क्रॉल की शुरुआत में टेस्ट किए जा रहे ऐप्लिकेशन को सभी अनुमतियां देता है. इसलिए, यह कार्रवाई नो-ऑप है. अपनी रोबो स्क्रिप्ट में इस कार्रवाई का इस्तेमाल न करें.
यहां दी गई टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
| विशेषता | ब्यौरा | 
| "eventType": "PERMISSIONS_REQUEST" | -- | 
स्क्रीन पर मौजूद सभी एलिमेंट को अनदेखा करें
इस कार्रवाई से, Robo किसी भी ऐसी स्क्रीन पर मौजूद सभी एलिमेंट को अनदेखा कर देता है जो Robo स्क्रिप्ट को ट्रिगर करती है.
यहां दी गई टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
| विशेषता | ब्यौरा | 
| "eventType": "ALL_ELEMENTS_IGNORED" | -- | 
यहां रोबो स्क्रिप्ट की कार्रवाई का एक उदाहरण दिया गया है. इससे रोबो, स्क्रीन पर मौजूद सभी एलिमेंट को अनदेखा कर देता है:
{
  "eventType": "ALL_ELEMENTS_IGNORED"
}
किसी एलिमेंट को अनदेखा करना
इस कार्रवाई से, Robo उस एलिमेंट (या एलिमेंट) को अनदेखा कर देता है जो तय किए गए elementDescriptors से मेल खाता है.
यहां दी गई टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
| विशेषता | ब्यौरा | 
| "eventType": "ELEMENT_IGNORED" | -- | 
| elementDescriptors | यह Android यूज़र इंटरफ़ेस (यूआई) के क्रम का इस्तेमाल करके, अनदेखे गए यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करता है. | 
इस एट्रिब्यूट को शामिल करना ज़रूरी नहीं है:
- ignoreChildren- अगर इसे- trueपर सेट किया जाता है, तो रोबो, अनदेखे गए यूज़र इंटरफ़ेस(यूआई) विजेट के सभी डिसेंडेंट को भी अनदेखा करता है. डिफ़ॉल्ट रूप से, यह- falseपर सेट होता है.
यहां रोबो स्क्रिप्ट ऐक्शन का एक उदाहरण दिया गया है. इससे रोबो उन सभी एलिमेंट को अनदेखा कर देता है जिनकी कॉन्टेंट के बारे में जानकारी "Avatar" से शुरू होती है:
{
  "eventType": "ELEMENT_IGNORED",
  "elementDescriptors": [
    {
      "contentDescriptionRegex": "Avatar.*"
    }
  ]
}
इनपुट टेक्स्ट
यहां दी गई टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
| विशेषता | ब्यौरा | 
|---|---|
| eventType | इससे Robo स्क्रिप्ट की कार्रवाई का टाइप तय होता है. | 
| "eventType": "VIEW_TEXT_CHANGED" | यह कमांड, दिए गए टेक्स्ट को टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट में डालती है. | 
| "eventType": "ENTER_TEXT" | यह दिए गए टेक्स्ट को टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट में डालता है. इसके बाद, इस यूज़र इंटरफ़ेस (यूआई) विजेट को KEYCODE_ENTERइवेंट भेजता है. | 
| elementDescriptors | Android यूज़र इंटरफ़ेस (यूआई) के क्रम का इस्तेमाल करके, टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करता है. | 
| replacementText | टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट में डाला जाने वाला टेक्स्ट. | 
नीचे, रोबो स्क्रिप्ट की ऐसी कार्रवाई का उदाहरण दिया गया है जिसमें "John" को संसाधन आईडी "com.google.samples.apps.topeka:id/first_name" वाले यूज़र इंटरफ़ेस (यूआई) विजेट में डाला जाता है:
{
  "eventType": "VIEW_TEXT_CHANGED",
  "replacementText": "John",
  "elementDescriptors": [
    {
      "resourceId": "com.google.samples.apps.topeka:id/first_name"
    }
  ]
}
क्लिक करके रखें
यहां दी गई टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
| विशेषता | ब्यौरा | 
| "eventType": "VIEW_LONG_CLICKED" | -- | 
| elementDescriptors | Android यूज़र इंटरफ़ेस (यूआई) के क्रम का इस्तेमाल करके, टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करता है. visionTextके साथ म्यूचुअली एक्सक्लूसिव. | 
| visionText | यह कुकी, ओसीआर का इस्तेमाल करके लंबे समय तक क्लिक किए गए एलिमेंट की पहचान करती है. elementDescriptorsके साथ म्यूचुअली एक्सक्लूसिव है. | 
| matchIndex | visionTextका इस्तेमाल करके टारगेट एलिमेंट की पहचान करने पर, यह विकल्प मैच किए गए टारगेट एलिमेंट के इंडेक्स के बारे में बताता है. अगर यह0है, तो रोबो स्क्रिप्ट ऐक्शन, मैच होने वाले पहले एलिमेंट को चुनता है. अगर यह1है, तो रोबो स्क्रिप्ट ऐक्शन, मैच होने वाले दूसरे एलिमेंट को चुनता है. इसी तरह, यह क्रम आगे भी चलता रहता है. इनका क्रम, बाएं से दाएं और ऊपर से नीचे की ओर तय होता है. The
       default value is0(the first match is picked). | 
इस एट्रिब्यूट को शामिल करना ज़रूरी नहीं है:
- 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 वाले एम्युलेटर पर वापस जाने के लिए किया जाता है. | 
यहां एक ऐसी रोबो स्क्रिप्ट कार्रवाई का उदाहरण दिया गया है जो 'वापस जाएं' बटन दबाती है:
{
  "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 | स्वाइप करने की दिशा के बारे में बताता है: 
 | 
| 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 | यह विकल्प, स्क्रीनशॉट की फ़ाइल का नाम तय करता है. | 
यहां 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के साथ म्यूचुअली एक्सक्लूसिव है. | 
यहां Robo स्क्रिप्ट के ऐसे ऐक्शन का उदाहरण दिया गया है जो स्क्रीन के बीच में टैप करता है:
{
  "eventType": "POINT_TAP",
  "pointTapXPercent": 50,
  "pointTapYPercent": 50
}
किसी एलिमेंट में मौजूद पॉइंट पर टैप करें
यहां दी गई टेबल में ज़रूरी एट्रिब्यूट दिए गए हैं:
| विशेषता | ब्यौरा | 
| "eventType": "POINT_TAP_ELEMENT" | -- | 
| pointTapXPercent | टारगेट एलिमेंट में X कॉर्डिनेट का प्रतिशत. | 
| pointTapYPercent | टारगेट एलिमेंट में मौजूद Y कॉर्डिनेट का प्रतिशत. | 
| elementDescriptors | Android यूज़र इंटरफ़ेस (यूआई) के क्रम का इस्तेमाल करके, टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करता है. | 
यहां Robo स्क्रिप्ट ऐक्शन का एक उदाहरण दिया गया है. इसमें सीकबार के स्लाइडर को दाईं ओर ले जाया जाता है:
{
  "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 स्क्रिप्ट की कार्रवाई का एक उदाहरण दिया गया है. इसमें, संसाधन आईडी "my.app.package:id/confirmation_button" वाले यूज़र इंटरफ़ेस (यूआई) विजेट को स्क्रीन पर दिखने के लिए 30 सेकंड तक इंतज़ार किया जाता है:
{
  "eventType": "WAIT_FOR_ELEMENT",
  "delayTime": 30000,
  "elementDescriptors": [
    {
      "resourceId": "my.app.package:id/confirmation_button"
    }
  ]
}