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

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

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

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

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

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

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

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

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

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

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

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

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

iOS+ पर रोबो स्क्रिप्ट की सुविधा

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

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

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

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

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

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

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

बनावट

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

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

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

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

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

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

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

एट्रिब्यूट ब्यौरा
"condition": "always" यह हमेशा रोबो स्क्रिप्ट को ट्रिगर करता है.
"condition": "element_present" इससे यह जांच की जाती है कि स्क्रीन पर elementDescriptors से मैच करने वाला यूज़र इंटरफ़ेस विजेट या visionText से तय किया गया टेक्स्ट मौजूद है या नहीं.
"condition": "element_disabled" यह जांच करता है कि elementDescriptors से मैच करने वाला यूज़र इंटरफ़ेस (यूआई) विजेट, स्क्रीन पर मौजूद है या नहीं और उससे इंटरैक्ट किया जा सकता है या नहीं.
"condition": "element_checked" इससे यह जांच की जाती है कि elementDescriptors से मैच करने वाला यूज़र इंटरफ़ेस (यूआई) विजेट, स्क्रीन पर मौजूद है और उसे चुना गया है.
"condition": "app_under_test_shown" यह जांच करता है कि टेस्ट किया जा रहा ऐप्लिकेशन, फ़ोरग्राउंड में चल रहा है या नहीं.
"condition": "default_launcher_shown" यह जांच करता है कि डिवाइस की होम स्क्रीन दिख रही है या नहीं. इसका मतलब है कि फ़ोरग्राउंड में कोई ऐप्लिकेशन नहीं चल रहा है.
"condition": "non_roboscript_action_performed" यह जांच करता है कि रोबो टेस्ट की पिछली nonRoboscriptActionCount कार्रवाइयां, रोबो स्क्रिप्ट की कार्रवाइयां न हों.
negateCondition true पर सेट होने पर, condition को नकारता है. उदाहरण के लिए, इस एट्रिब्यूट का इस्तेमाल करके यह पता लगाया जा सकता है कि स्क्रीन पर यूज़र इंटरफ़ेस (यूआई) विजेट मौजूद है या नहीं. इसके अलावा, यह भी पता लगाया जा सकता है कि टेस्ट किया जा रहा ऐप्लिकेशन, फ़ोरग्राउंड में चल रहा है या नहीं.
elementDescriptors एक या उससे ज़्यादा एलिमेंट डिस्क्रिप्टर, जो स्क्रीन पर यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करते हैं. इसका इस्तेमाल element_present, element_disabled, और element_checked की शर्तों के साथ किया जाता है. visionText के साथ म्यूचुअली एक्सक्लूसिव. ज़्यादा जानकारी के लिए, एलिमेंट डिस्क्रिप्टर देखें.
visionText स्क्रीन पर मौजूद टेक्स्ट का पता लगाने के लिए, ऑप्टिकल कैरेक्टर रिकग्निशन (ओसीआर) एपीआई का इस्तेमाल किया जाता है. visionText का इस्तेमाल, element_present शर्त के साथ किया जाता है. elementDescriptors के साथ म्यूचुअली एक्सक्लूसिव.
nonRoboscriptActionCount पहले की गई, रोबो स्क्रिप्ट से जुड़ी लगातार कार्रवाइयों की संख्या. इसका इस्तेमाल non_roboscript_action_performed शर्त के साथ किया जाता है, ताकि हर nonRoboscriptActionCount रोबो ऐक्शन के बाद रोबो स्क्रिप्ट ट्रिगर हो सके. डिफ़ॉल्ट रूप से, यह 1 पर सेट होता है.

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

{
  "id": 1000,
  "contextDescriptor": {
    "condition": "element_present",
    "elementDescriptors": [
      {
        "resourceId": "my.app.package:id/page_header"
      }
    ]
  },
  "actions": [
    {
      "eventType": "VIEW_CLICKED",
      "elementDescriptors": [
        {
          "text": "Settings"
        }
      ]
    }
  ]
}

यहां एक ऐसी रोबो स्क्रिप्ट का उदाहरण दिया गया है जो ऑप्टिकल कैरेक्टर रिकग्निशन (ओसीआर) से पहचाने गए "Privacy Policy" से ट्रिगर होती है:

{
  "id": 1000,
  "description": "Vision text Robo script",
  "contextDescriptor": {
    "condition": "element_present",
    "visionText": "Privacy Policy"
  },
  "actions": [
    {
      "eventType": "VIEW_CLICKED",
      "visionText": "Privacy Policy"
    }
  ]
}

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

