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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

बनावट

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

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

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

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

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

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

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

{
  "contextDescriptor": {
    "condition": "non_roboscript_action_performed"
  },
  "maxNumberOfRuns" : 1000,
  "actions" : [
    {
      "eventType" : "WAIT",
      "delayTime" : 5000
    }]
}

कार्रवाइयां

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

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

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

[
  {
    "eventType": "WAIT",
    "delayTime": 3000
  },
  {
    "eventType": "PRESSED_BACK"
  }
]

एलिमेंट डिस्क्रिप्टर

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

एट्रिब्यूट ब्यौरा
className –
ancestorClassName एलिमेंट के यूज़र इंटरफ़ेस (यूआई) की हैरारकी में मौजूद पैरंट एलिमेंट की क्लास का नाम. एन्सेस्टर, एलिमेंट की यूज़र इंटरफ़ेस (यूआई) हैरारकी में मौजूद कोई भी पैरंट नोड होता है. इसमें एलिमेंट खुद भी शामिल होता है.
resourceId –
resourceIdRegex resourceId से मैच करने के लिए Java रेगुलर एक्सप्रेशन.
contentDescription –
contentDescriptionRegex contentDescription से मैच करने के लिए Java रेगुलर एक्सप्रेशन.
text (जो स्क्रीन पर दिखता है) –
textRegex text से मैच करने के लिए Java रेगुलर एक्सप्रेशन.
groupViewChildPosition, recyclerViewChildPosition या adapterViewChildPosition यह यूज़र इंटरफ़ेस (यूआई) विजेट के चाइल्ड विजेट की पोज़िशन को दिखाता है. यह पोज़िशन, पैरंट विजेट के टाइप के हिसाब से तय होती है.

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

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

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

[
  {
    "eventType": "VIEW_TEXT_CHANGED",
    "replacementText": "John",
    "elementDescriptors": [
      {
        "className": "android.support.v7.widget.AppCompatEditText",
        "groupViewChildPosition": 0,
        "resourceId": "com.google.samples.apps.topeka:id/first_name"
      },
      {
        "className": "android.widget.FrameLayout",
        "groupViewChildPosition": 0
      },
      {
        "className": "android.support.design.widget.TextInputLayout",
        "groupViewChildPosition": 1
      }
    ]
  },
  {
    "eventType": "VIEW_CLICKED",
    "elementDescriptors": [
      {
        "className": "android.support.design.widget.FloatingActionButton",
        "groupViewChildPosition": 1,
        "resourceId": "com.google.samples.apps.topeka:id/done"
      },
      {
        "className": "android.widget.FrameLayout",
        "groupViewChildPosition": 1,
        "resourceId": "com.google.samples.apps.topeka:id/content"
      },
      {
        "className": "android.widget.FrameLayout",
        "groupViewChildPosition": 0,
        "resourceId": "com.google.samples.apps.topeka:id/sign_in_content"
      }
    ]
  }
]

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

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

अगर कुछ हद तक मैच हो जाता है, तो 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 'वापस जाएं' बटन दबाता है. कुछ मामलों में ऐसा करना सही नहीं होता.

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

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

{
  "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 में Robo स्क्रिप्ट की JSON फ़ाइल बनाने के लिए, Android Studio में Test Lab का इस्तेमाल करके Robo स्क्रिप्ट रिकॉर्ड करना लेख में दिया गया तरीका अपनाएं.

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

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

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

दावा

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{
  "eventType": "DISABLE_KEYBOARD"
}

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

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

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

इस एट्रिब्यूट को शामिल करना ज़रूरी नहीं है:

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

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

{
  "eventType": "ADB_SHELL_COMMAND",
  "command": "pm clear __%APP_PACKAGE_NAME%__"
}

मंज़ूरी दें

इस कार्रवाई को Android Studio में रोबो स्क्रिप्ट रिकॉर्डर रिकॉर्ड करता है, ताकि एस्प्रेसो टेस्ट रिकॉर्डर के साथ पुराने सिस्टम के साथ काम करने की सुविधा उपलब्ध कराई जा सके. रोबो टेस्ट, हर क्रॉल की शुरुआत में टेस्ट किए जा रहे ऐप्लिकेशन को सभी अनुमतियां देता है. इसलिए, इस कार्रवाई का कोई असर नहीं होता. अपनी रोबो स्क्रिप्ट में इस कार्रवाई का इस्तेमाल न करें.

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

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

स्क्रीन पर मौजूद सभी एलिमेंट को अनदेखा करना

ऐसा करने पर, Robo किसी भी स्क्रीन पर मौजूद उन सभी एलिमेंट को अनदेखा कर देता है जो Robo स्क्रिप्ट को ट्रिगर करते हैं.

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

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

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

{
  "eventType": "ALL_ELEMENTS_IGNORED"
}

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

इस कार्रवाई से, Robo उन एलिमेंट को अनदेखा कर देता है जो दिए गए elementDescriptors से मैच करते हैं.

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

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

इस एट्रिब्यूट को शामिल करना ज़रूरी नहीं है:

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

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

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

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

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

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

यहां रोबो स्क्रिप्ट की कार्रवाई का एक उदाहरण दिया गया है. इसमें "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 स्क्रिप्ट की एक ऐसी कार्रवाई का उदाहरण दिया गया है जो पिंच आउट जेस्चर का इस्तेमाल करती है:

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

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

{
  "eventType": "PRESSED_BACK"
}

होम बटन दबाएं

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

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

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

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

{
  "eventType": "GO_HOME"
}

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

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

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

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

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

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

स्वाइप करें

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

एट्रिब्यूट ब्यौरा
"eventType": "VIEW_SWIPED" --
swipeDirection इससे स्वाइप करने की दिशा तय होती है:
  • 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 स्क्रिप्ट की एक ऐसी कार्रवाई का उदाहरण दिया गया है जो तीन सेकंड तक इंतज़ार करती है:

{
  "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"
    }
  ]
}

अगले चरण