রোবো স্ক্রিপ্ট রেফারেন্স গাইড

এই নথিটি গঠন, ক্ষমতা, ব্যবহার, রেকর্ডিং এবং অ্যাকশন সহ Robo স্ক্রিপ্ট সম্পর্কে রেফারেন্স তথ্য প্রদান করে। রোবো স্ক্রিপ্টগুলি এমন পরীক্ষা যা মোবাইল অ্যাপের জন্য ম্যানুয়াল কোয়ালিটি অ্যাসুরেন্স (QA) কাজগুলিকে স্বয়ংক্রিয় করে এবং ক্রমাগত ইন্টিগ্রেশন (CI) এবং প্রি-লঞ্চ টেস্টিং কৌশলগুলি সক্ষম করে৷ একটি রোবো স্ক্রিপ্ট হল একটি JSON ফাইল যা ইউজার ইন্টারফেস (UI) এবং অন্যান্য ক্রিয়াগুলির একটি ক্রম বর্ণনা করে।

আপনি নিম্নলিখিত উপায়ে একটি রোবো স্ক্রিপ্ট তৈরি করতে পারেন:

  • Robo স্ক্রিপ্ট রেকর্ডিং বৈশিষ্ট্য ব্যবহার করুন. (শুধুমাত্র অ্যান্ড্রয়েড)

  • ম্যানুয়ালি রোবো স্ক্রিপ্ট তৈরি করুন। (Android এবং iOS+)

  • Robo স্ক্রিপ্ট রেকর্ড করুন এবং তারপর ম্যানুয়ালি সম্পাদনা করুন। (শুধুমাত্র অ্যান্ড্রয়েড)

রোবো স্ক্রিপ্ট ব্যবহার সম্পর্কে আরও জানতে, একটি রোবো স্ক্রিপ্ট চালান দেখুন।

ভূমিকা

অ্যাপ-আন্ডার-টেস্ট অ্যান্ড্রয়েড অ্যাপ্লিকেশন প্যাকেজ (এপিকে) এর মতো অন্যান্য ইনপুটগুলির পাশাপাশি রোবো স্ক্রিপ্টটি রোবো টেস্টে সরবরাহ করা হয়।

নিম্নলিখিত একটি রোবো স্ক্রিপ্টের একটি উদাহরণ যা একজন ব্যবহারকারীকে একটি অ্যাপে স্বাক্ষর করে, যা অ্যাপ-আন্ডার-টেস্ট চালু হলে ট্রিগার হয়:

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

যদি একটি ফাইলে একটি একক Robo স্ক্রিপ্ট থাকে এবং এটিতে ডিফল্ট app_under_test_shown ট্রিগারিং শর্ত থাকে, যেমন উপরের উদাহরণে, তাহলে আপনি একটি সহজ বিন্যাস ব্যবহার করে একটি ফাইলে Robo স্ক্রিপ্ট নির্দিষ্ট করতে পারেন - ঠিক তার ক্রিয়াগুলির একটি ক্রম হিসাবে:

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

Robo স্ক্রিপ্টের জন্য iOS+ সমর্থন

iOS+ (বিটা) এর জন্য Robo-এর Robo স্ক্রিপ্টের জন্য সীমিত সমর্থন রয়েছে। iOS+ এর জন্য রোবো স্ক্রিপ্ট সিনট্যাক্স অ্যান্ড্রয়েড সিনট্যাক্সের অনুরূপ, এবং সমর্থিত iOS+ বৈশিষ্ট্যগুলি তাদের অ্যান্ড্রয়েড সমকক্ষের মতোই আচরণ করে।

নিম্নলিখিত ক্রিয়াগুলি iOS+ এ সমর্থিত:

  • দাবী
  • ক্লিক করুন
  • দীর্ঘ ক্লিক
  • সোয়াইপ করুন
  • সমস্ত উপাদান (গুলি) উপেক্ষা করুন
  • অপেক্ষা করুন
  • স্ক্রিনশট নিন
  • ক্রল বন্ধ করুন

উপাদান বর্ণনাকারীতে নিম্নলিখিত সনাক্তকারী বৈশিষ্ট্যগুলি iOS+ এ সমর্থিত:

  • ক্লাসের নাম
  • পূর্বপুরুষ শ্রেণীর নাম
  • বিষয়বস্তুর বিবরণ (এবং রেজেক্স)
  • পাঠ্য (এবং রেজেক্স)

প্রসঙ্গ বর্ণনাকারীতে নিম্নলিখিত ট্রিগারিং শর্তগুলি iOS+ এ সমর্থিত:

  • পরীক্ষার অধীনে অ্যাপ দেখানো হয়েছে
  • উপাদান উপস্থিত
  • নন-রোবো স্ক্রিপ্ট অ্যাকশন সম্পাদিত

গঠন

একটি রোবো স্ক্রিপ্টের বেশ কয়েকটি বৈশিষ্ট্য রয়েছে যা বর্ণনা করে যে কীভাবে রোবো এটি কার্যকর করে। এই বৈশিষ্ট্যগুলির বেশিরভাগই পূর্বনির্ধারিত ডিফল্ট মানগুলির সাথে ঐচ্ছিক:

বৈশিষ্ট্য বর্ণনা
id একটি পূর্ণসংখ্যা সংখ্যা যা ক্রল আউটপুটগুলিতে এই রোবো স্ক্রিপ্টটিকে ট্র্যাক করতে সহায়তা করে৷ রোবো তাদের নিজস্ব id সহ বিল্ট-ইন রোবো স্ক্রিপ্ট রয়েছে। যদিও বিভিন্ন রোবো স্ক্রিপ্টে একই id তাদের আচরণকে প্রভাবিত করে না, ক্রল আউটপুটগুলিতে এই রোবো স্ক্রিপ্টগুলি থেকে আলাদা ক্রিয়া করা চ্যালেঞ্জিং হতে পারে। কোনো দ্বন্দ্ব এড়াতে আমরা আপনার রোবো স্ক্রিপ্টের জন্য 1000 বা তার বেশি একটি অনন্য id বরাদ্দ করার পরামর্শ দিই।
description id অনুরূপ কিন্তু আরো বর্ণনামূলক.
crawlStage একটি ক্রল রোবোর পর্যায়ে এই রোবো স্ক্রিপ্টটি প্রয়োগ করে। ডিফল্টরূপে, এটি প্রধান ক্রল পর্যায়।
priority অন্যান্য রোবো স্ক্রিপ্টের তুলনায় এই রোবো স্ক্রিপ্টের অগ্রাধিকার। ডিফল্টরূপে, সমস্ত রোবো স্ক্রিপ্টের অগ্রাধিকার থাকে 1
maxNumberOfRuns একটি ক্রল করার সময় কতবার রোবো এই রোবো স্ক্রিপ্টটি চালাতে পারে তা নির্দিষ্ট করে। ডিফল্টরূপে, রোবো একবার একটি রোবো স্ক্রিপ্ট চালাতে পারে।
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" চেক করে যে একটি UI উইজেট যা elementDescriptors সাথে মেলে বা visionText দ্বারা নির্দিষ্ট করা পাঠ্য স্ক্রিনে উপস্থিত রয়েছে।
"condition": "element_disabled" চেক করে যে একটি UI উইজেট যা elementDescriptors সাথে মেলে তা স্ক্রিনে উপস্থিত রয়েছে এবং এর সাথে ইন্টারঅ্যাক্ট করা যাবে না।
"condition": "element_checked" চেক করে যে একটি UI উইজেট যা elementDescriptors সাথে মেলে সেটি স্ক্রিনে উপস্থিত আছে এবং চেক করা হয়েছে।
"condition": "app_under_test_shown" ফোরগ্রাউন্ডে অ্যাপ-আন্ডার-টেস্ট চলছে কিনা তা পরীক্ষা করে।
"condition": "default_launcher_shown" একটি ডিভাইসের হোম স্ক্রীন দেখানো হয়েছে কিনা তা পরীক্ষা করে, যার অর্থ হল কোন অ্যাপ ফোরগ্রাউন্ডে চলছে না।
"condition": "non_roboscript_action_performed" Robo পরীক্ষার দ্বারা সম্পাদিত সর্বশেষ nonRoboscriptActionCount পরপর ক্রিয়াগুলি Robo স্ক্রিপ্ট ক্রিয়া নয় তা পরীক্ষা করে।
negateCondition true হিসাবে সেট করা হলে, condition অস্বীকার করে। উদাহরণস্বরূপ, একটি UI উইজেট স্ক্রিনে উপস্থিত নেই কিনা বা অ্যাপ-আন্ডার-টেস্টটি ফোরগ্রাউন্ডে চলছে না কিনা তা পরীক্ষা করতে আপনি এই বৈশিষ্ট্যটি ব্যবহার করতে পারেন।
elementDescriptors এক বা একাধিক উপাদান বর্ণনাকারী যা স্ক্রিনে একটি UI উইজেট সনাক্ত করে। এটি element_present , element_disabled এবং element_checked অবস্থার সাথে একত্রে ব্যবহৃত হয়। visionText এর সাথে পারস্পরিক একচেটিয়া। আরও তথ্যের জন্য, উপাদান বর্ণনাকারী দেখুন।
visionText অপটিক্যাল ক্যারেক্টার রিকগনিশন (OCR) API ব্যবহার করে স্ক্রিনে টেক্সট শনাক্ত করা হয়। visionText element_present অবস্থার সাথে একত্রে ব্যবহৃত হয়। elementDescriptors এর সাথে পারস্পরিকভাবে একচেটিয়া।
nonRoboscriptActionCount পূর্বে সম্পাদিত ক্রমাগত নন-রোবো স্ক্রিপ্ট অ্যাকশনের সংখ্যা। প্রতিটি nonRoboscriptActionCount Robo অ্যাকশনের পরে একটি Robo স্ক্রিপ্ট ট্রিগার করতে non_roboscript_action_performed অবস্থার সাথে এটি ব্যবহার করা হয়। ডিফল্টরূপে, এটি 1

নীচে একটি রোবো স্ক্রিপ্টের একটি উদাহরণ যা একটি UI উইজেট দ্বারা ট্রিগার করা হয়েছে যার একটি রিসোর্স আইডি "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"
        }
      ]
    }
  ]
}

নিচে একটি রোবো স্ক্রিপ্টের একটি উদাহরণ যা অপটিক্যাল ক্যারেক্টার রিকগনিশন (OCR) দ্বারা সনাক্ত করা "Privacy Policy" দ্বারা ট্রিগার করা হয়েছে:

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

নিম্নলিখিত একটি রোবো স্ক্রিপ্টের একটি উদাহরণ যা প্রতিটি নন-স্ক্রিপ্ট রোবো অ্যাকশনের পরে 5 সেকেন্ড অপেক্ষা করে:

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

কর্ম

একটি রোবো স্ক্রিপ্টের প্রতিটি ক্রিয়াকে এক বা একাধিক অ্যাট্রিবিউট-মান জোড়ার বান্ডিল হিসাবে উপস্থাপন করা হয়, যা নিম্নলিখিত সারণীতে বর্ণনা করা হয়েছে:

বৈশিষ্ট্য বর্ণনা
eventType অ্যাকশনের ধরন নির্দিষ্ট করে, যেমন, ক্লিক, টেক্সট এডিট ইত্যাদি। প্রতিটি অ্যাকশনের জন্য প্রয়োজনীয়।
elementDescriptors বর্ণনাকারী যা একটি UI উইজেট সনাক্ত করে। একটি নির্দিষ্ট বোতামে ক্লিক করার মতো একটি টার্গেট UI উইজেট আছে এমন সমস্ত অ্যাকশনের জন্য প্রয়োজনীয়৷
optional যদি true তে সেট করা হয়, এই ক্রিয়াটি বাদ দেওয়া হয় যখন এটি সম্পাদন করা যায় না। উদাহরণস্বরূপ, এই ক্রিয়াটি বাদ দেওয়া হয় যখন এটি একটি স্ক্রিনে এর লক্ষ্য UI উইজেটটি খুঁজে পায় না– এতে থাকা Robo স্ক্রিপ্টটি ব্যর্থ না করে৷ ডিফল্টরূপে, মান false
replacementText লক্ষ্য UI উইজেটে ইনপুট করার জন্য পাঠ্য। পাঠ্য সম্পাদনা কর্মের জন্য প্রয়োজনীয়।
swipeDirection সোয়াইপের দিক নির্দেশ করে। সোয়াইপ অ্যাকশনের জন্য প্রয়োজন।
delayTime মিলিসেকেন্ডে কতক্ষণ অপেক্ষা করতে হবে তা নির্দিষ্ট করে। অপেক্ষা কর্মের জন্য প্রয়োজন.
pointTapXCoordinate এবং pointTapYCoordinate ট্যাপ করা পয়েন্টের পিক্সেল X এবং Y স্থানাঙ্ক। pointTapXPercent এবং pointTapYPercent সহ পারস্পরিকভাবে একচেটিয়া। পয়েন্ট ট্যাপ অ্যাকশনের জন্য প্রয়োজন।
pointTapXPercent এবং pointTapYPercent ট্যাপ করা পয়েন্টের শতকরা X এবং Y স্থানাঙ্ক। pointTapXCoordinate এবং pointTapYCoordinate এর সাথে পারস্পরিকভাবে একচেটিয়া। পয়েন্ট ট্যাপ অ্যাকশনের জন্য প্রয়োজন।

নিম্নলিখিতটি লক্ষ্য UI উইজেট ছাড়া দুটি ক্রিয়া সহ একটি রোবো স্ক্রিপ্টের একটি উদাহরণ, যার অর্থ এই ক্রিয়াগুলি একটি নির্দিষ্ট UI উইজেটে কাজ করে না:

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

উপাদান বর্ণনাকারী

একটি উপাদান বর্ণনাকারী নিম্নলিখিত সনাক্তকারী বৈশিষ্ট্যগুলির একটি বা একাধিক ব্যবহার করে একটি UI উইজেট সনাক্ত করে:

বৈশিষ্ট্য বর্ণনা
className -
ancestorClassName উপাদানটির UI অনুক্রমের পূর্বপুরুষের শ্রেণির নাম। একটি পূর্বপুরুষ হল উপাদানের UI অনুক্রমের যেকোনও প্যারেন্ট নোড, যার মধ্যে উপাদানটিও রয়েছে।
resourceId -
resourceIdRegex জাভা রেগুলার এক্সপ্রেশন resourceId মেলে।
contentDescription -
contentDescriptionRegex জাভা রেগুলার এক্সপ্রেশন contentDescription সাথে মেলে।
text (যা পর্দায় প্রদর্শিত হয়) -
textRegex জাভা রেগুলার এক্সপ্রেশন text মেলে।
groupViewChildPosition , recyclerViewChildPosition , or adapterViewChildPosition একটি UI উইজেটের চাইল্ড পজিশন এর প্যারেন্ট উইজেটের ধরনের উপর নির্ভর করে।

প্রায়শই, এই বৈশিষ্ট্যগুলি অনির্ধারিত থাকে, উদাহরণস্বরূপ, একটি বোতামে পাঠ্য এবং বিষয়বস্তুর বিবরণ নাও থাকতে পারে। কিছু অ্যাট্রিবিউট মান উপস্থিত থাকলেও, সেগুলি প্রদত্ত অ্যাপ স্ক্রিনে অনন্য নাও হতে পারে ( resourceId সহ)।

উদাহরণস্বরূপ, একটি তালিকার আইটেমগুলির মধ্যে পার্থক্য করা সাধারণত শুধুমাত্র তাদের পিতামাতার উইজেটের মধ্যে তাদের বিভিন্ন সন্তানের অবস্থান ব্যবহার করেই সম্ভব। এর মানে হল যে একটি UI উইজেট সনাক্ত করতে শুধুমাত্র একটি উপাদান বর্ণনাকারী ব্যবহার করা সাধারণত অপর্যাপ্ত। তাই, একটি অ্যাকশনের elementDescriptors অ্যাট্রিবিউটে এলিমেন্ট বর্ণনাকারীর একটি ক্রম থাকে যেগুলি এমনভাবে সাজানো হয় যে প্রথমটি টার্গেট UI উইজেটের সাথে মিলে যায়, দ্বিতীয়টি টার্গেট UI উইজেটের প্যারেন্ট উইজেটের সাথে মিলে যায় এবং আরও অনেক কিছু। একটি অ্যাকশনের টার্গেট UI উইজেট মিলে যায় যখন এর সমস্ত উপাদান বর্ণনাকারী সংশ্লিষ্ট UI উইজেট সাব-হায়ারার্কির সাথে মেলে।