{
  "contextDescriptor": {
    "condition": "non_roboscript_action_performed"
  },
  "maxNumberOfRuns" : 1000,
  "actions" : [
    {
      "eventType" : "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"
      }
    ]
  }
]

एक्ज़ीक्यूशन के विकल्प

आपके पास Robo स्क्रिप्ट में कार्रवाइयों की सूची के आगे, JSON ऑब्जेक्ट जोड़ने का विकल्प होता है. यह ऑब्जेक्ट, उस Robo स्क्रिप्ट को चलाने के विकल्पों के बारे में बताता है. यह कॉन्फ़िगरेशन हेडर, roboscript कीवर्ड से शुरू होता है. इसके बाद, मनचाहे एक्ज़ीक्यूशन विकल्पों को JSON कोड में दिखाया जाता है.

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

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

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

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

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

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

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

  • __%APP_PACKAGE_NAME%__ - टेस्ट किए जा रहे ऐप्लिकेशन के पैकेज का नाम.

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

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

टिप्पणियां

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

यहां कुछ टिप्पणियों के साथ रोबो स्क्रिप्ट का एक उदाहरण दिया गया है:

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

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

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

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

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

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

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

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

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

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

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

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

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

[
  {
    "id": 1000,
    "description": "Robo script 1",
    "contextDescriptor": {
      "condition": "app_under_test_shown"
    },
    "actions": [
      {
        "eventType": "WAIT",
        "delayTime": 3000
      }
    ]
  },
  {
    "id": 1001,
    "description": "Robo script 2",
    "priority": "2",
    "contextDescriptor": {
      "condition": "app_under_test_shown"
    },
    "actions": [
      {
        "eventType": "WAIT",
        "delayTime": 3000
      }
    ]
  },
  {
    "id": 1002,
    "description": "Robo script 3",
    "contextDescriptor": {
      "condition": "app_under_test_shown"
    },
    "actions": [
      {
        "eventType": "WAIT",
        "delayTime": 3000
      }
    ]
  }
]

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

  1. "Robo script 2", क्योंकि इसकी प्राथमिकता सबसे ज़्यादा है.
  2. "Robo script 1", क्योंकि यह एक जैसी प्राथमिकता वाली अन्य Robo स्क्रिप्ट से पहले दिखती है.
  3. "Robo script 3" को लागू होने वाली आखिरी रोबो स्क्रिप्ट के तौर पर सेट किया गया है.

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

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

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

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

क्रॉल स्टेज

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

क्रॉल करने का चरण ब्यौरा
pre_crawl रोबो टेस्ट लॉन्च होने और टेस्ट किए जा रहे ऐप्लिकेशन को क्रॉल करने से पहले.
post_crawl जब रोबो, टेस्ट किए जा रहे ऐप्लिकेशन को क्रॉल कर लेता है. post_crawl रोबो स्क्रिप्ट की अवधि 15 सेकंड से ज़्यादा नहीं होनी चाहिए. ऐसा न होने पर, टाइम आउट की वजह से क्रॉल की प्रोसेस खत्म हो सकती है.
crawl क्रॉल करने का मुख्य चरण, जब रोबो टेस्ट किए जा रहे ऐप्लिकेशन को क्रॉल करता है.
close_screen जब Robo किसी स्क्रीन पर सभी संभावित कार्रवाइयां एक्सप्लोर करने के बाद, वापस लौटने (बैकट्रैक) की कोशिश करता है. डिफ़ॉल्ट रूप से, Robo बैक बटन दबाता है. कुछ मामलों में ऐसा करना सही नहीं होता.

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

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

{
  "id": 1000,
  "crawlStage": "pre_crawl",
  "actions": [
    {
      "eventType": "ADB_SHELL_COMMAND",
      "command": "pm clear __%APP_PACKAGE_NAME%__"
    }
  ]
}

यहां रोबो स्क्रिप्ट का एक उदाहरण दिया गया है. यह रोबो को निर्देश देती है कि जब भी वह पुष्टि करने वाले डायलॉग बॉक्स से वापस जाने (बैकट्रैक) की कोशिश करे, तो "Cancel" पर क्लिक करे:

{
  "id": 1000,
  "crawlStage": "close_screen",
  "maxNumberOfRuns": 999,
  "contextDescriptor": {
    "condition": "element_present",
    "elementDescriptors": [
      {
        "resourceId": "my.app.package:id/confirmation_dialog"
      }
    ]
  },
  "actions": [
    {
      "eventType": "VIEW_CLICKED",
      "elementDescriptors": [
        {
          "text": "Cancel"
        }
      ]
    }
  ]
}

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

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

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

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

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

