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

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

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

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

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

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

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

ভূমিকা

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

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

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

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

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

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

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

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

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

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

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

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

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

গঠন

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

বৈশিষ্ট্য বিবরণ
id ক্রল আউটপুটগুলিতে এই রোবো স্ক্রিপ্টটি ট্র্যাক করতে সাহায্য করে এমন একটি পূর্ণসংখ্যা সংখ্যা। রোবোতে নিজস্ব id সহ অন্তর্নির্মিত রোবো স্ক্রিপ্ট রয়েছে। যদিও বিভিন্ন রোবো স্ক্রিপ্টে একই id তাদের আচরণকে প্রভাবিত করে না, ক্রল আউটপুটগুলিতে এই রোবো স্ক্রিপ্টগুলি থেকে ক্রিয়াগুলিকে আলাদা করা চ্যালেঞ্জিং হতে পারে। কোনও দ্বন্দ্ব এড়াতে আমরা আপনার রোবো স্ক্রিপ্টগুলির জন্য 1000 বা তার বেশি একটি অনন্য id বরাদ্দ করার পরামর্শ দিচ্ছি।
description id মতো কিন্তু আরও বর্ণনামূলক।
crawlStage ক্রল রোবোর ধাপে এই রোবো স্ক্রিপ্টটি প্রয়োগ করা হয়। ডিফল্টরূপে, এটিই প্রধান ক্রল পর্যায়।
priority অন্যান্য রোবো স্ক্রিপ্টের তুলনায় এই রোবো স্ক্রিপ্টের অগ্রাধিকার। ডিফল্টরূপে, সমস্ত রোবো স্ক্রিপ্টের অগ্রাধিকার 1
maxNumberOfRuns ক্রল করার সময় Robo কতবার এই Robo স্ক্রিপ্টটি চালাতে পারবে তা নির্দিষ্ট করে। ডিফল্টরূপে, Robo একবারই একটি Robo স্ক্রিপ্ট চালাতে পারবে।
contextDescriptor এই রোবো স্ক্রিপ্টটি ট্রিগার করে এমন প্রেক্ষাপট বা অবস্থা বর্ণনা করে। যদি বাদ দেওয়া হয়, তাহলে এই রোবো স্ক্রিপ্টের ট্রিগারিং শর্ত সর্বদা পূরণ করা হয়েছে বলে মনে করা হয়; অন্য কথায়, রোবো স্ক্রিপ্টটি শর্তহীন।
actions এই রোবো স্ক্রিপ্টের সমস্ত ক্রিয়া।

একটি ফাইলে এক বা একাধিক রোবো স্ক্রিপ্টের সংগ্রহ থাকে।

নিচে দুটি শর্তহীন রোবো স্ক্রিপ্ট সহ একটি ফাইলের উদাহরণ দেওয়া হল, প্রতিটিতে একটি করে অ্যাকশন থাকে যা ক্রলের শুরুতে একবার কার্যকর করা হয়:

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

প্রসঙ্গ বর্ণনাকারী

একটি প্রসঙ্গ বর্ণনাকারী একটি বা একাধিক বৈশিষ্ট্যের সংমিশ্রণ ব্যবহার করে একটি রোবো স্ক্রিপ্ট ট্রিগার করে এমন প্রসঙ্গ বা অবস্থা সংজ্ঞায়িত করে:

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

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

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

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

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

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

কার্যকর করার বিকল্পগুলি

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

রোবো স্ক্রিপ্টগুলি নিম্নলিখিত এক্সিকিউশন বিকল্পগুলিকে সমর্থন করে:

  • executionMode - যখন একটি Robo স্ক্রিপ্ট চলমান থাকে তখন এক্সিকিউশন বিকল্পগুলি প্রয়োগ করা হয়:
    • strict - যদি true তে সেট করা থাকে, তাহলে Robo স্ক্রিপ্ট আংশিক মিল, বর্তমান ক্রিয়া বাদ দেওয়া এবং সাসপেনশন ব্যবহার করে না। অর্থাৎ, Robo স্ক্রিপ্টটি একটি নিয়মিত যন্ত্র পরীক্ষা হিসাবে কার্যকর করা হয় এবং এর কোনও ক্রিয়া সম্পাদন করা না গেলেই ব্যর্থ হয়। ডিফল্টরূপে, এটি false
    • dismiss_popups - যদি true তে সেট করা থাকে, তাহলে Robo test strict mode-তেও Robo স্ক্রিপ্ট সম্পাদনের সময় যেকোনো অপ্রত্যাশিত ডায়ালগ বাতিল করে দেয়। strict mode-এ না থাকলে এই বিকল্পটির কোনও প্রভাব থাকে না। ডিফল্টরূপে, এটি false
    • notify - যদি false তে সেট করা থাকে, তাহলে Robo স্ক্রিপ্টটি তার এক্সিকিউশনের শুরুতে এবং শেষে অন-স্ক্রিন বিজ্ঞপ্তি দেখায় না। ডিফল্টরূপে, এটি true
  • postscript - রোবো স্ক্রিপ্ট সম্পূর্ণ হওয়ার পরে প্রয়োগ করা কার্যকরকরণ বিকল্পগুলি:
    • terminate - যদি true তে সেট করা থাকে, তাহলে Robo স্ক্রিপ্ট সম্পূর্ণ হওয়ার পরে Robo test ক্রল করা বন্ধ করে দেয়। ডিফল্টরূপে, এটি false