নিম্নলিখিতটি টেক্সট পরিবর্তন এবং ক্লিক অ্যাকশন সহ একটি রোবো স্ক্রিপ্টের একটি উদাহরণ, যে দুটিরই আপনাকে প্রদত্ত উপাদান বর্ণনাকারী ব্যবহার করে লক্ষ্য UI উইজেট সনাক্ত করতে হবে:

[
  {
    "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 - যখন একটি Robo স্ক্রিপ্ট চলছে তখন এক্সিকিউশন অপশন প্রয়োগ করা হয়:
    • 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": "DELAYED_MESSAGE_POSTED",
    "delayTime": 3000
  }
]

টেমপ্লেট পরামিতি

একটি টেমপ্লেট প্যারামিটার হল একটি রোবো স্ক্রিপ্টের একটি স্থানধারক যা বাস্তব মানের সাথে প্রতিস্থাপিত হয় যখন রোবো পরীক্ষা কার্যকর করার জন্য সেই রোবো স্ক্রিপ্টটি লোড করে। টেমপ্লেট পরামিতিগুলি একটি ডবল আন্ডারস্কোর দ্বারা একটি শতাংশ চিহ্ন দ্বারা অনুসরণ করা হয় এবং একটি শতাংশ চিহ্নের সাথে একটি ডবল আন্ডারস্কোর দ্বারা অনুসরণ করা হয়।

Robo স্ক্রিপ্ট নিম্নলিখিত টেমপ্লেট প্যারামিটার সমর্থন করে:

  • __%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"
      }
    ]
  }
]

ক্ষমতা

ডিফল্টরূপে, যতক্ষণ না একটি রোবো স্ক্রিপ্টের সমস্ত ক্রিয়া সম্পন্ন হয় (বা অন্তত চেষ্টা করা হয়), রোবো স্ক্রিপ্ট সক্রিয় থাকে। যখনই এটি সম্পাদনের জন্য একটি ক্রিয়া বাছাই করে তখনই রোবো টেস্ট একটি রোবো স্ক্রিপ্ট অ্যাকশনের সাথে মেলানোর চেষ্টা করে। রোবো স্ক্রিপ্ট দৃঢ়তা বাড়ানোর জন্য নিম্নলিখিত কৌশলগুলি নিয়োগ করে:

টেকনিক বর্ণনা
আংশিক মিল যদি বর্তমান রোবো স্ক্রিপ্ট অ্যাকশনটি সম্পূর্ণরূপে মেলে না, তাহলে মিলের মানদণ্ড শিথিল করা হয় এবং ম্যাচিং পুনরায় চেষ্টা করা হয়। রোবো স্ক্রিপ্ট অ্যাকশনের টার্গেট UI উইজেটের সাথে মেলানোর সময় আংশিক ম্যাচিংটি বাইরেরতম উপাদান বর্ণনাকারীকে বিবেচনা করে না।

আংশিক ম্যাচিং সফল হলে, সংশ্লিষ্ট রোবো স্ক্রিপ্ট অ্যাকশন যথারীতি সঞ্চালিত হয়। এই কৌশলটি এমন পরিস্থিতিতে সমর্থন করে যেখানে অ্যাপের কাঠামো পরিবর্তন হয়, উদাহরণস্বরূপ, অ্যাপ সংস্করণগুলির মধ্যে, যখন স্ক্রীন উপাদানগুলিকে পুনরায় সাজানো হয়।

বর্তমান কর্ম এড়িয়ে যান যদি বর্তমান রোবো স্ক্রিপ্ট অ্যাকশনটি সম্পূর্ণ বা আংশিকভাবে মেলে না, তাহলে রোবো পরবর্তী রোবো স্ক্রিপ্ট অ্যাকশনের সাথে মেলানোর চেষ্টা করে। যদি পরবর্তী অ্যাকশনটি সম্পূর্ণ বা আংশিকভাবে মেলে, তাহলে রোবো টেস্ট বর্তমান রোবো স্ক্রিপ্ট অ্যাকশনটি এড়িয়ে যায় (এবং কখনই ফিরে আসে না) এবং পরবর্তীটি সম্পাদন করে।

এই কৌশলটি এমন পরিস্থিতিতে সমর্থন করে যখন অ্যাপের আচরণ সংস্করণগুলির মধ্যে পরিবর্তিত হয় বা ফ্লেকি হয়, উদাহরণস্বরূপ, যখন একটি রোবো স্ক্রিপ্টের রিপ্লে করার বিপরীতে রেকর্ডিংয়ের সময় বিভিন্ন স্ক্রিনে একটি বিরতিমূলক ডায়ালগ উপস্থিত হতে পারে।

সাসপেন্ড যদি বর্তমান বা পরবর্তী রোবো স্ক্রিপ্ট ক্রিয়াগুলি সম্পূর্ণ বা আংশিকভাবে মেলে না, তবে রোবো স্ক্রিপ্ট সাময়িকভাবে স্থগিত করা হয় এবং রোবো পরীক্ষা তার অন্যান্য কৌশলগুলি ব্যবহার করে সম্পাদন করার জন্য একটি ক্রিয়া বেছে নেয়। এই ক্রিয়াটি সম্পন্ন হওয়ার পরে, রোবো পরীক্ষা পুনরায় শুরু করে রোবো স্ক্রিপ্ট চালানো।

যতক্ষণ না বর্তমান বা পরবর্তী রোবো স্ক্রিপ্ট অ্যাকশনগুলি মেলে না, রোবো স্ক্রিপ্ট যে কোনও সংখ্যক অ্যাকশনের জন্য স্থগিত থাকবে। এইভাবে, রোবো স্ক্রিপ্টগুলিকে রোবো পরীক্ষার জন্য একটি প্রস্তাবনা হওয়ার প্রয়োজন নেই এবং আপনি রোবো স্ক্রিপ্টের ক্রিয়াগুলিকে স্ট্যান্ডার্ড রোবো পরীক্ষার ক্রিয়াগুলির সাথে ছেদ করতে পারেন৷ এই কৌশলটি এমন পরিস্থিতিতে সমর্থন করে যখন অ্যাপের আচরণ অস্পষ্ট হয়, অথবা যখন অ্যাপের সংস্করণগুলির মধ্যে পরিবর্তনগুলি যথেষ্ট বড় হয় যে রোবো পরীক্ষাকে তার আদর্শ ক্রিয়াগুলির সাথে "শূন্যস্থান পূরণ" করতে হবে।

অগ্রাধিকার

যদি একটি রোবো স্ক্রিপ্ট তার maxNumberOfRuns পৌঁছায়, তাহলে প্রদত্ত ক্রলের মধ্যে এটি আর ট্রিগার করা যাবে না। যদি বর্তমান প্রেক্ষাপটে একাধিক রোবো স্ক্রিপ্ট ট্রিগার করা যায়, তাহলে নিম্নলিখিত ক্রমে, রোবো স্ক্রিপ্টটি বেছে নেওয়ার মাধ্যমে অগ্রাধিকার দেওয়া হয়:

  1. একটি contextDescriptor বৈশিষ্ট্য আছে।
  2. সর্বোচ্চ priority রয়েছে (ডিফল্টরূপে, সমস্ত রোবো স্ক্রিপ্টের 1 এর একই সম্পাদন priority রয়েছে)।
  3. রোবো স্ক্রিপ্টের অগ্রাধিকার একই হলে রোবো স্ক্রিপ্টের তালিকায় প্রথম দিকে প্রদর্শিত হবে।

নিম্নলিখিতটি তিনটি রোবো স্ক্রিপ্ট সহ একটি ফাইলের উদাহরণ যা একই ক্রিয়া সম্পাদন করে এবং একই অবস্থার দ্বারা ট্রিগার হয় - অ্যাপ-আন্ডার-টেস্টটি অগ্রভাগে রয়েছে:

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

যখন অ্যাপ-আন্ডার-টেস্ট ফোরগ্রাউন্ডে থাকে, তখন রোবো ক্রমানুসারে নিম্নলিখিতগুলি ট্রিগার করে:

  1. "Robo script 2" কারণ এটির সর্বোচ্চ অগ্রাধিকার রয়েছে।
  2. "Robo script 1" কারণ এটি একই অগ্রাধিকার সহ বাকি প্রযোজ্য রোবো স্ক্রিপ্টগুলির মধ্যে আগে উপস্থিত হয়৷
  3. শেষ প্রযোজ্য রোবো স্ক্রিপ্ট হিসাবে "Robo script 3"

বারবার রান

ডিফল্টরূপে, রোবো ক্রল করার সময় সর্বাধিক একবারে একটি রোবো স্ক্রিপ্ট ট্রিগার করে। এটি maxNumberOfRuns অ্যাট্রিবিউটের মাধ্যমে সামঞ্জস্য করা যেতে পারে।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্টের একটি উদাহরণ যা অ্যাপ-আন্ডার-টেস্টকে 10 বার পর্যন্ত ব্যাকগ্রাউন্ডে নিয়ে আসে:

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

ক্রল মঞ্চ

রোবো স্ক্রিপ্ট প্রদত্ত রোবো ক্রলের বিভিন্ন পর্যায়ে প্রযোজ্য:

ক্রল মঞ্চ বর্ণনা
pre_crawl রোবো চালু হওয়ার আগে এবং অ্যাপ-আন্ডার-টেস্ট ক্রল করা শুরু করে।
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"
        }
      ]
    }
  ]
}

শর্তাধীন কর্ম

একটি রোবো স্ক্রিপ্ট শর্তাধীন ক্রিয়া ধারণ করতে পারে। শর্তসাপেক্ষ ক্রিয়াগুলির তিনটি অতিরিক্ত বৈশিষ্ট্য রয়েছে যা বর্ণনা করে যে রোবো কীভাবে সেগুলি সম্পাদন করে:

বৈশিষ্ট্য বর্ণনা
priority অন্যান্য শর্তসাপেক্ষ কর্মের তুলনায় এই শর্তসাপেক্ষ কর্মের অগ্রাধিকার এটির মধ্যে থাকা Robo স্ক্রিপ্টের মধ্যে। ডিফল্টরূপে, সমস্ত শর্তসাপেক্ষ কর্মের অগ্রাধিকার থাকে 1
maxNumberOfRuns এটিতে থাকা Robo স্ক্রিপ্টের একটি সম্পাদনের সময় এই শর্তাধীন ক্রিয়াটি কতবার সঞ্চালিত হতে পারে। ডিফল্টরূপে, সমস্ত শর্তসাপেক্ষ ক্রিয়াগুলি তাদের সমন্বিত রোবো স্ক্রিপ্টের একক সঞ্চালনে সর্বাধিক একবারে সঞ্চালিত হতে পারে।
contextDescriptor প্রসঙ্গ/শর্ত যা এই শর্তাধীন ক্রিয়াকে ট্রিগার করে। এটির একই কাঠামো রয়েছে এবং এটি রোবো স্ক্রিপ্টের প্রসঙ্গ বর্ণনাকারীর মতো একই ক্ষমতা সরবরাহ করে

যখন ট্রিগার করা হয়, তখন একটি রোবো স্ক্রিপ্ট তার অ-শর্তহীন ক্রিয়াগুলি একে একে একে একে চেহারার ক্রমানুসারে সম্পাদন করে। যদি একটি রোবো স্ক্রিপ্টে শর্তসাপেক্ষ অ্যাকশন থাকে, তাহলে প্রতিবার সেগুলিকে সঞ্চালনের জন্য শর্তহীন অ্যাকশন বাছাই করার আগে বিবেচনা করা হয়। যদি কোনো শর্তসাপেক্ষ অ্যাকশন ট্রিগার করা হয় এবং তার অগ্রাধিকার এবং বাকি রানের সংখ্যার ভিত্তিতে বাছাই করা হয়, তাহলে রোবো স্ক্রিপ্ট এই শর্তসাপেক্ষ অ্যাকশনটি সম্পাদন করে। অন্যথায়, রোবো স্ক্রিপ্ট নিম্নলিখিত শর্তহীন ক্রিয়া সম্পাদন করে। বৈধ হতে, একটি রোবো স্ক্রিপ্টে কমপক্ষে একটি শর্তহীন ক্রিয়া থাকতে হবে।

নিম্নোক্ত শর্তহীন রবো স্ক্রিপ্টের একটি উদাহরণ যা শর্তসাপেক্ষ ক্রিয়া সহ পপআপ ডায়ালগগুলিকে খারিজ করে দেয় যদি সেগুলি রোবো স্ক্রিপ্ট সম্পাদনের সময় যে কোনও সময়ে প্রদর্শিত হয়:

{
  "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": "DELAYED_MESSAGE_POSTED",
      "delayTime": 10000
    },
    {
      "description": "Screen on",
      "eventType": "ADB_SHELL_COMMAND",
      "command": "input keyevent 82"
    },
    {
      "description": "Wait for 10 seconds",
      "eventType": "DELAYED_MESSAGE_POSTED",
      "delayTime": 10000
    }
}

কর্ম উপেক্ষা

একটি রোবো স্ক্রিপ্টে একটি নির্দিষ্ট স্ক্রিনে নির্দিষ্ট UI উইজেট বা সমস্ত UI উইজেট উপেক্ষা করার জন্য Robo-এর নির্দেশাবলী থাকতে পারে। এই নির্দেশাবলী eventType ELEMENT_IGNORED এবং ALL_ELEMENTS_IGNORED অনুরূপভাবে "ক্রিয়াগুলি" উপেক্ষা করা হিসাবে উপস্থাপন করা হয়েছে৷

যখনই রোবো স্ক্রিপ্টের contextDescriptor অ্যাট্রিবিউট উপেক্ষা করার ক্রিয়াগুলি একটি প্রদত্ত স্ক্রিনের সাথে মেলে, তখন রোবো তার উপেক্ষা করার ক্রিয়া দ্বারা লক্ষ্যযুক্ত কোনও UI উইজেটের সাথে ইন্টারঅ্যাক্ট করে না (যদি না অন্য কিছু রোবো স্ক্রিপ্ট অ্যাকশন রোবোকে উপেক্ষা করা UI উইজেটগুলির একটিতে একটি ক্রিয়া সম্পাদন করে)।

একটি রোবো স্ক্রিপ্টে উপেক্ষা করা, শর্তসাপেক্ষ এবং শর্তহীন ক্রিয়াগুলির মিশ্রণ থাকতে পারে। অন্যান্য রোবো স্ক্রিপ্ট অ্যাকশন থেকে ভিন্ন, priority এবং maxNumberOfRuns অ্যাট্রিবিউটের মান নির্বিশেষে, রোবো স্ক্রিপ্টের contextDescriptor একটি রোবো ক্রল চলাকালীন একটি স্ক্রিনের সাথে মেলে ততক্ষণ উপেক্ষা করা অ্যাকশন প্রয়োগ করা হয়।

নিম্নলিখিত দুটি রোবো স্ক্রিপ্ট সহ একটি ফাইলের উদাহরণ। প্রথম রোবো স্ক্রিপ্টটি একটি রিসোর্স আইডি "my.app.package:id/ignored_screen" সহ একটি UI উইজেট ধারণকারী স্ক্রিনের সমস্ত UI উইজেট রোবোকে উপেক্ষা করে। দ্বিতীয় রোবো স্ক্রিপ্টটি Robo UI উইজেটগুলিকে উপেক্ষা করে যার রিসোর্স আইডিগুলি Java regex ".*:id/done" এর সাথে মেলে একটি রিসোর্স আইডি "my.app.package:id/main_screen" সহ একটি UI উইজেট ধারণকারী স্ক্রিনে।