{
  "id": 1000,
  "actions": [
    {
      "description": "Dismiss popup",
      "maxNumberOfRuns": 100,
      "contextDescriptor": {
        "condition": "default_launcher_shown",
        "negateCondition": true
      },
      "eventType": "GO_HOME"
    },
    {
      "description": "Screen off",
      "eventType": "ADB_SHELL_COMMAND",
      "command": "input keyevent 26"
    },
    {
      "description": "Wait for 10 seconds",
      "eventType": "WAIT",
      "delayTime": 10000
    },
    {
      "description": "Screen on",
      "eventType": "ADB_SHELL_COMMAND",
      "command": "input keyevent 82"
    },
    {
      "description": "Wait for 10 seconds",
      "eventType": "WAIT",
      "delayTime": 10000
    }
}

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

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

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

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

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

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

RecyclerView और AdapterView के लिए सहायता

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

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

RecyclerView और AdapterView के चाइल्ड व्यू पर कार्रवाइयां करने के लिए, ये तरीके अपनाए जाते हैं:

  1. रोबो टेस्ट यह पक्का करता है कि चाइल्ड व्यू, स्क्रीन पर दिखे. इसके लिए, वह RecyclerView या AdapterView में चाइल्ड व्यू की पोज़िशन तय करता है.

  2. रोबो टेस्ट, रिकॉर्ड की गई कार्रवाई को सीधे चाइल्ड एलिमेंट पर करता है, क्योंकि यह पहले से ही स्क्रीन पर दिख रहा है.

यहां AdapterView (android.widget.GridView) चाइल्ड पर क्लिक ऐक्शन का उदाहरण दिया गया है:

{
  "eventType": "VIEW_CLICKED",
  "elementDescriptors": [
    {
      "className": "com.google.samples.apps.topeka.widget.AvatarView",
      "adapterViewChildPosition": 5,
      "resourceId": "com.google.samples.apps.topeka:id/avatar",
      "contentDescription": "Avatar 6"
    },
    {
      "className": "android.widget.GridView",
      "groupViewChildPosition": 1,
      "resourceId": "com.google.samples.apps.topeka:id/avatars"
    },
    {
      "className": "android.widget.LinearLayout",
      "groupViewChildPosition": 1
    },
    {
      "className": "android.widget.LinearLayout",
      "groupViewChildPosition": 0
    }
  ]
}

यहां RecyclerView (android.support.v7.widget.RecyclerView) चाइल्ड पर क्लिक ऐक्शन का उदाहरण दिया गया है:

{
  "eventType": "VIEW_CLICKED",
  "elementDescriptors": [
    {
      "className": "android.support.v7.widget.AppCompatTextView",
      "groupViewChildPosition": 1,
      "resourceId": "com.google.samples.apps.topeka:id/category_title"
    },
    {
      "className": "android.widget.FrameLayout",
      "recyclerViewChildPosition": 8,
      "resourceId": "com.google.samples.apps.topeka:id/category_item"
    },
    {
      "className": "android.support.v7.widget.RecyclerView",
      "groupViewChildPosition": 1,
      "resourceId": "com.google.samples.apps.topeka:id/categories"
    },
    {
      "className": "android.widget.FrameLayout",
      "groupViewChildPosition": 1,
      "resourceId": "com.google.samples.apps.topeka:id/category_container"
    },
    {
      "className": "android.widget.LinearLayout",
      "groupViewChildPosition": 0
    }
  ]
}

Android Studio में रोबो स्क्रिप्ट रिकॉर्ड करें और उसे Test Lab में चलाएं

Android Studio में रोबो स्क्रिप्ट बनाई जा सकती है. यह स्क्रिप्ट को JSON फ़ाइल के तौर पर सेव करती है. इसके बाद, ऐप्लिकेशन के साथ JSON फ़ाइल को Firebase Test Lab पर अपलोड किया जा सकता है और उसके हिसाब से टेस्ट चलाया जा सकता है.

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

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

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

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

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

दावा

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

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

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

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

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

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

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

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

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

क्लिक

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

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

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

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

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

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

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

{
  "eventType": "SOFT_KEYBOARD_CLICK",
  "elementDescriptors": [
    {
      "contentDescription": "Emoji button"
    }
  ]
}

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

{
  "eventType": "SOFT_KEYBOARD_RANDOM_CLICK",
  "maxNumberOfRuns": 5
}

सॉफ़्ट कीबोर्ड बंद करें

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

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

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

{
  "eventType": "DISABLE_KEYBOARD"
}

adb शेल कमांड चलाना

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

एट्रिब्यूट ब्यौरा
"eventType": "ADB_SHELL_COMMAND" --
command Android डीबग ब्रिज (एडीबी) शेल कमांड, जिसे चलाना है.

यह एट्रिब्यूट ज़रूरी नहीं है:

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

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

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

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

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

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

यहां रोबो स्क्रिप्ट की कार्रवाई का एक उदाहरण दिया गया है. इसमें, "John" को यूज़र इंटरफ़ेस (यूआई) विजेट में इनपुट किया गया है. इस विजेट का संसाधन आईडी "com.google.samples.apps.topeka:id/first_name" है:

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

क्लिक करके रखें

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

एट्रिब्यूट ब्यौरा
"eventType": "VIEW_LONG_CLICKED" --
elementDescriptors Android यूज़र इंटरफ़ेस (यूआई) की हैरारकी का इस्तेमाल करके, टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करता है. visionText के साथ म्यूचुअली एक्सक्लूसिव है.
visionText ओसीआर का इस्तेमाल करके, उस एलिमेंट की पहचान करता है जिस पर देर तक क्लिक किया गया है. elementDescriptors के साथ म्यूचुअली एक्सक्लूसिव.
matchIndex जब टारगेट एलिमेंट की पहचान करने के लिए visionText का इस्तेमाल किया जाता है, तब यह मैच होने वाले टारगेट एलिमेंट की मौजूदगी का इंडेक्स बताता है. अगर यह 0 है, तो रोबो स्क्रिप्ट की कार्रवाई, मैच होने वाले पहले एलिमेंट को चुनती है. अगर यह 1 है, तो रोबो स्क्रिप्ट की कार्रवाई, मैच होने वाले दूसरे एलिमेंट को चुनती है. इसी तरह, आगे भी एलिमेंट चुने जाते हैं. क्रम, बाएं से दाएं और ऊपर से नीचे की ओर तय किया जाता है. डिफ़ॉल्ट वैल्यू 0 होती है. इसका मतलब है कि पहला मैच चुना जाता है.

यह एट्रिब्यूट ज़रूरी नहीं है:

  • delayTime - इससे पता चलता है कि लॉन्ग क्लिक के लिए, बटन को कितनी देर तक दबाकर रखना है. यह समय मिलीसेकंड में होता है.

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

{
  "eventType": "VIEW_LONG_CLICKED",
  "elementDescriptors": [
    {
      "contentDescription": "Avatar 8"
    }
  ],
  "delayTime": 5000
}

एक उंगली से जेस्चर करना

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

एट्रिब्यूट ब्यौरा
"eventType": "ONE_POINT_GESTURE" --
coordinates एक पॉइंट वाले जेस्चर के लिए दो निर्देशांक, जिन्हें प्रतिशत या पिक्सल के तौर पर "(x1,y1)->(x2,y2)" के रूप में फ़ॉर्मैट किया गया है.

यह एट्रिब्यूट ज़रूरी नहीं है:

  • dragAndDrop - अगर इसे true पर सेट किया जाता है, तो एक उंगली से किया जाने वाला जेस्चर, खींचने और छोड़ने की कार्रवाई करता है. डिफ़ॉल्ट रूप से, यह false पर सेट होता है.

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

{
  "eventType": "ONE_POINT_GESTURE",
  "coordinates": "(50%,25%)->(50%,75%)"
}

दो पॉइंट वाला जेस्चर इस्तेमाल करना

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

एट्रिब्यूट ब्यौरा
"eventType": "TWO_POINT_GESTURE" --
coordinates दो पॉइंट वाले जेस्चर के लिए चार कोऑर्डिनेट, जिन्हें प्रतिशत या पिक्सल के तौर पर "(x1,y1)->(x2,y2),(x3,y3)->(x4,y4)" के रूप में फ़ॉर्मैट किया गया है.

यहां Robo script की कार्रवाई का एक उदाहरण दिया गया है, जो पिंच आउट जेस्चर को दिखाता है:

{
  "eventType": "TWO_POINT_GESTURE",
  "coordinates": "(50%,50%)->(25%,50%),(50%,50%)->(75%,50%)"
}

आईएमई से जुड़ी कोई कार्रवाई करना

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

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

एट्रिब्यूट ब्यौरा
"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 इससे रोबो स्क्रिप्ट की कार्रवाई के टाइप के बारे में पता चलता है.
"eventType": "PRESSED_BACK" डिवाइस पर KEYCODE_BACK इवेंट भेजता है.
"eventType": "PRESSED_BACK_EMULATOR_28" Android Studio में रोबो स्क्रिप्ट रिकॉर्डर, एम्युलेटर एपीआई 28 पर वापस जाने के लिए इसका इस्तेमाल करता है.

यहां Robo script की ऐसी कार्रवाई का उदाहरण दिया गया है जो बैक बटन दबाती है:

{
  "eventType": "PRESSED_BACK"
}

होम बटन दबाएं

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

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

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

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

{
  "eventType": "GO_HOME"
}

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

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

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

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

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

{
  "eventType": "ELEMENT_SCROLL_INTO_VIEW",
  "elementDescriptors": [
    {
      "resourceId": "my.app.package:id/scrollable_card_container"
    }
  ],
  "childElementDescriptors": [
    {
      "text": "Orange"
    }
  ]
}

स्वाइप करें

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

एट्रिब्यूट ब्यौरा
"eventType": "VIEW_SWIPED" --
swipeDirection इससे स्वाइप करने की दिशा तय होती है:
  • Left
  • Right
  • Up
  • Down
  • Forward - टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट को वर्टिकल या हॉरिज़ॉन्टल तौर पर स्क्रोल करने की सुविधा के आधार पर, Down या Right.
  • Backward - टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट को वर्टिकल या हॉरिज़ॉन्टल तौर पर स्क्रोल किया जा सकता है या नहीं, इसके आधार पर Up या Left.
elementDescriptors Android यूज़र इंटरफ़ेस (यूआई) की हैरारकी का इस्तेमाल करके, टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करता है.

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

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

स्क्रीनशॉट लें

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

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

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

{
  "eventType": "TAKE_SCREENSHOT",
  "screenshotName": "my_screenshot"
}

स्क्रीन पर किसी पॉइंट पर टैप करें

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

एट्रिब्यूट ब्यौरा
"eventType": "POINT_TAP" --
pointTapXCoordinate टैप किए गए पॉइंट का पिक्सल X कोऑर्डिनेट. pointTapXPercent और pointTapYPercent के साथ म्यूचुअली एक्सक्लूसिव.
pointTapYCoordinate टैप किए गए पॉइंट का पिक्सल Y कोऑर्डिनेट. pointTapXPercent और pointTapYPercent के साथ म्यूचुअली एक्सक्लूसिव.
pointTapXPercent टैप किए गए पॉइंट का X कोऑर्डिनेट प्रतिशत. pointTapXCoordinate और pointTapYCoordinate के साथ म्यूचुअली एक्सक्लूसिव.
pointTapYPercent टैप किए गए पॉइंट का Y कोऑर्डिनेट प्रतिशत. pointTapXCoordinate और pointTapYCoordinate के साथ म्यूचुअली एक्सक्लूसिव.

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

{
  "eventType": "POINT_TAP",
  "pointTapXPercent": 50,
  "pointTapYPercent": 50
}

किसी एलिमेंट में मौजूद पॉइंट पर टैप करना

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

एट्रिब्यूट ब्यौरा
"eventType": "POINT_TAP_ELEMENT" --
pointTapXPercent टारगेट एलिमेंट में X कोऑर्डिनेट का प्रतिशत.
pointTapYPercent टारगेट एलिमेंट में Y कोऑर्डिनेट का प्रतिशत.
elementDescriptors Android यूज़र इंटरफ़ेस (यूआई) की हैरारकी का इस्तेमाल करके, टारगेट यूज़र इंटरफ़ेस (यूआई) विजेट की पहचान करता है.

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

{
  "eventType": "POINT_TAP_ELEMENT",
  "pointTapXPercent": 80,
  "pointTapYPercent": 50,
  "elementDescriptors": [
    {
      "resourceId": "my.app.package:id/my_seekbar"
    }
  ]
}

क्रॉल करना बंद करें

ऐसा करने पर, रोबो टेस्ट बंद हो जाएगा.

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

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

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

{
  "eventType": "TERMINATE_CRAWL"
}

इंतज़ार करें

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

एट्रिब्यूट ब्यौरा
"eventType": "WAIT" (or "DELAYED_MESSAGE_POSTED") --
delayTime इससे यह तय होता है कि मिलीसेकंड में कितनी देर इंतज़ार करना है.

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

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

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

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

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

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

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

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

अगले चरण