নিচে একটি রোবো স্ক্রিপ্টের উদাহরণ দেওয়া হল যা অন-স্ক্রিন নোটিফিকেশন ছাড়াই strict মোডে কার্যকর করা হয় এবং তিন সেকেন্ড অপেক্ষা করে, যার পরে ক্রল বন্ধ হয়:

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

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

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

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

  • __%APP_PACKAGE_NAME%__ - অ্যাপ-আন্ডার-টেস্টের প্যাকেজের নাম।

নিচে একটি রোবো স্ক্রিপ্টের উদাহরণ দেওয়া হল যা অ্যাপ-আন্ডার-টেস্ট প্রক্রিয়া বন্ধ করে দেয়:

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

মন্তব্য

একটি রোবো স্ক্রিপ্টে মন্তব্য লাইন থাকতে পারে, যা # অথবা // দিয়ে শুরু হয়।

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

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

ক্ষমতা

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

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

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

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

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

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

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

অগ্রাধিকার

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

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

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

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

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

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

বারবার রান

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

নিচে একটি রোবো স্ক্রিপ্টের উদাহরণ দেওয়া হল যা অ্যাপ-আন্ডার-টেস্টকে ১০ বার পর্যন্ত ব্যাকগ্রাউন্ডে নিয়ে আসে:

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

ক্রল স্টেজ

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

ক্রল স্টেজ বিবরণ
pre_crawl রোবো চালু হওয়ার আগে এবং অ্যাপ-আন্ডার-টেস্ট ক্রল করা শুরু করার আগে।
post_crawl রোবো অ্যাপ-আন্ডার-টেস্ট ক্রল করা শেষ করার পর। একটি post_crawl রোবো স্ক্রিপ্টের সময়কাল ১৫ সেকেন্ডের বেশি হওয়া উচিত নয়, অন্যথায় ক্রলটি একটি সময়সীমার মধ্যে বন্ধ হয়ে যেতে পারে।
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": "WAIT",
      "delayTime": 10000
    },
    {
      "description": "Screen on",
      "eventType": "ADB_SHELL_COMMAND",
      "command": "input keyevent 82"
    },
    {
      "description": "Wait for 10 seconds",
      "eventType": "WAIT",
      "delayTime": 10000
    }
}

কর্ম উপেক্ষা করা

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

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

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

দুটি রোবো স্ক্রিপ্ট সহ একটি ফাইলের উদাহরণ নিচে দেওয়া হল। প্রথম রোবো স্ক্রিপ্টটি রোবোকে "my.app.package:id/ignored_screen" রিসোর্স আইডি সহ একটি UI উইজেট ধারণকারী স্ক্রিনে সমস্ত UI উইজেট উপেক্ষা করতে বাধ্য করে। দ্বিতীয় রোবো স্ক্রিপ্টটি রোবোকে "my.app.package:id "my.app.package:id/main_screen" রিসোর্স আইডি সহ একটি UI উইজেট ধারণকারী স্ক্রিনে জাভা রেজেক্স ".*:id/done" এর সাথে মেলে এমন 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 উইজেটের শিশুরা গতিশীলভাবে লোড করা হয় এবং বর্তমান স্ক্রিন থেকে অনেক দূরে সোয়াইপ করে প্রদর্শিত হতে পারে। যেহেতু একটি স্ক্রিনের আকার এবং এই শিশুটিতে পৌঁছানোর জন্য প্রয়োজনীয় সোয়াইপের সংখ্যা বিভিন্ন ডিভাইস ফর্ম ফ্যাক্টরের জন্য আলাদা, তাই শিশুর ডেটা অবস্থানের উপর নির্ভর করা অনেক বেশি শক্তিশালী, যা পরম। এই শিশুটিকে স্ক্রিনে আনার জন্য প্রয়োজনীয় সোয়াইপের সংখ্যার উপর নির্ভর করা এবং তারপরে এর স্ক্রিন অবস্থান ব্যবহার করা কম শক্তিশালী পদ্ধতি।

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

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

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

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

নিচে একটি AdapterView ( android.widget.GridView ) চাইল্ডে ক্লিক অ্যাকশনের একটি উদাহরণ দেওয়া হল:

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

RecyclerView ( android.support.v7.widget.RecyclerView ) চাইল্ডে ক্লিক অ্যাকশনের একটি উদাহরণ নিচে দেওয়া হল:

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

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

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

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

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

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

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

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

দাবি

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

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