[
  {
    "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 উইজেটগুলির শিশুগুলি গতিশীলভাবে লোড হয় এবং বর্তমান স্ক্রীন থেকে অনেক সোয়াইপ দূরে প্রদর্শিত হতে পারে৷ যেহেতু একটি স্ক্রিনের আকার, এবং এই সন্তানের কাছে যাওয়ার জন্য প্রয়োজনীয় সোয়াইপের সংখ্যা, বিভিন্ন ডিভাইস ফর্ম ফ্যাক্টরের জন্য আলাদা, তাই সন্তানের ডেটা অবস্থানের উপর নির্ভর করা অনেক বেশি শক্তিশালী, যা সম্পূর্ণ। এই শিশুটিকে স্ক্রিনে আনতে এবং তারপরে এর স্ক্রীন অবস্থান ব্যবহার করার জন্য প্রয়োজনীয় সোয়াইপের সংখ্যার উপর নির্ভর করা এটি একটি কম শক্তিশালী পদ্ধতি।

তাই, Robo স্ক্রিপ্ট RecyclerView শিশুদের নিখুঁত ডেটা অবস্থানগুলি ক্যাপচার করে যেগুলি recyclerViewChildPosition হিসাবে Robo স্ক্রিপ্ট অ্যাকশনের লক্ষ্য। রোবো স্ক্রিপ্ট অ্যাডাপ্টারভিউ বাচ্চাদের নিখুঁত ডেটা অবস্থানগুলিও ক্যাপচার করে যা adapterViewChildPosition হিসাবে রোবো স্ক্রিপ্ট অ্যাকশনের লক্ষ্য।

RecyclerView এবং AdapterView শিশুদের উপর ক্রিয়াকলাপ নিম্নলিখিত ধাপে সঞ্চালিত হয়:

  1. রোবো পরীক্ষা নিশ্চিত করে যে সংশ্লিষ্ট শিশুটি রিসাইক্লারভিউ বা অ্যাডাপ্টারভিউ ধারণকারী পজিশনিং অ্যাকশনের মাধ্যমে স্ক্রিনে প্রদর্শিত হবে।

  2. রোবো টেস্ট সরাসরি চাইল্ড এলিমেন্টে রেকর্ড করা ক্রিয়া সম্পাদন করে, যেহেতু এটি ইতিমধ্যেই স্ক্রিনে প্রদর্শিত হয়েছে।

নিম্নলিখিতটি একটি অ্যাডাপ্টারভিউ ( 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
    }
  ]
}

অ্যান্ড্রয়েড স্টুডিওতে একটি রোবো স্ক্রিপ্ট রেকর্ড করুন এবং এটি Test Lab চালান

আপনি অ্যান্ড্রয়েড স্টুডিওতে একটি রোবো স্ক্রিপ্ট তৈরি করতে পারেন, যা স্ক্রিপ্টটিকে একটি JSON ফাইল হিসাবে সংরক্ষণ করে। তারপরে আপনি অ্যাপ্লিকেশন সহ Firebase Test Lab JSON ফাইল আপলোড করতে পারেন এবং সেই অনুযায়ী পরীক্ষা চালাতে পারেন।

আপনি যখন একটি স্ক্রিপ্ট সংযুক্ত করে একটি রোবো পরীক্ষা চালান, তখন রোবো পরীক্ষাটি প্রথমে আপনার প্রাক-স্ক্রিপ্ট করা ক্রিয়াগুলির মাধ্যমে পদক্ষেপ নেয় এবং তারপরে যথারীতি অ্যাপটি অন্বেষণ করে।

অ্যান্ড্রয়েড স্টুডিওতে একটি রোবো স্ক্রিপ্ট JSON ফাইল তৈরি করতে, অ্যান্ড্রয়েড স্টুডিওতে Test Lab ব্যবহার করে একটি রোবো স্ক্রিপ্ট রেকর্ড করার ধাপগুলি অনুসরণ করুন।

রোবো স্ক্রিপ্ট অ্যাকশন

নিম্নলিখিত সাধারণ ঐচ্ছিক বৈশিষ্ট্য সমস্ত কর্মের জন্য প্রযোজ্য:

  • description - রোবো টেস্ট আউটপুটগুলিতে এই রোবো স্ক্রিপ্ট অ্যাকশনের ট্র্যাক সম্পাদনে সহায়তা করে।

দাবী

যদি দাবি করা শর্তটি সত্য হয়, তাহলে রোবো স্ক্রিপ্ট পরবর্তী ক্রিয়ায় চলতে থাকে, যা অন্য দাবি হতে পারে। অন্যথায়, একটি ব্যর্থ দাবির কারণে রোবো স্ক্রিপ্ট কার্যকর করা বন্ধ করা হয়েছে।

নিম্নলিখিত সারণী প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করে:

বৈশিষ্ট্য বর্ণনা
"eventType": "ASSERTION" --
contextDescriptor দাবিকৃত প্রসঙ্গ বা শর্ত বর্ণনা করে। এটির একই কাঠামো রয়েছে এবং এটি রোবো স্ক্রিপ্টের কনটেক্সটডিসক্রিপ্টরের মতো একই রকম ক্ষমতা প্রদান করে।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্টের দাবির উদাহরণ যা পরীক্ষা করে যে অ্যাপ-আন্ডার-টেস্ট অগ্রভাগে রয়েছে:

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

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট দাবির একটি উদাহরণ যা পরীক্ষা করে যে রিসোর্স আইডি "com.google.samples.apps.topeka:id/done" সহ একটি UI উইজেট একটি স্ক্রিনে উপস্থিত রয়েছে:

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

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট দাবীর উদাহরণ যা পরীক্ষা করে যে OCR ব্যবহার করে একটি স্ক্রিনে "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" তালিকা আইটেম ক্লিক করার জন্য অ্যান্ড্রয়েড স্টুডিওতে রোবো স্ক্রিপ্ট রেকর্ডার দ্বারা ব্যবহৃত।
elementDescriptors Android UI অনুক্রম ব্যবহার করে ক্লিক করা UI উইজেট সনাক্ত করে। visionText এর সাথে পারস্পরিক একচেটিয়া।
visionText OCR ব্যবহার করে ক্লিক করা উপাদান সনাক্ত করে। elementDescriptors এর সাথে পারস্পরিকভাবে একচেটিয়া।
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"
    }
  ]
}

নিচে একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা OCR ব্যবহার করে স্ক্রিনে সনাক্ত করা "Privacy Policy" -তে ক্লিক করে:

{
  "eventType": "VIEW_CLICKED",
  "visionText": "Privacy Policy"
}

নিম্নলিখিত একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা একটি বিষয়বস্তুর বিবরণ "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 অ্যান্ড্রয়েড ডিবাগ ব্রিজ (এডিবি) শেল কমান্ড কার্যকর করতে।

নিম্নলিখিত বৈশিষ্ট্য ঐচ্ছিক:

  • expectedOutputRegex - জাভা রেগুলার এক্সপ্রেশন হিসাবে কমান্ডের প্রত্যাশিত আউটপুট। যদি আউটপুট মেলে না, রোবো স্ক্রিপ্ট অ্যাকশন ব্যর্থ হয়। ডিফল্টরূপে, এটি একটি খালি স্ট্রিং, যার মানে আউটপুট চেক করা হয় না।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা অ্যাপ-আন্ডার-টেস্ট ব্যবহারকারী ডেটা সাফ করে:

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

অনুমতি দিন

এসপ্রেসো টেস্ট রেকর্ডারের সাথে ব্যাকওয়ার্ড সামঞ্জস্যের জন্য এই অ্যাকশনটি অ্যান্ড্রয়েড স্টুডিওতে রোবো স্ক্রিপ্ট রেকর্ডার দ্বারা রেকর্ড করা হয়েছে। রোবো পরীক্ষা প্রতিটি ক্রলের শুরুতে অ্যাপ-আন্ডার-টেস্টের সমস্ত অনুমতি দেয় এবং এইভাবে, এই ক্রিয়াটি নো-অপ। আপনার রোবো স্ক্রিপ্টে এই ক্রিয়াটি ব্যবহার করবেন না।

নিম্নলিখিত সারণী প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করে:

বৈশিষ্ট্য বর্ণনা
"eventType": "PERMISSIONS_REQUEST" --

একটি পর্দায় সমস্ত উপাদান উপেক্ষা করুন

এই ক্রিয়াটি রোবোকে যে কোনও স্ক্রিনে থাকা সমস্ত উপাদানকে উপেক্ষা করে যা রবো স্ক্রিপ্টটি ট্রিগার করে।

নিম্নলিখিত সারণী প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করে:

বৈশিষ্ট্য বর্ণনা
"eventType": "ALL_ELEMENTS_IGNORED" --

নিম্নলিখিত একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা রোবোকে একটি স্ক্রিনের সমস্ত উপাদান উপেক্ষা করে:

{
  "eventType": "ALL_ELEMENTS_IGNORED"
}

একটি উপাদান উপেক্ষা করুন

এই ক্রিয়াটি রোবোকে একটি উপাদান (বা উপাদান) উপেক্ষা করে যা নির্দিষ্ট elementDescriptors সাথে মেলে।

নিম্নলিখিত সারণী প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করে:

বৈশিষ্ট্য বর্ণনা
"eventType": "ELEMENT_IGNORED" --
elementDescriptors Android UI অনুক্রম ব্যবহার করে উপেক্ষিত UI উইজেট(গুলি) সনাক্ত করে৷

নিম্নলিখিত বৈশিষ্ট্য ঐচ্ছিক:

  • ignoreChildren - যদি true তে সেট করা থাকে, Robo উপেক্ষা করা UI উইজেট(গুলি) এর সমস্ত বংশধরকেও উপেক্ষা করে। ডিফল্টরূপে, এটা false .

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা রোবোকে সমস্ত উপাদান উপেক্ষা করে, যার বিষয়বস্তুর বিবরণ "Avatar" দিয়ে শুরু হয়:

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

ইনপুট পাঠ্য

নিম্নলিখিত সারণী প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করে:

বৈশিষ্ট্য বর্ণনা
eventType রোবো স্ক্রিপ্ট অ্যাকশনের ধরন নির্দিষ্ট করে।
"eventType": "VIEW_TEXT_CHANGED" টার্গেট UI উইজেটে প্রদত্ত টেক্সট ইনপুট করে।
"eventType": "ENTER_TEXT" প্রদত্ত টেক্সটটিকে টার্গেট UI উইজেটে ইনপুট করে এবং তারপর এই UI উইজেটে একটি KEYCODE_ENTER ইভেন্ট পাঠায়।
elementDescriptors Android UI অনুক্রম ব্যবহার করে লক্ষ্য UI উইজেট সনাক্ত করে।
replacementText লক্ষ্য UI উইজেটে ইনপুট করার জন্য পাঠ্য।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা রিসোর্স আইডি "com.google.samples.apps.topeka:id/first_name" সহ একটি UI উইজেটে "John" ইনপুট করে :

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

দীর্ঘ ক্লিক

নিম্নলিখিত সারণী প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করে:

বৈশিষ্ট্য বর্ণনা
"eventType": "VIEW_LONG_CLICKED" --
elementDescriptors Android UI অনুক্রম ব্যবহার করে লক্ষ্য UI উইজেট সনাক্ত করে। visionText এর সাথে পারস্পরিক একচেটিয়া।
visionText OCR ব্যবহার করে দীর্ঘ ক্লিক করা উপাদান সনাক্ত করে। elementDescriptors এর সাথে পারস্পরিকভাবে একচেটিয়া।

নিম্নলিখিত বৈশিষ্ট্য ঐচ্ছিক:

  • delayTime - মিলিসেকেন্ডে দীর্ঘ ক্লিকের প্রেস ডাউন কতক্ষণ স্থায়ী হয় তা নির্দিষ্ট করে।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা একটি UI উইজেটে পাঁচ সেকেন্ড-দীর্ঘ ক্লিক করে বিষয়বস্তুর বিবরণ "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)" হিসাবে বিন্যাসিত।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা একটি চিমটি আউট অঙ্গভঙ্গি সম্পাদন করে:

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

একটি IME ক্রিয়া সম্পাদন করুন৷

এই ক্রিয়াটি বর্তমান অ্যাকশন বোতাম টিপে, উদাহরণস্বরূপ, পরবর্তী, সম্পন্ন এবং অনুসন্ধান, নির্দিষ্ট লক্ষ্য UI উইজেটের জন্য ইনপুট মেথড এডিটর (IME) এ।

নিম্নলিখিত সারণী প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করে:

বৈশিষ্ট্য বর্ণনা
"eventType": "PRESSED_EDITOR_ACTION" --
elementDescriptors Android UI অনুক্রম ব্যবহার করে লক্ষ্য UI উইজেট সনাক্ত করে।

নিম্নলিখিত একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা একটি UI উইজেটে রিসোর্স আইডি "com.google.samples.apps.topeka:id/first_name" সহ একটি IME অ্যাকশন সম্পাদন করে :

