এই নথিটি গঠন, ক্ষমতা, ব্যবহার, রেকর্ডিং এবং অ্যাকশন সহ 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
পৌঁছায়, তাহলে প্রদত্ত ক্রলের মধ্যে এটি আর ট্রিগার করা যাবে না। যদি বর্তমান প্রেক্ষাপটে একাধিক রোবো স্ক্রিপ্ট ট্রিগার করা যায়, তাহলে নিম্নলিখিত ক্রমে, রোবো স্ক্রিপ্টটি বেছে নেওয়ার মাধ্যমে অগ্রাধিকার দেওয়া হয়:
- একটি
contextDescriptor
বৈশিষ্ট্য আছে। - সর্বোচ্চ
priority
রয়েছে (ডিফল্টরূপে, সমস্ত রোবো স্ক্রিপ্টের1
এর একই সম্পাদনpriority
রয়েছে)। - রোবো স্ক্রিপ্টের অগ্রাধিকার একই হলে রোবো স্ক্রিপ্টের তালিকায় প্রথম দিকে প্রদর্শিত হবে।
নিম্নলিখিতটি তিনটি রোবো স্ক্রিপ্ট সহ একটি ফাইলের উদাহরণ যা একই ক্রিয়া সম্পাদন করে এবং একই অবস্থার দ্বারা ট্রিগার হয় - অ্যাপ-আন্ডার-টেস্টটি অগ্রভাগে রয়েছে:
[
{
"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
}
]
}
]
যখন অ্যাপ-আন্ডার-টেস্ট ফোরগ্রাউন্ডে থাকে, তখন রোবো ক্রমানুসারে নিম্নলিখিতগুলি ট্রিগার করে:
-
"Robo script 2"
কারণ এটির সর্বোচ্চ অগ্রাধিকার রয়েছে। -
"Robo script 1"
কারণ এটি একই অগ্রাধিকার সহ বাকি প্রযোজ্য রোবো স্ক্রিপ্টগুলির মধ্যে আগে উপস্থিত হয়৷ - সর্বশেষ প্রযোজ্য রোবো স্ক্রিপ্ট হিসাবে
"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 শিশুদের উপর ক্রিয়াকলাপ নিম্নলিখিত ধাপে সঞ্চালিত হয়:
রোবো পরীক্ষা নিশ্চিত করে যে সংশ্লিষ্ট শিশুটি রিসাইক্লারভিউ বা অ্যাডাপ্টারভিউ ধারণকারী পজিশনিং অ্যাকশনের মাধ্যমে স্ক্রিনে প্রদর্শিত হবে।
রোবো টেস্ট সরাসরি চাইল্ড এলিমেন্টে রেকর্ড করা ক্রিয়া সম্পাদন করে, যেহেতু এটি ইতিমধ্যেই স্ক্রিনে প্রদর্শিত হয়েছে।
নিম্নলিখিতটি একটি অ্যাডাপ্টারভিউ ( 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 এর সাথে পারস্পরিকভাবে একচেটিয়া। |
matchIndex | যখন লক্ষ্য উপাদানটি visionText ব্যবহার করে চিহ্নিত করা হয় তখন মিলিত লক্ষ্য উপাদানটির সংঘটনের সূচক নির্দিষ্ট করে। যদি এটি 0 হয়, রোবো স্ক্রিপ্ট অ্যাকশন প্রথম মিলে যাওয়া এলিমেন্ট বাছাই করে, যদি এটি 1 হয়, রোবো স্ক্রিপ্ট অ্যাকশন দ্বিতীয় মিলে যাওয়া এলিমেন্ট বাছাই করে, ইত্যাদি। বাম-থেকে-ডানে, উপরে-থেকে-নিচে অর্ডার করা হয়। ডিফল্ট মান হল 0 (প্রথম ম্যাচ বাছাই করা হয়েছে)। |
maxNumberOfRuns | যখন eventType SOFT_KEYBOARD_RANDOM_CLICK হয় তখন সফ্ট কীবোর্ডের একটি এলোমেলো উপাদানে কতবার ক্লিক করতে হবে তা নির্দিষ্ট করে। ডিফল্ট মান হল 1 । |
নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা রিসোর্স আইডি "com.google.samples.apps.topeka:id/done"
সহ একটি বোতামে ক্লিক করে :
{
"eventType": "VIEW_CLICKED",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/done"
}
]
}
নিম্নলিখিতটি একটি রোবো স্ক্রিপ্ট অ্যাকশনের একটি উদাহরণ যা 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 | অ্যান্ড্রয়েড ডিবাগ ব্রিজ (এডিবি) শেল কমান্ড কার্যকর করতে। |
নিম্নলিখিত বৈশিষ্ট্য ঐচ্ছিক:
-
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 এর সাথে পারস্পরিকভাবে একচেটিয়া। |
matchIndex | যখন লক্ষ্য উপাদানটি visionText ব্যবহার করে চিহ্নিত করা হয় তখন মিলিত লক্ষ্য উপাদানটির সংঘটনের সূচক নির্দিষ্ট করে। যদি এটি 0 হয়, রোবো স্ক্রিপ্ট অ্যাকশন প্রথম মিলে যাওয়া এলিমেন্ট বাছাই করে, যদি এটি 1 হয়, রোবো স্ক্রিপ্ট অ্যাকশন দ্বিতীয় মিলে যাওয়া এলিমেন্ট বাছাই করে, ইত্যাদি। বাম-থেকে-ডানে, উপরে-থেকে-নিচে অর্ডার করা হয়। ডিফল্ট মান হল 0 (প্রথম ম্যাচ বাছাই করা হয়েছে)। |
নিম্নলিখিত বৈশিষ্ট্য ঐচ্ছিক:
-
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 | সোয়াইপের দিক নির্দেশ করে:
|
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"
}
]
}