বৈশিষ্ট্য বিবরণ
"eventType": "ASSERTION" --
contextDescriptor দাবিকৃত প্রেক্ষাপট বা অবস্থা বর্ণনা করে। এর কাঠামো একই এবং রোবো স্ক্রিপ্টের 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 অ্যান্ড্রয়েড UI অনুক্রম ব্যবহার করে ক্লিক করা UI উইজেট সনাক্ত করে। visionText এর সাথে পারস্পরিকভাবে একচেটিয়া।
visionText OCR ব্যবহার করে ক্লিক করা উপাদান সনাক্ত করে। elementDescriptors এর সাথে পারস্পরিকভাবে একচেটিয়া।
matchIndex visionText ব্যবহার করে লক্ষ্য উপাদানটি সনাক্ত করা হলে, মিলিত লক্ষ্য উপাদানের ঘটনার সূচী নির্দিষ্ট করে। যদি এটি 0 হয়, তাহলে Robo স্ক্রিপ্ট অ্যাকশন প্রথম মিলিত উপাদানটি বেছে নেয়, যদি এটি 1 হয়, তাহলে Robo স্ক্রিপ্ট অ্যাকশন দ্বিতীয় মিলিত উপাদানটি বেছে নেয়, ইত্যাদি। ক্রম নির্ধারণ করা হয় বাম থেকে ডানে, উপরে থেকে নীচে। ডিফল্ট মান হল 0 (প্রথম মিলটি বাছাই করা হয়েছে)।
maxNumberOfRuns যখন eventType SOFT_KEYBOARD_RANDOM_CLICK হয়, তখন সফট কীবোর্ডের একটি এলোমেলো উপাদানে কতবার ক্লিক করতে হবে তা নির্দিষ্ট করে। ডিফল্ট মান হল 1

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

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

নিচে একটি রোবো স্ক্রিপ্ট অ্যাকশনের উদাহরণ দেওয়া হল যা OCR ব্যবহার করে স্ক্রিনে "Search" শব্দটির দ্বিতীয় উপস্থিতিতে ক্লিক করে:

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

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

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

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

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

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

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

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

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

{
  "eventType": "DISABLE_KEYBOARD"
}

adb শেল কমান্ডটি কার্যকর করুন

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

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

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

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

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

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

অনুমতি দিন

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

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

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

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

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

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

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

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

{
  "eventType": "ALL_ELEMENTS_IGNORED"
}

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

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

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

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

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

  • 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 অ্যান্ড্রয়েড ইউআই অনুক্রম ব্যবহার করে লক্ষ্য ইউআই উইজেট সনাক্ত করে।
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 অ্যান্ড্রয়েড UI অনুক্রম ব্যবহার করে লক্ষ্য UI উইজেট সনাক্ত করে। visionText এর সাথে পারস্পরিকভাবে একচেটিয়া।
visionText OCR ব্যবহার করে দীর্ঘ ক্লিক করা উপাদান সনাক্ত করে। elementDescriptors সাথে পারস্পরিকভাবে একচেটিয়া।
matchIndex visionText ব্যবহার করে লক্ষ্য উপাদানটি সনাক্ত করা হলে, মিলিত লক্ষ্য উপাদানের ঘটনার সূচী নির্দিষ্ট করে। যদি এটি 0 হয়, তাহলে Robo স্ক্রিপ্ট অ্যাকশন প্রথম মিলিত উপাদানটি বেছে নেয়, যদি এটি 1 হয়, তাহলে Robo স্ক্রিপ্ট অ্যাকশন দ্বিতীয় মিলিত উপাদানটি বেছে নেয়, ইত্যাদি। ক্রম নির্ধারণ করা হয় বাম থেকে ডানে, উপরে থেকে নীচে। ডিফল্ট মান হল 0 (প্রথম মিলটি বাছাই করা হয়েছে)।

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

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

"Avatar 8" বিষয়বস্তুর বিবরণ সহ একটি UI উইজেটে পাঁচ সেকেন্ডের ক্লিক সম্পাদনকারী একটি রোবো স্ক্রিপ্ট অ্যাকশনের উদাহরণ নিচে দেওয়া হল:

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

"com.google.samples.apps.topeka:id/first_name" রিসোর্স আইডি সহ একটি UI উইজেটে একটি 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" এমুলেটর API 28-এ চাপ দেওয়ার জন্য অ্যান্ড্রয়েড স্টুডিওতে রোবো স্ক্রিপ্ট রেকর্ডার দ্বারা ব্যবহৃত।

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

{
  "eventType": "PRESSED_BACK"
}

হোম প্রেস করুন

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

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

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

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

{
  "eventType": "GO_HOME"
}

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

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

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

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

নিচে একটি রোবো স্ক্রিপ্ট অ্যাকশনের উদাহরণ দেওয়া হল যা "my.app.package:id/scrollable_card_container" রিসোর্স আইডি দিয়ে UI উইজেট স্ক্রোল করে যতক্ষণ না "Orange" লেখা সহ UI উইজেটটি স্ক্রিনে উপস্থিত থাকে (অথবা আর কোনও স্ক্রোল করা যাবে না, অথবা সর্বোচ্চ ৫০টি স্ক্রোলের সংখ্যা পৌঁছে যায়):

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

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

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

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

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

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

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

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

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

{
  "eventType": "TERMINATE_CRAWL"
}

অপেক্ষা করুন

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

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

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

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

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

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

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

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

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

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

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