{
  "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" অ্যান্ড্রয়েড স্টুডিওতে রোবো স্ক্রিপ্ট রেকর্ডার দ্বারা এমুলেটর এপিআই 28-এ চাপ দেওয়ার জন্য ব্যবহৃত হয়।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা পিছনে চাপ দেয়:

{
  "eventType": "PRESSED_BACK"
}

হোম টিপুন

এই ক্রিয়াটি ডিভাইসে একটি KEYCODE_HOME ইভেন্ট পাঠায়৷

নিম্নলিখিত সারণী প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করে:

বৈশিষ্ট্য বর্ণনা
"eventType": "GO_HOME" --

নীচে একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা হোমে চাপ দেয়:

{
  "eventType": "GO_HOME"
}

দৃশ্যে একটি উপাদান স্ক্রোল করুন

এই ক্রিয়াটি Robo পরীক্ষাকে UI উইজেটটিকে এগিয়ে স্ক্রোল করে যা নির্দিষ্ট elementDescriptors সাথে মেলে যতক্ষণ না নির্দিষ্ট childElementDescriptors সাথে মেলে এমন UI উইজেটটি স্ক্রিনে উপস্থিত না হয়, বা স্ক্রোল করা উইজেটটি আর স্ক্রোল করা যায় না, বা সর্বাধিক 50টি স্ক্রল সংখ্যায় না পৌঁছায়৷

নিম্নলিখিত সারণী প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করে:

বৈশিষ্ট্য বর্ণনা
"eventType": "ELEMENT_SCROLL_INTO_VIEW" --
elementDescriptors Android UI অনুক্রম ব্যবহার করে স্ক্রোল করা UI উইজেট সনাক্ত করে।
childElementDescriptors Android UI অনুক্রম ব্যবহার করে স্ক্রোল করতে UI উইজেট সনাক্ত করে।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের উদাহরণ যা UI উইজেটটিকে রিসোর্স আইডি "my.app.package:id/scrollable_card_container" দিয়ে স্ক্রোল করে যতক্ষণ না স্ক্রীনে "Orange" পাঠ্য সহ UI উইজেট উপস্থিত না হয় (বা আর কোনও স্ক্রোল করা যাবে না) সঞ্চালিত হবে, অথবা সর্বাধিক 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 - লক্ষ্য UI উইজেটের উল্লম্ব বা অনুভূমিক স্ক্রোলযোগ্যতার উপর নির্ভর করে হয় Down বা Right
  • Backward - লক্ষ্য UI উইজেটের উল্লম্ব বা অনুভূমিক স্ক্রোলযোগ্যতার উপর নির্ভর করে Up বা Left
elementDescriptors Android UI অনুক্রম ব্যবহার করে লক্ষ্য UI উইজেট সনাক্ত করে।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা রিসোর্স আইডি "my.app.package:id/custom_content" সহ একটি UI উইজেট সোয়াইপ করে :

{
  "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 UI অনুক্রম ব্যবহার করে লক্ষ্য UI উইজেট সনাক্ত করে।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা একটি সিকবারের স্লাইডারকে ডানদিকে নিয়ে যায়:

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

ক্রল বন্ধ করুন

এই ক্রিয়াটি রোবো পরীক্ষা বন্ধ করে দেয়।

নিম্নলিখিত সারণী প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করে:

বৈশিষ্ট্য বর্ণনা
"eventType": "TERMINATE_CRAWL" --

নিম্নলিখিত একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা একটি রোবো পরীক্ষা বন্ধ করে:

{
  "eventType": "TERMINATE_CRAWL"
}

অপেক্ষা করুন

নিম্নলিখিত সারণী প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করে:

বৈশিষ্ট্য বর্ণনা
"eventType": "DELAYED_MESSAGE_POSTED" --
delayTime মিলিসেকেন্ডে কতক্ষণ অপেক্ষা করতে হবে তা নির্দিষ্ট করে।

নিম্নলিখিত একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা তিন সেকেন্ডের জন্য অপেক্ষা করে:

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

একটি উপাদান জন্য অপেক্ষা করুন

এই ক্রিয়াটি রোবো পরীক্ষাকে নির্দিষ্ট সময়সীমা পর্যন্ত স্ক্রিনে উপস্থিত হওয়ার জন্য একটি উপাদানের জন্য অপেক্ষা করে।

নিম্নলিখিত সারণী প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করে:

বৈশিষ্ট্য বর্ণনা
"eventType": "WAIT_FOR_ELEMENT" --
delayTime মিলিসেকেন্ডে, অপেক্ষার সময়সীমা নির্দিষ্ট করে।
elementDescriptors Android UI অনুক্রম ব্যবহার করে অপেক্ষাকৃত UI উইজেট সনাক্ত করে।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা স্ক্রিনে উপস্থিত হতে রিসোর্স আইডি "my.app.package:id/confirmation_button" সহ একটি UI উইজেটের জন্য 30 সেকেন্ড পর্যন্ত অপেক্ষা করে:

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

পরবর্তী পদক্ষেপ

,

এই নথিটি গঠন, ক্ষমতা, ব্যবহার, রেকর্ডিং এবং অ্যাকশন সহ Robo স্ক্রিপ্ট সম্পর্কে রেফারেন্স তথ্য প্রদান করে। রোবো স্ক্রিপ্টগুলি এমন পরীক্ষা যা মোবাইল অ্যাপের জন্য ম্যানুয়াল কোয়ালিটি অ্যাসুরেন্স (QA) কাজগুলিকে স্বয়ংক্রিয় করে এবং ক্রমাগত ইন্টিগ্রেশন (CI) এবং প্রি-লঞ্চ টেস্টিং কৌশলগুলি সক্ষম করে৷ একটি রোবো স্ক্রিপ্ট হল একটি JSON ফাইল যা ইউজার ইন্টারফেস (UI) এবং অন্যান্য ক্রিয়াগুলির একটি ক্রম বর্ণনা করে।

আপনি নিম্নলিখিত উপায়ে একটি রোবো স্ক্রিপ্ট তৈরি করতে পারেন:

  • Robo স্ক্রিপ্ট রেকর্ডিং বৈশিষ্ট্য ব্যবহার করুন. (শুধুমাত্র অ্যান্ড্রয়েড)

  • ম্যানুয়ালি রোবো স্ক্রিপ্ট তৈরি করুন। (Android এবং iOS+)

  • Robo স্ক্রিপ্ট রেকর্ড করুন এবং তারপর ম্যানুয়ালি সম্পাদনা করুন। (শুধুমাত্র অ্যান্ড্রয়েড)

রোবো স্ক্রিপ্ট ব্যবহার সম্পর্কে আরও জানতে, একটি রোবো স্ক্রিপ্ট চালান দেখুন।

ভূমিকা

অ্যাপ-আন্ডার-টেস্ট অ্যান্ড্রয়েড অ্যাপ্লিকেশন প্যাকেজ (এপিকে) এর মতো অন্যান্য ইনপুটগুলির পাশাপাশি রোবো স্ক্রিপ্টটি রোবো টেস্টে সরবরাহ করা হয়।

নিম্নলিখিত একটি রোবো স্ক্রিপ্টের একটি উদাহরণ যা একজন ব্যবহারকারীকে একটি অ্যাপে স্বাক্ষর করে, যা অ্যাপ-আন্ডার-টেস্ট চালু হলে ট্রিগার হয়:

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

যদি একটি ফাইলে একটি একক Robo স্ক্রিপ্ট থাকে এবং এটিতে ডিফল্ট app_under_test_shown ট্রিগারিং শর্ত থাকে, যেমন উপরের উদাহরণে, তাহলে আপনি একটি সহজ বিন্যাস ব্যবহার করে একটি ফাইলে Robo স্ক্রিপ্ট নির্দিষ্ট করতে পারেন - ঠিক তার ক্রিয়াগুলির একটি ক্রম হিসাবে:

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

Robo স্ক্রিপ্টের জন্য iOS+ সমর্থন

iOS+ (বিটা) এর জন্য Robo-এর Robo স্ক্রিপ্টের জন্য সীমিত সমর্থন রয়েছে। iOS+ এর জন্য রোবো স্ক্রিপ্ট সিনট্যাক্স অ্যান্ড্রয়েড সিনট্যাক্সের অনুরূপ, এবং সমর্থিত iOS+ বৈশিষ্ট্যগুলি তাদের অ্যান্ড্রয়েড সমকক্ষের মতোই আচরণ করে।

নিম্নলিখিত ক্রিয়াগুলি iOS+ এ সমর্থিত:

  • দাবী
  • ক্লিক করুন
  • দীর্ঘ ক্লিক
  • সোয়াইপ করুন
  • সমস্ত উপাদান (গুলি) উপেক্ষা করুন
  • অপেক্ষা করুন
  • স্ক্রিনশট নিন
  • ক্রল বন্ধ করুন

উপাদান বর্ণনাকারীতে নিম্নলিখিত সনাক্তকারী বৈশিষ্ট্যগুলি iOS+ এ সমর্থিত:

  • ক্লাসের নাম
  • পূর্বপুরুষ শ্রেণীর নাম
  • বিষয়বস্তুর বিবরণ (এবং রেজেক্স)
  • পাঠ্য (এবং রেজেক্স)

প্রসঙ্গ বর্ণনাকারীতে নিম্নলিখিত ট্রিগারিং শর্তগুলি iOS+ এ সমর্থিত:

  • পরীক্ষার অধীনে অ্যাপ দেখানো হয়েছে
  • উপাদান উপস্থিত
  • নন-রোবো স্ক্রিপ্ট অ্যাকশন সম্পাদিত

গঠন

একটি রোবো স্ক্রিপ্টের বেশ কয়েকটি বৈশিষ্ট্য রয়েছে যা বর্ণনা করে যে কীভাবে রোবো এটি কার্যকর করে। এই বৈশিষ্ট্যগুলির বেশিরভাগই পূর্বনির্ধারিত ডিফল্ট মানগুলির সাথে al চ্ছিক:

বৈশিষ্ট্য বর্ণনা
id একটি পূর্ণসংখ্যা সংখ্যা যা ক্রল আউটপুটগুলিতে এই রোবো স্ক্রিপ্টটি ট্র্যাক করতে সহায়তা করে। রোবো তাদের নিজস্ব id দিয়ে অন্তর্নির্মিত রোবো স্ক্রিপ্টগুলি রয়েছে। যদিও বিভিন্ন রোবো স্ক্রিপ্টগুলিতে একই id তাদের আচরণকে প্রভাবিত করে না, ক্রল আউটপুটগুলিতে এই রোবো স্ক্রিপ্টগুলি থেকে পৃথক ক্রিয়াকলাপগুলি চ্যালেঞ্জিং হতে পারে। আমরা কোনও দ্বন্দ্ব এড়াতে আপনার রোবো স্ক্রিপ্টগুলির জন্য 1000 বা তার বেশি একটি অনন্য id নির্ধারণের পরামর্শ দিই।
description id অনুরূপ তবে আরও বর্ণনামূলক।
crawlStage ক্রল রোবোর মঞ্চটি এই রোবো স্ক্রিপ্টটি প্রয়োগ করে। ডিফল্টরূপে, এটি মূল ক্রল পর্যায়।
priority অন্যান্য রোবো স্ক্রিপ্টগুলির তুলনায় এই রোবো স্ক্রিপ্টের অগ্রাধিকার। ডিফল্টরূপে, সমস্ত রোবো স্ক্রিপ্টগুলির একটি অগ্রাধিকার রয়েছে 1
maxNumberOfRuns ক্রল চলাকালীন কতবার রোবো এই রোবো স্ক্রিপ্টটি কার্যকর করতে পারে তা নির্দিষ্ট করে। ডিফল্টরূপে, রোবো একবারে একটি রোবো স্ক্রিপ্ট কার্যকর করতে পারে।
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 টানা অ-রোবো স্ক্রিপ্ট ক্রিয়াকলাপের সংখ্যা পূর্বে সম্পাদিত হয়েছিল। এটি প্রতিটি nonRoboscriptActionCount রোবো ক্রিয়াকলাপের পরে একটি রোবো স্ক্রিপ্ট ট্রিগার করতে non_roboscript_action_performed শর্তের সাথে সংমিশ্রণে ব্যবহৃত হয়। ডিফল্টরূপে, এটি 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"
    }
  ]
}

নীচে একটি রোবো স্ক্রিপ্টের একটি উদাহরণ রয়েছে যা প্রতিটি নন-স্ক্রিপ্ট রোবো অ্যাকশনের পরে 5 সেকেন্ডের জন্য অপেক্ষা করে:

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

কর্ম

একটি রোবো স্ক্রিপ্টে প্রতিটি ক্রিয়া এক বা একাধিক বৈশিষ্ট্য-মান জোড়াগুলির বান্ডিল হিসাবে উপস্থাপিত হয়, যা নিম্নলিখিত সারণীতে বর্ণিত হয়েছে:

বৈশিষ্ট্য বর্ণনা
eventType ক্রিয়াকলাপের ধরণটি নির্দিষ্ট করে, উদাহরণস্বরূপ, প্রতিটি ক্রিয়াকলাপের জন্য প্রয়োজনীয় ক্লিক করুন, পাঠ্য সম্পাদনা ইত্যাদি।
elementDescriptors বর্ণনাকারী যা একটি ইউআই উইজেট সনাক্ত করে। কোনও নির্দিষ্ট বোতামে ক্লিক করার মতো একটি লক্ষ্য ইউআই উইজেট রয়েছে এমন সমস্ত ক্রিয়াকলাপের জন্য প্রয়োজনীয়।
optional যদি true সেট করা হয় তবে যখন এটি সম্পাদন করা যায় না তখন এই ক্রিয়াটি এড়িয়ে যায়। উদাহরণস্বরূপ, এই ক্রিয়াটি যখন কোনও স্ক্রিনে তার লক্ষ্য ইউআই উইজেটটি খুঁজে না পায় - রোবো স্ক্রিপ্টটিতে ব্যর্থ না হয়ে। ডিফল্টরূপে, মানটি false
replacementText টার্গেট ইউআই উইজেটে ইনপুট করার পাঠ্য। পাঠ্য সম্পাদনা কর্মের জন্য প্রয়োজনীয়।
swipeDirection সোয়াইপের দিক নির্দিষ্ট করে। সোয়াইপ ক্রিয়াকলাপের জন্য প্রয়োজনীয়।
delayTime মিলিসেকেন্ডে কতক্ষণ অপেক্ষা করতে হবে তা নির্দিষ্ট করে। অপেক্ষা কর্মের জন্য প্রয়োজনীয়।
pointTapXCoordinate এবং pointTapYCoordinate ট্যাপড পয়েন্টের পিক্সেল এক্স এবং ওয়াই সমন্বয়গুলি। pointTapXPercent এবং pointTapYPercent সাথে পারস্পরিক একচেটিয়া। পয়েন্ট ট্যাপ ক্রিয়া জন্য প্রয়োজনীয়।
pointTapXPercent এবং pointTapYPercent ট্যাপড পয়েন্টের শতাংশ x এবং y স্থানাঙ্ক। pointTapXCoordinate এবং pointTapYCoordinate সাথে পারস্পরিক একচেটিয়া। পয়েন্ট ট্যাপ ক্রিয়া জন্য প্রয়োজনীয়।

নিম্নলিখিতটি ইউআই উইজেটগুলি ছাড়াই দুটি ক্রিয়াকলাপ সহ একটি রোবো স্ক্রিপ্টের উদাহরণ রয়েছে যার অর্থ এই ক্রিয়াগুলি একটি নির্দিষ্ট ইউআই উইজেটে কাজ করে না:

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

উপাদান বর্ণনাকারী

একটি উপাদান বর্ণনাকারী নীচের এক বা একাধিক সনাক্তকারী বৈশিষ্ট্য ব্যবহার করে একটি ইউআই উইজেট সনাক্ত করে:

বৈশিষ্ট্য বর্ণনা
className -
ancestorClassName এলিমেন্টের ইউআই শ্রেণিবিন্যাসের পূর্বপুরুষের শ্রেণীর নাম। পূর্বপুরুষ হ'ল উপাদানটির ইউআই শ্রেণিবিন্যাসের যে কোনও মূল নোড।
resourceId -
resourceIdRegex resourceId সাথে মেলে জাভা নিয়মিত অভিব্যক্তি।
contentDescription -
contentDescriptionRegex জাভা নিয়মিত অভিব্যক্তি contentDescription মেলে।
text (যা পর্দায় প্রদর্শিত হবে) -
textRegex জাভা নিয়মিত অভিব্যক্তি text সাথে মেলে।
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"
      }
    ]
  }
]

এক্সিকিউশন অপশন

আপনি jsonecterally একটি JSON অবজেক্টের সাথে একটি রোবো স্ক্রিপ্টে ক্রিয়াকলাপের তালিকার উপসর্গ করতে পারেন যা সেই রোবো স্ক্রিপ্টের জন্য কার্যকর করার বিকল্পগুলি নির্দিষ্ট করে। এই কনফিগারেশন শিরোনামটি roboscript কীওয়ার্ড দিয়ে শুরু হয় এবং তারপরে কাঙ্ক্ষিত এক্সিকিউশন বিকল্পগুলির একটি জেএসএন উপস্থাপনা দ্বারা শুরু হয়।

রোবো স্ক্রিপ্টগুলি নিম্নলিখিত সম্পাদন বিকল্পগুলিকে সমর্থন করে:

  • 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": "DELAYED_MESSAGE_POSTED",
    "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"
      }
    ]
  }
]

ক্ষমতা

ডিফল্টরূপে, যতক্ষণ না কোনও রোবো স্ক্রিপ্টের সমস্ত ক্রিয়া সম্পন্ন হয় (বা কমপক্ষে চেষ্টা করা হয়), রোবো স্ক্রিপ্টটি সক্রিয় থাকে। রোবো টেস্ট যখনই এটি সম্পাদন করার জন্য কোনও ক্রিয়া বাছাই করে তখন একটি রোবো স্ক্রিপ্ট অ্যাকশন মেলে দেখার চেষ্টা করে। রোবো স্ক্রিপ্ট দৃ ust ়তা বাড়ানোর জন্য নিম্নলিখিত কৌশলগুলি নিয়োগ করে:

টেকনিক বর্ণনা
আংশিক মিল যদি বর্তমান রোবো স্ক্রিপ্ট অ্যাকশনটি পুরোপুরি মেলে না, তবে ম্যাচের মানদণ্ডগুলি শিথিল করা হয় এবং মিলটি পুনরায় চেষ্টা করা হয়। আংশিক ম্যাচিং কোনও রোবো স্ক্রিপ্ট ক্রিয়াকলাপের লক্ষ্য ইউআই উইজেটের সাথে মিলে বাহ্যতম উপাদান বর্ণনাকারীকে বিবেচনা করে না।

