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

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

  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" को आखिरी रोबो स्क्रिप्ट के तौर पर इस्तेमाल किया गया था.

बार-बार होने वाले रन

डिफ़ॉल्ट रूप से, रोबो किसी क्रॉल के दौरान ज़्यादा से ज़्यादा एक बार रोबो स्क्रिप्ट को ट्रिगर करता है. 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 स्क्रिप्ट इस कार्रवाई को पूरा करती है. अगर ऐसा नहीं होता है, तो रोबो स्क्रिप्ट बिना शर्त वाली यह कार्रवाई करती है. मान्य होने के लिए, किसी रोबो स्क्रिप्ट में कम से कम एक ऐसी कार्रवाई होनी चाहिए जो किसी शर्त पर आधारित न हो.

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

{
  "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 के चाइल्ड पर कार्रवाइयां इन चरणों में की जाती हैं:

  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 - इससे Robo test के आउटपुट में, इस रोबो स्क्रिप्ट ऐक्शन के एक्ज़ीक्यूशन को ट्रैक करने में मदद मिलती है.

दावा

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

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

एट्रिब्यूट ब्यौरा
"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 is 0 (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"
    }
  ]
}

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

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

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

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

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

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

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

अगले चरण