যদি আংশিক মিলটি সফল হয় তবে সংশ্লিষ্ট রোবো স্ক্রিপ্ট ক্রিয়াটি যথারীতি সম্পাদিত হয়। এই কৌশলটি এমন পরিস্থিতিতে সমর্থন করে যেখানে অ্যাপ্লিকেশন কাঠামো পরিবর্তিত হয়, উদাহরণস্বরূপ, অ্যাপ্লিকেশন সংস্করণগুলির মধ্যে, যখন স্ক্রিন উপাদানগুলি পুনরায় সাজানো হয়।

বর্তমান ক্রিয়া এড়িয়ে যান যদি বর্তমান রোবো স্ক্রিপ্ট অ্যাকশনটি পুরোপুরি বা আংশিকভাবে মেলে না, তবে রোবো পরবর্তী রোবো স্ক্রিপ্ট ক্রিয়াটির সাথে মেলে চেষ্টা করে। যদি পরবর্তী ক্রিয়াটি পুরোপুরি বা আংশিকভাবে মেলে, রোবো টেস্ট বর্তমান রোবো স্ক্রিপ্ট ক্রিয়াটি এড়িয়ে যায় (এবং কখনও ফিরে আসে না) এবং পরবর্তীকালে এটি সম্পাদন করে।

এই কৌশলটি যখন সংস্করণগুলির মধ্যে পরিবর্তন করে বা ফ্লেকি হয় তখন অ্যাপের আচরণ পরিবর্তন হয় তখন পরিস্থিতি সমর্থন করে, উদাহরণস্বরূপ, যখন কোনও রোবো স্ক্রিপ্টটির পুনরায় খেলতে রেকর্ডিংয়ের সময় কোনও অন্তর্বর্তী কথোপকথন বিভিন্ন স্ক্রিনে উপস্থিত হতে পারে।

সাসপেন্ড যদি বর্তমান বা পরবর্তী রোবো স্ক্রিপ্টের ক্রিয়াগুলি পুরোপুরি বা আংশিকভাবে মিল না হয় তবে রোবো স্ক্রিপ্টটি সাময়িকভাবে স্থগিত করা হয় এবং রোবো পরীক্ষা তার অন্যান্য কৌশলগুলি ব্যবহার করে সম্পাদন করার জন্য কোনও পদক্ষেপ গ্রহণ করে। এই ক্রিয়াটি শেষ হওয়ার পরে, রোবো পরীক্ষা পুনরায় স্ক্রিপ্ট কার্যকর করে পুনরায় শুরু করে।

যতক্ষণ না বর্তমান বা পরবর্তী রোবো স্ক্রিপ্টের ক্রিয়াগুলি মেলে না, রোবো স্ক্রিপ্ট যে কোনও সংখ্যক ক্রিয়াকলাপের জন্য স্থগিত রয়েছে। সুতরাং, রোবো স্ক্রিপ্টগুলি অগত্যা একটি রোবো পরীক্ষার জন্য প্রোলোগ হওয়ার প্রয়োজন হয় না এবং আপনি স্ট্যান্ডার্ড রোবো পরীক্ষার ক্রিয়াকলাপগুলির সাথে রোবো স্ক্রিপ্ট ক্রিয়াগুলিকে ছেদ করতে পারেন। এই কৌশলটি যখন অ্যাপের আচরণটি ফ্লেকযুক্ত হয় বা অ্যাপ্লিকেশন সংস্করণগুলির মধ্যে পরিবর্তনগুলি যথেষ্ট পরিমাণে বড় হয় তখন রোবো পরীক্ষাটি তার স্ট্যান্ডার্ড ক্রিয়াকলাপগুলির সাথে "ফাঁকগুলি পূরণ করতে" প্রয়োজন।

অগ্রাধিকার

যদি কোনও রোবো স্ক্রিপ্টটি তার maxNumberOfRuns পৌঁছে যায় তবে এটি আর প্রদত্ত ক্রলটিতে আর ট্রিগার করা যায় না। যদি বর্তমান প্রসঙ্গে একাধিক রোবো স্ক্রিপ্টটি ট্রিগার করা যায় তবে নিম্নলিখিত ক্রমে, রোবো স্ক্রিপ্টটি বেছে নেওয়ার মাধ্যমে অগ্রাধিকার দেওয়া হয়:

  1. একটি contextDescriptor বৈশিষ্ট্য আছে।
  2. সর্বোচ্চ priority রয়েছে (ডিফল্টরূপে, সমস্ত রোবো স্ক্রিপ্টগুলির 1 এর একই সম্পাদনের priority রয়েছে)।
  3. রোবো স্ক্রিপ্টগুলির তালিকার প্রথম দিকে উপস্থিত হয়, যদি রোবো স্ক্রিপ্টগুলির অগ্রাধিকার একই হয়।

নীচে তিনটি রোবো স্ক্রিপ্ট সহ একটি ফাইলের উদাহরণ রয়েছে যা একই ক্রিয়া সম্পাদন করে এবং একই শর্ত দ্বারা ট্রিগার করা হয়-অ্যাপ্লিকেশন-আন্ডার-টেস্টটি অগ্রভাগে রয়েছে:

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

যখন অ্যাপ-আন্ডার-টেস্টটি অগ্রভাগে থাকে, তখন রোবো নিম্নলিখিতগুলি ট্রিগার করে: ক্রমানুসারে:

  1. "Robo script 2" কারণ এটির সর্বোচ্চ অগ্রাধিকার রয়েছে।
  2. "Robo script 1" কারণ এটি একই অগ্রাধিকারের সাথে বাকী প্রযোজ্য রোবো স্ক্রিপ্টগুলির মধ্যে আগে উপস্থিত হয়।
  3. "Robo script 3" সর্বশেষ প্রযোজ্য রোবো স্ক্রিপ্ট হিসাবে।

বারবার রান

ডিফল্টরূপে, রোবো একটি ক্রল চলাকালীন সময়ে একটি রোবো স্ক্রিপ্ট ট্রিগার করে। এটি maxNumberOfRuns বৈশিষ্ট্যের মাধ্যমে সামঞ্জস্য করা যেতে পারে।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্টের একটি উদাহরণ যা অ্যাপ-আন্ডার-টেস্টকে 10 বারের জন্য পটভূমিতে নিয়ে আসে:

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

ক্রল মঞ্চ

প্রদত্ত রোবো ক্রলের বিভিন্ন পর্যায়ে রোবো স্ক্রিপ্টগুলি প্রযোজ্য:

ক্রল মঞ্চ বর্ণনা
pre_crawl রোবো চালু এবং অ্যাপ-আন্ডার-টেস্টটি ক্রল করা শুরু করার আগে।
post_crawl রোবো অ্যাপ-আন্ডার-টেস্টটি ক্রল করে শেষ করার পরে। একটি post_crawl রোবো স্ক্রিপ্টটি সময়কালে 15 সেকেন্ডের বেশি হওয়া উচিত নয় অন্যথায় ক্রলটি একটি সময়সীমার মধ্যে শেষ হতে পারে।
crawl মূল ক্রল মঞ্চ, যখন রোবো অ্যাপ-আন্ডার-টেস্টটি ক্রল করে।
close_screen যখন রোবো প্রদত্ত স্ক্রিন থেকে ফিরে (ব্যাকট্র্যাক) ফিরে আসার চেষ্টা করে, যখন এই স্ক্রিনের সমস্ত সম্ভাব্য ক্রিয়াগুলি অন্বেষণ করা হয়। ডিফল্টরূপে, রোবো পিছনে টিপে, যা কিছু পরিস্থিতিতে অনাকাঙ্ক্ষিত।

যদি কোনও রোবো স্ক্রিপ্টের 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"
        }
      ]
    }
  ]
}

শর্তাধীন ক্রিয়া

একটি রোবো স্ক্রিপ্টে শর্তাধীন ক্রিয়া থাকতে পারে। শর্তাধীন ক্রিয়াকলাপগুলিতে তিনটি অতিরিক্ত বৈশিষ্ট্য রয়েছে যা রোবো কীভাবে সেগুলি সম্পাদন করে তা বর্ণনা করে:

বৈশিষ্ট্য বর্ণনা
priority রোবো স্ক্রিপ্টযুক্ত অন্যান্য শর্তসাপেক্ষ ক্রিয়াকলাপের তুলনায় এই শর্তাধীন ক্রিয়াটির অগ্রাধিকার। ডিফল্টরূপে, সমস্ত শর্তাধীন ক্রিয়াকলাপের 1 এর অগ্রাধিকার রয়েছে।
maxNumberOfRuns এর মধ্যে থাকা রোবো স্ক্রিপ্টটি সম্পাদনের সময় এই শর্তাধীন ক্রিয়াটি কতবার করা যেতে পারে। ডিফল্টরূপে, সমস্ত শর্তযুক্ত ক্রিয়াগুলি তাদের রোবো স্ক্রিপ্টযুক্ত একক সম্পাদনায় সর্বাধিক একবারে সম্পাদন করা যেতে পারে।
contextDescriptor প্রসঙ্গ/শর্ত যা এই শর্তাধীন ক্রিয়াটিকে ট্রিগার করে। এটিতে একই কাঠামো রয়েছে এবং রোবো স্ক্রিপ্টের প্রসঙ্গে বর্ণনাকারীর মতো একই ক্ষমতা সরবরাহ করে

ট্রিগার করা হলে, একটি রোবো স্ক্রিপ্ট উপস্থিতির ক্রমে একের পর এক তার অ-শর্তযুক্ত ক্রিয়া সম্পাদন করে। যদি কোনও রোবো স্ক্রিপ্টে শর্তসাপেক্ষ ক্রিয়া থাকে, তবে সম্পাদন করার জন্য একটি অ-শর্তযুক্ত ক্রিয়া বাছাই করার আগে এগুলি প্রতিবার বিবেচনা করা হয়। যদি কোনও শর্তযুক্ত ক্রিয়াটি ট্রিগার করা হয় এবং এর অগ্রাধিকার এবং অবশিষ্ট সংখ্যার উপর ভিত্তি করে বাছাই করা হয়, তবে রোবো স্ক্রিপ্টটি এই শর্তাধীন ক্রিয়াটি সম্পাদন করে। অন্যথায়, রোবো স্ক্রিপ্টটি নিম্নলিখিত অ-শর্তযুক্ত ক্রিয়া সম্পাদন করে। বৈধ হওয়ার জন্য, একটি রোবো স্ক্রিপ্টে অবশ্যই কমপক্ষে একটি অ-শর্তযুক্ত ক্রিয়া থাকতে হবে।

নিম্নলিখিত শর্তসাপেক্ষ ক্রিয়া সহ একটি নিঃশর্ত রোবো স্ক্রিপ্টের একটি উদাহরণ রয়েছে যা পপআপ ডায়ালগগুলি খারিজ করে যদি তারা রোবো স্ক্রিপ্ট সম্পাদনের সময় কোনও মুহুর্তে প্রদর্শিত হয়:

{
  "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": "DELAYED_MESSAGE_POSTED",
      "delayTime": 10000
    },
    {
      "description": "Screen on",
      "eventType": "ADB_SHELL_COMMAND",
      "command": "input keyevent 82"
    },
    {
      "description": "Wait for 10 seconds",
      "eventType": "DELAYED_MESSAGE_POSTED",
      "delayTime": 10000
    }
}

ক্রিয়া উপেক্ষা করা

একটি রোবো স্ক্রিপ্টে নির্দিষ্ট স্ক্রিনে নির্দিষ্ট ইউআই উইজেট বা সমস্ত ইউআই উইজেট উপেক্ষা করার জন্য রোবোর জন্য নির্দেশাবলী থাকতে পারে। এই নির্দেশাবলী eventType ELEMENT_IGNORED এবং ALL_ELEMENTS_IGNORED সাথে "ক্রিয়াগুলি" উপেক্ষা হিসাবে উপস্থাপন করা হয়।

যখনই কোনও রোবো স্ক্রিপ্টের contextDescriptor বৈশিষ্ট্যগুলি উপেক্ষা করে ক্রিয়াকলাপগুলি একটি প্রদত্ত স্ক্রিনের সাথে মেলে, রোবো তার উপেক্ষা করার ক্রিয়াগুলি দ্বারা লক্ষ্যযুক্ত কোনও ইউআই উইজেটের সাথে যোগাযোগ করে না (যদি না অন্য কোনও রোবো স্ক্রিপ্ট অ্যাকশন রোবো উপেক্ষা করা ইউআই উইজেটগুলির একটিতে কোনও ক্রিয়া সম্পাদন করে না)।

একটি রোবো স্ক্রিপ্টে উপেক্ষা করা, শর্তসাপেক্ষ এবং অ-কন্ডিশনাল ক্রিয়াকলাপগুলির মিশ্রণ থাকতে পারে। অন্যান্য রোবো স্ক্রিপ্ট ক্রিয়াকলাপের বিপরীতে, priority এবং maxNumberOfRuns বৈশিষ্ট্যগুলির মান নির্বিশেষে রোবো ক্রল চলাকালীন তাদের রোবো স্ক্রিপ্টের প্রসঙ্গে contextDescriptor স্ক্রিনের সাথে মেলে যতক্ষণ না তাদের উপেক্ষা করে ক্রিয়াগুলি প্রয়োগ করা হয়।

নীচে দুটি রোবো স্ক্রিপ্ট সহ একটি ফাইলের উদাহরণ রয়েছে। প্রথম রোবো স্ক্রিপ্টটি রোবোকে একটি রিসোর্স আইডি "my.app.package:id/ignored_screen" সহ একটি ইউআই উইজেটযুক্ত একটি স্ক্রিনে সমস্ত ইউআই উইজেটগুলি উপেক্ষা করে। দ্বিতীয় রোবো স্ক্রিপ্টটি রোবোকে ইউআই উইজেটগুলি উপেক্ষা করে "my.app.package:id/main_screen" রিসোর্স আইডি জাভা রেজেক্সের সাথে মেলে ".*:id/done"

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

পুনর্ব্যবহারযোগ্য এবং অ্যাডাপ্টারভিউ সমর্থন

পুনর্ব্যবহারযোগ্য এবং অ্যাডাপ্টারভিউ উইজেটগুলির শিশুরা গতিশীলভাবে লোড হয় এবং বর্তমান পর্দা থেকে অনেক সোয়াইপ প্রদর্শিত হতে পারে। যেহেতু একটি স্ক্রিনের আকার এবং এই সন্তানের কাছে যাওয়ার জন্য প্রয়োজনীয় সোয়াইপগুলির সংখ্যা বিভিন্ন ডিভাইস ফর্মের কারণগুলির জন্য আলাদা, তাই সন্তানের ডেটা অবস্থানের উপর নির্ভর করা অনেক বেশি দৃ ust ়, যা পরম। এই শিশুটিকে স্ক্রিনে আনতে এবং তারপরে তার স্ক্রিন অবস্থানটি ব্যবহার করার জন্য প্রয়োজনীয় সোয়াইপগুলির সংখ্যার উপর নির্ভর করা কম দৃ ust ় পন্থা।

অতএব, রোবো স্ক্রিপ্ট পুনর্ব্যবহারযোগ্য শিশুদের পরম ডেটা অবস্থানগুলি ক্যাপচার করে যা রোবো স্ক্রিপ্ট ক্রিয়াকলাপগুলির লক্ষ্যগুলি recyclerViewChildPosition হিসাবে। রোবো স্ক্রিপ্ট অ্যাডাপ্টারভিউ শিশুদের পরম ডেটা অবস্থানগুলিও ক্যাপচার করে যা রোবো স্ক্রিপ্ট ক্রিয়াকলাপের টার্গেট adapterViewChildPosition হিসাবে।

পুনর্ব্যবহারযোগ্য এবং অ্যাডাপ্টারভিউয়ের ক্রিয়াকলাপগুলি নিম্নলিখিত পদক্ষেপগুলিতে সঞ্চালিত হয়:

  1. রোবো পরীক্ষা নিশ্চিত করে যে সংশ্লিষ্ট শিশুটি এর পুনর্ব্যবহারযোগ্য বা অ্যাডাপ্টারভিউযুক্ত একটি অবস্থান কর্মের মাধ্যমে স্ক্রিনে প্রদর্শিত হবে।

  2. রোবো পরীক্ষা সরাসরি শিশু উপাদানটিতে রেকর্ড করা ক্রিয়া সম্পাদন করে, যেহেতু এটি ইতিমধ্যে স্ক্রিনে প্রদর্শিত হয়েছে।

নীচে একটি অ্যাডাপ্টারভিউ ( 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
    }
  ]
}

নীচে একটি পুনর্ব্যবহারযোগ্য ( 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
    }
  ]
}

অ্যান্ড্রয়েড স্টুডিওতে একটি রোবো স্ক্রিপ্ট রেকর্ড করুন এবং এটি Test Lab চালান

আপনি অ্যান্ড্রয়েড স্টুডিওতে একটি রোবো স্ক্রিপ্ট তৈরি করতে পারেন, যা স্ক্রিপ্টটিকে জেএসএন ফাইল হিসাবে সংরক্ষণ করে। তারপরে আপনি অ্যাপ্লিকেশন সহ Firebase Test Lab জেএসএন ফাইলটি আপলোড করতে পারেন এবং সেই অনুযায়ী পরীক্ষাটি চালাতে পারেন।

আপনি যখন কোনও স্ক্রিপ্ট সংযুক্ত করে একটি রোবো পরীক্ষা চালান, রোবো পরীক্ষা আপনার প্রাক-স্ক্রিপ্টযুক্ত ক্রিয়াকলাপগুলির মাধ্যমে প্রথম পদক্ষেপগুলি এবং তারপরে অ্যাপটি যথারীতি অন্বেষণ করে।

অ্যান্ড্রয়েড স্টুডিওতে একটি রোবো স্ক্রিপ্ট জেএসএন ফাইল তৈরি করতে, অ্যান্ড্রয়েড স্টুডিওতে Test Lab ব্যবহার করে একটি রোবো স্ক্রিপ্ট রেকর্ড করার পদক্ষেপগুলি অনুসরণ করুন।

রোবো স্ক্রিপ্ট ক্রিয়া

নিম্নলিখিত সাধারণ al চ্ছিক বৈশিষ্ট্যটি সমস্ত ক্রিয়ায় প্রযোজ্য:

  • description - রোবো পরীক্ষার আউটপুটগুলিতে এই রোবো স্ক্রিপ্ট অ্যাকশনটির কার্যকরকরণ ট্র্যাক করতে সহায়তা করে।

দাবী

যদি দৃ serted ় শর্তটি সত্য হয় তবে রোবো স্ক্রিপ্টটি পরবর্তী ক্রিয়াকলাপে অব্যাহত রয়েছে, যা অন্য দৃ ser ়তা হতে পারে। অন্যথায়, একটি ব্যর্থ দাবির কারণে রোবো স্ক্রিপ্ট এক্সিকিউশনটি থামানো হয়েছে।

নিম্নলিখিত টেবিলটিতে প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করা হয়েছে:

বৈশিষ্ট্য বর্ণনা
"eventType": "ASSERTION" --
contextDescriptor দৃ serted ় প্রসঙ্গ বা শর্ত বর্ণনা করে। এটিতে একই কাঠামো রয়েছে এবং রোবো স্ক্রিপ্টের প্রসঙ্গে বর্ণনাকারীর মতো একই ক্ষমতা সরবরাহ করে।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্টের দৃ ser ়তার একটি উদাহরণ রয়েছে যা অ্যাপ্লিকেশন-আন্ডার-টেস্টটি অগ্রভাগে রয়েছে তা যাচাই করে:

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

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট দৃ ser ়তার একটি উদাহরণ যা পরীক্ষা করে যে "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" তালিকা আইটেমগুলি ক্লিক করার জন্য অ্যান্ড্রয়েড স্টুডিওতে রোবো স্ক্রিপ্ট রেকর্ডার দ্বারা ব্যবহৃত।
elementDescriptors অ্যান্ড্রয়েড ইউআই হায়ারার্কি ব্যবহার করে ক্লিক করা ইউআই উইজেট সনাক্ত করে। visionText সহ পারস্পরিক একচেটিয়া।
visionText ওসিআর ব্যবহার করে ক্লিক করা উপাদান চিহ্নিত করে। elementDescriptors সাথে পারস্পরিক একচেটিয়া।
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"
    }
  ]
}

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা ওসিআর ব্যবহার করে একটি স্ক্রিনে সনাক্ত করা "Privacy Policy" তে ক্লিক করে:

{
  "eventType": "VIEW_CLICKED",
  "visionText": "Privacy Policy"
}

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা একটি সামগ্রীর বিবরণ "Emoji button" সহ একটি নরম কীবোর্ড উপাদানকে ক্লিক করে:

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

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ রয়েছে যা এলোমেলো নরম কীবোর্ড উপাদানগুলিকে পাঁচবার পর্যন্ত ক্লিক করে:

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

নরম কীবোর্ড অক্ষম করুন

নিম্নলিখিত টেবিলটিতে প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করা হয়েছে:

বৈশিষ্ট্য বর্ণনা
"eventType": "DISABLE_KEYBOARD" --

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা নরম কীবোর্ডটি অক্ষম করে:

{
  "eventType": "DISABLE_KEYBOARD"
}

এডিবি শেল কমান্ড কার্যকর করুন

নিম্নলিখিত টেবিলটিতে প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করা হয়েছে:

বৈশিষ্ট্য বর্ণনা
"eventType": "ADB_SHELL_COMMAND" --
command অ্যান্ড্রয়েড ডিবাগ ব্রিজ (এডিবি) শেল কমান্ড কার্যকর করতে।

নিম্নলিখিত বৈশিষ্ট্যটি al চ্ছিক:

  • expectedOutputRegex - জাভা নিয়মিত অভিব্যক্তি হিসাবে কমান্ডের প্রত্যাশিত আউটপুট। যদি আউটপুট মেলে না, তবে রোবো স্ক্রিপ্ট ক্রিয়া ব্যর্থ হয়। ডিফল্টরূপে, এটি একটি খালি স্ট্রিং, যার অর্থ আউটপুট চেক করা হয় না।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা অ্যাপ-আন্ডার-টেস্ট ব্যবহারকারীর ডেটা সাফ করে:

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

অনুমতি দিন

এই ক্রিয়াটি এস্প্রেসো টেস্ট রেকর্ডারটির সাথে ব্যাকওয়ার্ড সামঞ্জস্যের জন্য অ্যান্ড্রয়েড স্টুডিওতে রোবো স্ক্রিপ্ট রেকর্ডার দ্বারা রেকর্ড করা হয়েছে। রোবো টেস্ট প্রতিটি ক্রলের শুরুতে অ্যাপ্লিকেশন-আন্ডার-টেস্টকে সমস্ত অনুমতি দেয় এবং এইভাবে, এই ক্রিয়াটি কোনও নো-অপ। আপনার রোবো স্ক্রিপ্টগুলিতে এই ক্রিয়াটি ব্যবহার করবেন না।

নিম্নলিখিত টেবিলটিতে প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করা হয়েছে:

বৈশিষ্ট্য বর্ণনা
"eventType": "PERMISSIONS_REQUEST" --

একটি পর্দার সমস্ত উপাদান উপেক্ষা করুন

এই ক্রিয়াটি রোবো যে কোনও স্ক্রিনে সমস্ত উপাদানকে উপেক্ষা করে যা রোবো স্ক্রিপ্টযুক্ত ট্রিগার করে।

নিম্নলিখিত টেবিলটিতে প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করা হয়েছে:

বৈশিষ্ট্য বর্ণনা
"eventType": "ALL_ELEMENTS_IGNORED" --

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা রোবোকে একটি স্ক্রিনে সমস্ত উপাদান উপেক্ষা করে তোলে:

{
  "eventType": "ALL_ELEMENTS_IGNORED"
}

একটি উপাদান উপেক্ষা করুন

এই ক্রিয়াটি রোবোকে এমন একটি উপাদান (বা উপাদান) উপেক্ষা করে যা নির্দিষ্ট elementDescriptors সাথে মেলে।

নিম্নলিখিত টেবিলটিতে প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করা হয়েছে:

বৈশিষ্ট্য বর্ণনা
"eventType": "ELEMENT_IGNORED" --
elementDescriptors অ্যান্ড্রয়েড ইউআই হায়ারার্কি ব্যবহার করে উপেক্ষিত ইউআই উইজেট (গুলি) সনাক্ত করে।

নিম্নলিখিত বৈশিষ্ট্যটি al চ্ছিক:

  • ignoreChildren - যদি true সেট করা হয় তবে রোবো উপেক্ষা করা ইউআই উইজেট (গুলি) এর সমস্ত বংশধরকেও উপেক্ষা করে। ডিফল্টরূপে, এটা false .

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা রোবোকে সমস্ত উপাদানকে উপেক্ষা করে তোলে, যার সামগ্রীর বিবরণগুলি "Avatar" দিয়ে শুরু হয়:

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

ইনপুট পাঠ্য

নিম্নলিখিত টেবিলটিতে প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করা হয়েছে:

বৈশিষ্ট্য বর্ণনা
eventType রোবো স্ক্রিপ্ট অ্যাকশনের ধরণ নির্দিষ্ট করে।
"eventType": "VIEW_TEXT_CHANGED" লক্ষ্য ইউআই উইজেটে প্রদত্ত পাঠ্যটি ইনপুট করে।
"eventType": "ENTER_TEXT" প্রদত্ত পাঠ্যটিকে টার্গেট ইউআই উইজেটে ইনপুট করে এবং তারপরে এই ইউআই উইজেটে একটি KEYCODE_ENTER ইভেন্ট প্রেরণ করে।
elementDescriptors অ্যান্ড্রয়েড ইউআই হায়ারার্কি ব্যবহার করে টার্গেট ইউআই উইজেট চিহ্নিত করে।
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 অ্যান্ড্রয়েড ইউআই হায়ারার্কি ব্যবহার করে টার্গেট ইউআই উইজেট চিহ্নিত করে। visionText সহ পারস্পরিক একচেটিয়া।
visionText ওসিআর ব্যবহার করে দীর্ঘ ক্লিক করা উপাদান চিহ্নিত করে। elementDescriptors সাথে পারস্পরিক একচেটিয়া।

নিম্নলিখিত বৈশিষ্ট্যটি al চ্ছিক:

  • delayTime - মিলিসেকেন্ডে দীর্ঘ ক্লিকের প্রেস ডাউনটি কতক্ষণ স্থায়ী হয় তা নির্দিষ্ট করে।

নীচে একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ রয়েছে যা সামগ্রীর বিবরণ "Avatar 8" সহ একটি ইউআই উইজেটে পাঁচ সেকেন্ড দীর্ঘ ক্লিক করে:

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

এক-পয়েন্ট অঙ্গভঙ্গি সম্পাদন করুন

নিম্নলিখিত টেবিলটিতে প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করা হয়েছে:

বৈশিষ্ট্য বর্ণনা
"eventType": "ONE_POINT_GESTURE" --
coordinates এক-পয়েন্ট অঙ্গভঙ্গির জন্য দুটি সমন্বয়, "(x1, y1)-> (x2, y2)" হিসাবে শতাংশ বা পিক্সেল হিসাবে।

নিম্নলিখিত বৈশিষ্ট্যটি al চ্ছিক:

  • 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)" হিসাবে শতাংশ বা পিক্সেল হিসাবে ফর্ম্যাট করা একটি দ্বি-পয়েন্ট অঙ্গভঙ্গির জন্য চারটি স্থানাঙ্ক।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা একটি চিমটি আউট অঙ্গভঙ্গি সম্পাদন করে:

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

একটি আইএমই ক্রিয়া সম্পাদন করুন

এই ক্রিয়াটি বর্তমান অ্যাকশন বোতামটি টিপে, উদাহরণস্বরূপ, পরবর্তী, সম্পন্ন এবং অনুসন্ধান, নির্দিষ্ট টার্গেট ইউআই উইজেটের জন্য ইনপুট পদ্ধতি সম্পাদক (আইএমই) এ।

নিম্নলিখিত টেবিলটিতে প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করা হয়েছে:

বৈশিষ্ট্য বর্ণনা
"eventType": "PRESSED_EDITOR_ACTION" --
elementDescriptors অ্যান্ড্রয়েড ইউআই হায়ারার্কি ব্যবহার করে টার্গেট ইউআই উইজেট চিহ্নিত করে।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা রিসোর্স আইডি "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" অ্যান্ড্রয়েড স্টুডিওতে রোবো স্ক্রিপ্ট রেকর্ডার দ্বারা ব্যবহৃত এমুলেটর এপিআই 28 এ ফিরে টিপানোর জন্য।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা পিছনে চাপ দেয়:

{
  "eventType": "PRESSED_BACK"
}

বাড়িতে টিপুন

এই ক্রিয়াটি ডিভাইসে একটি KEYCODE_HOME ইভেন্ট প্রেরণ করে।

নিম্নলিখিত টেবিলটিতে প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করা হয়েছে:

বৈশিষ্ট্য বর্ণনা
"eventType": "GO_HOME" --

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা বাড়িতে চাপ দেয়:

{
  "eventType": "GO_HOME"
}

ভিউতে একটি উপাদান স্ক্রোল করুন

এই ক্রিয়াটি রোবো টেস্ট স্ক্রোলকে ইউআই উইজেটকে এগিয়ে নিয়ে যায় যা নির্দিষ্ট elementDescriptors সাথে মেলে যতক্ষণ না নির্দিষ্ট childElementDescriptors সাথে মেলে UI উইজেটটি স্ক্রিনে উপস্থিত থাকে, বা স্ক্রোলযুক্ত উইজেটটি আর স্ক্রোল করা যায় না, বা 50 টি স্ক্রোলের সর্বাধিক সংখ্যা পৌঁছানো হয়।

নিম্নলিখিত টেবিলটিতে প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করা হয়েছে:

বৈশিষ্ট্য বর্ণনা
"eventType": "ELEMENT_SCROLL_INTO_VIEW" --
elementDescriptors অ্যান্ড্রয়েড ইউআই হায়ারার্কি ব্যবহার করে স্ক্রোলড ইউআই উইজেট সনাক্ত করে।
childElementDescriptors অ্যান্ড্রয়েড ইউআই হায়ারার্কি ব্যবহার করে স্ক্রোল করতে ইউআই উইজেটটি সনাক্ত করে।

নীচে একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ রয়েছে যা ইউআই উইজেটকে "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 অ্যান্ড্রয়েড ইউআই হায়ারার্কি ব্যবহার করে টার্গেট ইউআই উইজেট চিহ্নিত করে।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা "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 ট্যাপড পয়েন্টের পিক্সেল এক্স সমন্বয়। pointTapXPercent এবং pointTapYPercent সাথে পারস্পরিক একচেটিয়া।
pointTapYCoordinate ট্যাপড পয়েন্টের পিক্সেল ওয়াই স্থানাঙ্ক। pointTapXPercent এবং pointTapYPercent সাথে পারস্পরিক একচেটিয়া।
pointTapXPercent ট্যাপড পয়েন্টের শতাংশ এক্স সমন্বয়। pointTapXCoordinate এবং pointTapYCoordinate সাথে পারস্পরিক একচেটিয়া।
pointTapYPercent ট্যাপড পয়েন্টের শতাংশ y সমন্বয়। pointTapXCoordinate এবং pointTapYCoordinate সাথে পারস্পরিক একচেটিয়া।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা একটি স্ক্রিনের মাঝখানে ট্যাপ করে:

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

একটি উপাদান মধ্যে একটি পয়েন্ট আলতো চাপুন

নিম্নলিখিত টেবিলটিতে প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করা হয়েছে:

বৈশিষ্ট্য বর্ণনা
"eventType": "POINT_TAP_ELEMENT" --
pointTapXPercent লক্ষ্য উপাদানটির মধ্যে শতাংশের x সমন্বয়।
pointTapYPercent লক্ষ্য উপাদানটির মধ্যে শতাংশের y সমন্বয়।
elementDescriptors অ্যান্ড্রয়েড ইউআই হায়ারার্কি ব্যবহার করে টার্গেট ইউআই উইজেট সনাক্ত করে।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা সিকবারের স্লাইডারকে ডানদিকে নিয়ে যায়:

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

ক্রল সমাপ্ত করুন

এই ক্রিয়াটি রোবো পরীক্ষা বন্ধ করে দেয়।

নিম্নলিখিত টেবিলটিতে প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করা হয়েছে:

বৈশিষ্ট্য বর্ণনা
"eventType": "TERMINATE_CRAWL" --

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা একটি রোবো পরীক্ষা বন্ধ করে দেয়:

{
  "eventType": "TERMINATE_CRAWL"
}

অপেক্ষা করুন

নিম্নলিখিত টেবিলটিতে প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করা হয়েছে:

বৈশিষ্ট্য বর্ণনা
"eventType": "DELAYED_MESSAGE_POSTED" --
delayTime মিলিসেকেন্ডে কতক্ষণ অপেক্ষা করতে হবে তা নির্দিষ্ট করে।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা তিন সেকেন্ডের জন্য অপেক্ষা করে:

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

একটি উপাদান জন্য অপেক্ষা করুন

এই ক্রিয়াটি রোবো পরীক্ষার জন্য নির্দিষ্ট সময়সীমা পর্যন্ত স্ক্রিনে উপস্থিত হওয়ার জন্য অপেক্ষা করে।

নিম্নলিখিত টেবিলটিতে প্রয়োজনীয় বৈশিষ্ট্যগুলি তালিকাভুক্ত করা হয়েছে:

বৈশিষ্ট্য বর্ণনা
"eventType": "WAIT_FOR_ELEMENT" --
delayTime মিলিসেকেন্ডে অপেক্ষার সময়সীমা নির্দিষ্ট করে।
elementDescriptors অ্যান্ড্রয়েড ইউআই হায়ারার্কি ব্যবহার করে অপেক্ষা করা ইউআই উইজেটটি সনাক্ত করে।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা "my.app.package:id/confirmation_button" স্ক্রিনে উপস্থিত হওয়ার জন্য একটি ইউআই উইজেটের জন্য 30 সেকেন্ড পর্যন্ত অপেক্ষা করে:

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

পরবর্তী পদক্ষেপ

,

এই দস্তাবেজটি কাঠামো, ক্ষমতা, ব্যবহার, রেকর্ডিং এবং ক্রিয়া সহ রোবো স্ক্রিপ্টগুলি সম্পর্কে রেফারেন্স তথ্য সরবরাহ করে। রোবো স্ক্রিপ্টগুলি এমন পরীক্ষাগুলি যা মোবাইল অ্যাপ্লিকেশনগুলির জন্য ম্যানুয়াল কোয়ালিটি অ্যাসুরেন্স (কিউএ) কার্যগুলি স্বয়ংক্রিয় করে তোলে এবং অবিচ্ছিন্ন ইন্টিগ্রেশন (সিআই) এবং প্রাক-প্রবর্তন পরীক্ষার কৌশলগুলি সক্ষম করে। একটি রোবো স্ক্রিপ্ট একটি জেএসএন ফাইল যা ইউজার ইন্টারফেস (ইউআই) এবং অন্যান্য ক্রিয়াকলাপের ক্রম বর্ণনা করে।

আপনি নিম্নলিখিত উপায়ে একটি রোবো স্ক্রিপ্ট তৈরি করতে পারেন:

  • রোবো স্ক্রিপ্ট রেকর্ডিং বৈশিষ্ট্যটি ব্যবহার করুন। (শুধুমাত্র অ্যান্ড্রয়েড)

  • ম্যানুয়ালি রোবো স্ক্রিপ্ট তৈরি করুন। (অ্যান্ড্রয়েড এবং আইওএস+)

  • রোবো স্ক্রিপ্টটি রেকর্ড করুন এবং তারপরে এটি ম্যানুয়ালি সম্পাদনা করুন। (শুধুমাত্র অ্যান্ড্রয়েড)

রোবো স্ক্রিপ্টগুলি ব্যবহার সম্পর্কে আরও জানতে, একটি রোবো স্ক্রিপ্ট চালান দেখুন।

ভূমিকা

অ্যাপ-আন্ডার-টেস্ট অ্যান্ড্রয়েড অ্যাপ্লিকেশন প্যাকেজ (এপিকে) এর মতো অন্যান্য ইনপুটগুলির পাশাপাশি রোবো পরীক্ষায় রোবো স্ক্রিপ্ট সরবরাহ করা হয়।

নিম্নলিখিতটি একটি রোবো স্ক্রিপ্টের একটি উদাহরণ যা কোনও অ্যাপ্লিকেশনটিতে কোনও ব্যবহারকারীকে স্বাক্ষর করে, যা অ্যাপ-আন্ডার-পরীক্ষা চালু হওয়ার সময় ট্রিগার করা হয়:

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

আইওএস+ রোবো স্ক্রিপ্টগুলির জন্য সমর্থন

আইওএস+ (বিটা) এর জন্য রোবো রোবো স্ক্রিপ্টগুলির জন্য সীমিত সমর্থন রয়েছে। আইওএস+ এর জন্য রোবো স্ক্রিপ্ট সিনট্যাক্সটি অ্যান্ড্রয়েড সিনট্যাক্সের সাথে সমান, এবং সমর্থিত আইওএস+ বৈশিষ্ট্যগুলি তাদের অ্যান্ড্রয়েড অংশগুলির সাথে একইভাবে আচরণ করে।

নিম্নলিখিত ক্রিয়াগুলি আইওএস+এ সমর্থিত:

  • দাবী
  • ক্লিক করুন
  • দীর্ঘ ক্লিক
  • সোয়াইপ করুন
  • সমস্ত উপাদান (গুলি) উপেক্ষা করুন
  • অপেক্ষা করুন
  • স্ক্রিনশট নিন
  • ক্রল সমাপ্ত করুন

উপাদান বর্ণনাকারীগুলিতে নিম্নলিখিত সনাক্তকারী বৈশিষ্ট্যগুলি আইওএস+এ সমর্থিত:

  • ক্লাসের নাম
  • পূর্বপুরুষ শ্রেণীর নাম
  • সামগ্রীর বিবরণ (এবং রেজেক্স)
  • পাঠ্য (এবং রেজেক্স)

প্রসঙ্গ বর্ণনাকারীদের নিম্নলিখিত ট্রিগার শর্তগুলি আইওএস+এ সমর্থিত:

  • পরীক্ষার অধীনে অ্যাপ দেখানো হয়েছে
  • উপাদান উপস্থিত
  • নন-রোবো স্ক্রিপ্ট অ্যাকশন সম্পাদিত

গঠন

একটি রোবো স্ক্রিপ্টে বেশ কয়েকটি বৈশিষ্ট্য রয়েছে যা বর্ণনা করে যে রোবো কীভাবে এটি কার্যকর করে। এই বৈশিষ্ট্যগুলির বেশিরভাগই পূর্বনির্ধারিত ডিফল্ট মানগুলির সাথে al চ্ছিক:

বৈশিষ্ট্য বর্ণনা
id একটি পূর্ণসংখ্যা সংখ্যা যা ক্রল আউটপুটগুলিতে এই রোবো স্ক্রিপ্টটি ট্র্যাক করতে সহায়তা করে। রোবো তাদের নিজস্ব id দিয়ে অন্তর্নির্মিত রোবো স্ক্রিপ্টগুলি রয়েছে। যদিও বিভিন্ন রোবো স্ক্রিপ্টগুলিতে একই id তাদের আচরণকে প্রভাবিত করে না, ক্রল আউটপুটগুলিতে এই রোবো স্ক্রিপ্টগুলি থেকে পৃথক ক্রিয়াকলাপগুলি চ্যালেঞ্জিং হতে পারে। আমরা কোনও দ্বন্দ্ব এড়াতে আপনার রোবো স্ক্রিপ্টগুলির জন্য 1000 বা তার বেশি একটি অনন্য id নির্ধারণের পরামর্শ দিই।
description id অনুরূপ তবে আরও বর্ণনামূলক।
crawlStage ক্রল রোবোর মঞ্চটি এই রোবো স্ক্রিপ্টটি প্রয়োগ করে। ডিফল্টরূপে, এটি মূল ক্রল পর্যায়।
priority অন্যান্য রোবো স্ক্রিপ্টগুলির তুলনায় এই রোবো স্ক্রিপ্টের অগ্রাধিকার। ডিফল্টরূপে, সমস্ত রোবো স্ক্রিপ্টগুলির একটি অগ্রাধিকার রয়েছে 1
maxNumberOfRuns ক্রল চলাকালীন কতবার রোবো এই রোবো স্ক্রিপ্টটি কার্যকর করতে পারে তা নির্দিষ্ট করে। ডিফল্টরূপে, রোবো একবারে একটি রোবো স্ক্রিপ্ট কার্যকর করতে পারে।
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 উপেক্ষা করে। For example, you can use this attribute to check if a UI widget is NOT present on the screen, or that the app-under-test is NOT running in the foreground.
elementDescriptors One or more element descriptors that identify a UI widget on the screen. It is used in combination with the element_present , element_disabled , and element_checked conditions. Mutually exclusive with visionText . For more information, see Element descriptors .
visionText Text on the screen is detected using the Optical Character Recognition (OCR) API. visionText is used in combination with the element_present condition. Mutually exclusive with elementDescriptors .
nonRoboscriptActionCount The number of consecutive non-Robo script actions performed prior. It is used in combination with the non_roboscript_action_performed condition to trigger a Robo script after every nonRoboscriptActionCount Robo actions. By default, it is 1 .

The following is an example of a Robo script that is triggered by a UI widget with a resource ID "my.app.package:id/page_header" being present on the screen:

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

The following is an example of a Robo script that is triggered by "Privacy Policy" detected by Optical Character Recognition (OCR):

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

The following is an example of a Robo script that waits for 5 seconds after every non-script Robo action:

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

কর্ম

Each action in a Robo script is represented as a bundle of one or more attribute-value pairs, which are described in the following table:

বৈশিষ্ট্য বর্ণনা
eventType Specifies the type of the action, for example, click, text edit, etc. Required for every action.
elementDescriptors Descriptors that identify a UI widget. Required for all actions that have a target UI widget, like clicking a particular button.
optional If set to true , this action is skipped when it cannot be performed. For example, this action is skipped when it can't find its target UI widget on a screen– without failing the containing Robo script. By default, the value is false .
replacementText The text to input into the target UI widget. Required for text editing actions.
swipeDirection Specifies the direction of the swipe. Required for swipe actions.
delayTime Specifies how long to wait, in milliseconds. Required for wait actions.
pointTapXCoordinate and pointTapYCoordinate The pixel X and Y coordinates of the tapped point. Mutually exclusive with pointTapXPercent and pointTapYPercent . Required for point tap actions.
pointTapXPercent and pointTapYPercent The percentage X and Y coordinates of the tapped point. Mutually exclusive with pointTapXCoordinate and pointTapYCoordinate . Required for point tap actions.

The following is an example of a Robo script with two actions without target UI widgets, which means that these actions don't operate on a specific UI widget:

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

Element descriptors

An element descriptor identifies a UI widget using one or more of the following identifying attributes:

বৈশিষ্ট্য বর্ণনা
className -
ancestorClassName Class name of the element's UI hierarchy ancestor. An ancestor is any of the parent nodes in the element's UI hierarchy, including the element itself.
resourceId -
resourceIdRegex Java regular expression to match resourceId .
contentDescription -
contentDescriptionRegex Java regular expression to match contentDescription .
text (that appears on the screen) -
textRegex Java regular expression to match text .
groupViewChildPosition , recyclerViewChildPosition , or adapterViewChildPosition Represents a UI widget's child position depending on the kind of its parent widget.

Frequently, these attributes are undefined, for example, a button might not have text and content description. Even if some attribute values are present, they might not be unique on a given app screen (including resourceId ).

For example, differentiating between items of a list is commonly possible only by using their different child positions within their parent widget. This means that using just one element descriptor to identify a UI widget is usually insufficient. Therefore, an action's elementDescriptors attribute contains a sequence of element descriptors that are ordered such that the first one corresponds to the target UI widget, the second one corresponds to the target UI widget's parent widget, and so on. An action's target UI widget is matched when all of its element descriptors match the corresponding UI widget sub-hierarchy.

The following is an example of a Robo script with a text change and click actions, both of which require you to identify the target UI widget using the provided element descriptors:

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

এক্সিকিউশন অপশন

You can optionally prefix the list of actions in a Robo script with a JSON object that specifies the execution options for that Robo script. This configuration header starts with the roboscript keyword followed by a JSON representation of the desired execution options.

Robo scripts support the following execution options:

  • executionMode - execution options applied when a Robo script is running:
    • strict - if set to true , Robo script does not employ partial matching, skipping current action, and suspension . That is, the Robo script is executed as a regular instrumentation test and fails as soon as any of its actions cannot be performed. ডিফল্টরূপে, এটা false .
    • dismiss_popups - if set to true , Robo test dismisses any unexpected dialogs while performing the Robo script even in strict mode. This option has no effect when not in strict mode. ডিফল্টরূপে, এটা false .
    • notify - if set to false , Robo script does not show on-screen notifications at the beginning and end of its execution. By default, it is true .
  • postscript - execution options applied after a Robo script is completed:
    • terminate - if set to true , Robo test stops crawling after the Robo script is completed. ডিফল্টরূপে, এটা false .

The following is an example of a Robo script executed in strict mode without on-screen notifications that sleeps for three seconds, after which the crawl stops:

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

টেমপ্লেট পরামিতি

A template parameter is a placeholder in a Robo script that is replaced with the actual value when Robo test loads that Robo script for execution. Template parameters are prefixed with a double underscore followed by a percent sign, and are postfixed with a percent sign followed by a double underscore.

Robo scripts support the following template parameter:

  • __%APP_PACKAGE_NAME%__ - the package name of the app-under-test.

The following is an example of a Robo script that stops the app-under-test process:

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

মন্তব্য

A Robo script can contain comment lines, which are lines that start with # or // .

The following is an example of a Robo script with a couple of comments:

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

ক্ষমতা

By default, until all actions of a Robo script are completed (or at least attempted), the Robo script remains active. Robo test keeps trying to match a Robo script action whenever it is picking an action to perform. Robo script employs the following techniques to increase robustness:

টেকনিক বর্ণনা
Partial matching If the current Robo script action cannot be fully matched, the matching criteria are relaxed and the matching is retried. The partial matching doesn't consider the outermost element descriptor while matching the target UI widget of a Robo script action.

If the partial matching succeeds, the corresponding Robo script action is performed as usual. This technique supports scenarios in which the app structure changes, for example, between app versions, when screen elements are rearranged.

Skip current action If the current Robo script action cannot be fully or partially matched, Robo tries to match the subsequent Robo script action. If the subsequent action fully or partially matches, Robo test skips (and never returns to) the current Robo script action and performs the subsequent one.

This technique supports scenarios when app behavior changes between versions or is flaky, for example, when an intermittent dialog might appear at different screens during recording versus replaying of a Robo script.

সাসপেন্ড If neither current nor subsequent Robo script actions can be fully or partially matched, Robo script is temporarily suspended and Robo test picks an action to perform using its other strategies. After this action is completed, Robo test resumes executing the Robo script.

As long as current or subsequent Robo script actions cannot be matched, Robo script remains suspended for any number of actions. Thus, Robo scripts don't necessarily need to be a prologue for a Robo test, and you can intersperse Robo script actions with standard Robo test actions. This technique supports scenarios when app behavior is flaky, or when changes between app versions are large enough that Robo test needs to "fill in the gaps" with its standard actions.

অগ্রাধিকার

If a Robo script reaches its maxNumberOfRuns , it can no longer be triggered in a given crawl. If more than one Robo script can be triggered by the current context, priority is given by choosing, in the following order, the Robo script that:

  1. Has a contextDescriptor attribute.
  2. Has the highest priority (by default, all Robo scripts have the same execution priority of 1 ).
  3. Appears earliest in the list of the Robo scripts, if Robo scripts' priorities are the same.

The following is an example of a file with three Robo scripts that perform the same action and are triggered by the same condition - the app-under-test being in the foreground:

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

When the app-under-test is in the foreground, Robo triggers the following, in order:

  1. "Robo script 2" because it has the highest priority.
  2. "Robo script 1" because it appears earlier among the remaining applicable Robo scripts with the same priority.
  3. "Robo script 3" as the last applicable Robo script.

Repeated runs

By default, Robo triggers a Robo script at most once during a crawl. This can be adjusted via the maxNumberOfRuns attribute.

The following is an example of a Robo script that brings the app-under-test into the background for up to 10 times:

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

Crawl stage

Robo scripts are applicable at different stages of a given Robo crawl:

Crawl stage বর্ণনা
pre_crawl Before Robo launches and starts crawling the app-under-test.
post_crawl After Robo finishes crawling the app-under-test. A post_crawl Robo script must not exceed 15 seconds in duration or else the crawl may terminate in a timeout.
crawl The main crawl stage, when Robo crawls the app-under-test.
close_screen When Robo tries to return back (backtrack) from a given screen, when all possible actions on this screen are explored. By default, Robo presses back, which is undesirable in some scenarios.

If the crawlStage attribute of a Robo script is unspecified, it is implied to be crawl .

The following is an example of a Robo script that clears the app-under-test user data before Robo starts crawling it:

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

The following is an example of a Robo script that instructs Robo to click "Cancel" whenever it tries to return back (backtrack) from a confirmation dialog:

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

Conditional actions

A Robo script can contain conditional actions. Conditional actions have three additional attributes that describe how Robo performs them:

বৈশিষ্ট্য বর্ণনা
priority The priority of this conditional action in comparison to other conditional actions within its containing Robo script. By default, all conditional actions have a priority of 1 .
maxNumberOfRuns How many times this conditional action can be performed during one execution of its containing Robo script. By default, all conditional actions can be performed at most once in a single execution of their containing Robo script.
contextDescriptor The context/condition that triggers this conditional action. It has the same structure and offers similar capabilities as the Robo script's contextDescriptor

When triggered, a Robo script performs its non-conditional actions one by one in order of appearance. If a Robo script contains conditional actions, then they are considered every time before picking a non-conditional action to perform. If any conditional action is triggered and picked based on its priority and the remaining number of runs, then the Robo script performs this conditional action. Otherwise, the Robo script performs the following non-conditional action. To be valid, a Robo script must contain at least one non-conditional action.

The following is an example of an unconditional Robo script with a conditional action that dismisses popup dialogs if they show up at any point during the Robo script execution:

{
  "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": "DELAYED_MESSAGE_POSTED",
      "delayTime": 10000
    },
    {
      "description": "Screen on",
      "eventType": "ADB_SHELL_COMMAND",
      "command": "input keyevent 82"
    },
    {
      "description": "Wait for 10 seconds",
      "eventType": "DELAYED_MESSAGE_POSTED",
      "delayTime": 10000
    }
}

Ignoring actions

A Robo script can contain instructions for Robo to ignore specific UI widgets or all UI widgets on a particular screen. These instructions are represented as ignoring "actions" with eventType ELEMENT_IGNORED and ALL_ELEMENTS_IGNORED correspondingly.

Whenever the contextDescriptor attribute of a Robo script containing ignoring actions matches a given screen, Robo does not interact with any UI widgets targeted by its ignoring actions (unless some other Robo script action makes Robo perform an action on one of the ignored UI widgets).

A Robo script can contain a mix of ignoring, conditional, and non-conditional actions. Unlike other Robo script actions, ignoring actions are applied as long as their containing Robo script's contextDescriptor matches a screen during a Robo crawl, regardless of the values of the priority and maxNumberOfRuns attributes.

The following is an example of a file with two Robo scripts. The first Robo script makes Robo ignore all UI widgets on a screen containing a UI widget with a resource ID "my.app.package:id/ignored_screen" . The second Robo script makes Robo ignore UI widgets whose resource IDs match Java regex ".*:id/done" on a screen containing a UI widget with a resource ID "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 and AdapterView support

Children of RecyclerView and AdapterView widgets are loaded dynamically and might be displayed many swipes away from the current screen. Since the size of a screen, and the number of swipes required to get to this child, is different for different device form factors, it is much more robust to rely on the child's data position, which is absolute. It is a less robust approach to rely on the number of swipes that are required to bring this child to the screen and then use its screen position.

Therefore, Robo script captures the absolute data positions of RecyclerView children that are targets of Robo script actions as recyclerViewChildPosition . Robo script also captures the absolute data positions of AdapterView children that are targets of Robo script actions as adapterViewChildPosition .

Actions on RecyclerView and AdapterView children are performed in the following steps:

  1. Robo test ensures that the corresponding child is displayed on the screen through a positioning action on its containing RecyclerView or AdapterView.

  2. Robo test performs the recorded action directly on the child element, since it is already displayed on the screen.

The following is an example of a click action on an AdapterView ( android.widget.GridView ) child:

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

The following is an example of a click action on a RecyclerView ( android.support.v7.widget.RecyclerView ) child:

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

Record a Robo script in Android Studio and run it in Test Lab

You can create a Robo script in Android Studio, which saves the script as a JSON file. You can then upload the JSON file to Firebase Test Lab with the application and run the test accordingly.

When you run a Robo test with a script attached, Robo test first steps through your pre-scripted actions and then explores the app as usual.

To create a Robo script JSON file in Android Studio, follow the steps in Record a Robo script using Test Lab in Android Studio .

Robo script actions

The following common optional attribute applies to all actions:

  • description - helps track execution of this Robo script action in Robo test outputs.

দাবী

If the asserted condition is true, the Robo script continues to the next action, which could be another assertion. Otherwise, the Robo script execution is halted due to a failed assertion.

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
"eventType": "ASSERTION" --
contextDescriptor Describes the asserted context or condition. It has the same structure and offers similar capabilities as the Robo script's contextDescriptor .

The following is an example of a Robo script assertion that checks that the app-under-test is in the foreground:

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

The following is an example of a Robo script assertion that checks that a UI widget with the resource ID "com.google.samples.apps.topeka:id/done" is present on a screen:

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

The following is an example of a Robo script assertion that checks that "Settings" is NOT detected on a screen using OCR:

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

ক্লিক করুন

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
eventType Specifies the type of the Robo script action.
"eventType": "VIEW_CLICKED" Clicks the target element of the app-under-test.
"eventType": "SOFT_KEYBOARD_CLICK" Clicks the target element of the soft keyboard.
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK" Clicks random elements of the soft keyboard up to maxNumberOfRuns times.
"eventType": "LIST_ITEM_CLICKED" Used by the Robo script recorder in Android Studio for clicking list items.
elementDescriptors Identifies the clicked UI widget using the Android UI hierarchy. Mutually exclusive with visionText .
visionText Identifies the clicked element using OCR. Mutually exclusive with elementDescriptors .
maxNumberOfRuns Specifies how many times to click a random element of the soft keyboard, when eventType is SOFT_KEYBOARD_RANDOM_CLICK . ডিফল্ট মান হল 1

The following is an example of a Robo script action that clicks a button with the resource ID "com.google.samples.apps.topeka:id/done" :

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

The following is an example of a Robo script action that clicks on "Privacy Policy" detected on a screen using OCR:

{
  "eventType": "VIEW_CLICKED",
  "visionText": "Privacy Policy"
}

The following is an example of a Robo script action that clicks a soft keyboard element with a content description "Emoji button" :

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

The following is an example of a Robo script action that clicks random soft keyboard elements up to five times:

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

Disable soft keyboard

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
"eventType": "DISABLE_KEYBOARD" --

The following is an example of a Robo script action that disables the soft keyboard:

{
  "eventType": "DISABLE_KEYBOARD"
}

Execute adb shell command

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
"eventType": "ADB_SHELL_COMMAND" --
command The Android Debug Bridge (adb) shell command to execute.

The following attribute is optional:

  • expectedOutputRegex - the expected output of the command as a Java regular expression. If the output does not match, the Robo script action fails. By default, it is an empty string, which means the output is not checked.

The following is an example of a Robo script action that clears the app-under-test user data:

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

অনুমতি দিন

This action is recorded by the Robo script recorder in Android Studio for backward compatibility with Espresso Test Recorder . Robo test grants all permissions to the app-under-test at the beginning of every crawl, and thus, this action is a no-op. Do NOT use this action in your Robo scripts.

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
"eventType": "PERMISSIONS_REQUEST" --

Ignore all elements on a screen

This action makes Robo ignore all elements on any screen that triggers the containing Robo script.

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
"eventType": "ALL_ELEMENTS_IGNORED" --

The following is an example of a Robo script action that makes Robo ignore all elements on a screen:

{
  "eventType": "ALL_ELEMENTS_IGNORED"
}

Ignore an element

This action makes Robo ignore an element (or elements) that match the specified elementDescriptors .

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
"eventType": "ELEMENT_IGNORED" --
elementDescriptors Identifies the ignored UI widget(s) using the Android UI hierarchy.

The following attribute is optional:

  • ignoreChildren - if set to true , Robo also ignores all descendants of the ignored UI widget(s). ডিফল্টরূপে, এটা false .

The following is an example of a Robo script action that makes Robo ignore all elements, whose content descriptions start with "Avatar" :

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

ইনপুট পাঠ্য

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
eventType Specifies the type of the Robo script action.
"eventType": "VIEW_TEXT_CHANGED" Inputs the given text into the target UI widget.
"eventType": "ENTER_TEXT" inputs the given text into the target UI widget and then sends a KEYCODE_ENTER event to this UI widget.
elementDescriptors Identifies the target UI widget using the Android UI hierarchy.
replacementText The text to input into the target UI widget.

The following is an example of a Robo script action that inputs "John" into a UI widget with the resource ID "com.google.samples.apps.topeka:id/first_name" :

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

Long click

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
"eventType": "VIEW_LONG_CLICKED" --
elementDescriptors Identifies the target UI widget using the Android UI hierarchy. Mutually exclusive with visionText .
visionText Identifies the long clicked element using OCR. Mutually exclusive with elementDescriptors .

The following attribute is optional:

  • delayTime - specifies how long the press down of a long click lasts, in milliseconds.

The following is an example of a Robo script action that performs a five seconds-long click on a UI widget with content description "Avatar 8" :

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

Perform a one-point gesture

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
"eventType": "ONE_POINT_GESTURE" --
coordinates Two coordinates for a one-point gesture, formatted as "(x1,y1)->(x2,y2)" as percentages or pixels.

The following attribute is optional:

  • dragAndDrop - if set to true , the one-point gesture performs a drag-and-drop action. ডিফল্টরূপে, এটা false .

The following is an example of a Robo script one-point gesture action that performs a swipe down:

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

Perform a two-point gesture

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
"eventType": "TWO_POINT_GESTURE" --
coordinates Four coordinates for a two-point gesture, formatted as "(x1,y1)->(x2,y2),(x3,y3)->(x4,y4)" as percentages or pixels.

The following is an example of a Robo script action that performs a pinch out gesture:

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

Perform an IME action

This action presses the current action button, for example, next, done, and search, on the Input Method Editor (IME) for the specified target UI widget.

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
"eventType": "PRESSED_EDITOR_ACTION" --
elementDescriptors Identifies the target UI widget using the Android UI hierarchy.

The following is an example of a Robo script action that performs an IME action on a UI widget with the resource ID "com.google.samples.apps.topeka:id/first_name" :

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

Press back

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
eventType Specifies the type of the Robo script action.
"eventType": "PRESSED_BACK" Sends a KEYCODE_BACK event to the device.
"eventType": "PRESSED_BACK_EMULATOR_28" Used by the Robo script recorder in Android Studio for pressing back on emulators API 28.

The following is an example of a Robo script action that presses back:

{
  "eventType": "PRESSED_BACK"
}

Press home

This action sends a KEYCODE_HOME event to the device.

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
"eventType": "GO_HOME" --

The following is an example of a Robo script action that presses home:

{
  "eventType": "GO_HOME"
}

Scroll an element into view

This action makes Robo test scroll forward the UI widget that matches the specified elementDescriptors until the UI widget that matches the specified childElementDescriptors is present on the screen, or the scrolled widget can no longer be scrolled, or the max number of 50 scrolls is reached.

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
"eventType": "ELEMENT_SCROLL_INTO_VIEW" --
elementDescriptors Identifies the scrolled UI widget using the Android UI hierarchy.
childElementDescriptors Identifies the UI widget to scroll to using the Android UI hierarchy.

The following is an example of a Robo script action that scrolls the UI widget with the resource ID "my.app.package:id/scrollable_card_container" until the UI widget with text "Orange" is present on the screen (or no more scrolls can be performed, or the max number of 50 scrolls is reached):

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

সোয়াইপ করুন

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
"eventType": "VIEW_SWIPED" --
swipeDirection Specifies the direction of the swipe:
  • Left
  • Right
  • Up
  • Down
  • Forward - either Down or Right depending on vertical or horizontal scrollability of the target UI widget.
  • Backward - either Up or Left depending on vertical or horizontal scrollability of the target UI widget.
elementDescriptors Identifies the target UI widget using the Android UI hierarchy.

The following is an example of a Robo script action that swipes up a UI widget with the resource ID "my.app.package:id/custom_content" :

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

স্ক্রিনশট নিন

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
"eventType": "TAKE_SCREENSHOT" --
screenshotName Specifies the screenshot file name.

The following is an example of a Robo script action that takes a screenshot:

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

Tap a point on the screen

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
"eventType": "POINT_TAP" --
pointTapXCoordinate The pixel X coordinate of the tapped point. Mutually exclusive with pointTapXPercent and pointTapYPercent .
pointTapYCoordinate The pixel Y coordinate of the tapped point. Mutually exclusive with pointTapXPercent and pointTapYPercent .
pointTapXPercent The percentage X coordinate of the tapped point. Mutually exclusive with pointTapXCoordinate and pointTapYCoordinate .
pointTapYPercent The percentage Y coordinate of the tapped point. Mutually exclusive with pointTapXCoordinate and pointTapYCoordinate .

The following is an example of a Robo script action that taps in the middle of a screen:

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

Tap a point within an element

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
"eventType": "POINT_TAP_ELEMENT" --
pointTapXPercent The percentage X coordinate within the target element.
pointTapYPercent The percentage Y coordinate within the target element.
elementDescriptors Identifies the target UI widget using Android UI hierarchy.

The following is an example of a Robo script action that moves a seekbar's slider to the right:

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

Terminate crawl

This action stops the Robo test.

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
"eventType": "TERMINATE_CRAWL" --

The following is an example of a Robo script action that stops a Robo test:

{
  "eventType": "TERMINATE_CRAWL"
}

অপেক্ষা করুন

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
"eventType": "DELAYED_MESSAGE_POSTED" --
delayTime Specifies how long to wait, in milliseconds.

The following is an example of a Robo script action that waits for three seconds:

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

Wait for an element

This action makes Robo test wait for an element to appear on the screen up to the specified timeout.

The following table lists required attributes:

বৈশিষ্ট্য বর্ণনা
"eventType": "WAIT_FOR_ELEMENT" --
delayTime Specifies the waiting timeout, in milliseconds.
elementDescriptors Identifies the waited-for UI widget using the Android UI hierarchy.

The following is an example of a Robo script action that waits for up to 30 seconds for a UI widget with the resource ID "my.app.package:id/confirmation_button" to appear on the screen:

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

পরবর্তী পদক্ষেপ