راهنمای مرجع دستورگان‌های روبات

این سند اطلاعات مرجعی درباره Robo scripts ارائه می‌دهد، ازجمله ساختار، قابلیت‌ها، کاربرد، ضبط، و کنش‌ها. اسکریپت‌های Robo آزمایش‌هایی هستند که کارهای تضمین کیفیت (QA) دستی را برای برنامه‌های تلفن همراه خودکارسازی می‌کنند و استراتژی‌های آزمایش پیش‌راه‌اندازی و ادغام مداوم (CI) را فعال می‌کنند. اسکریپت Robo یک فایل JSON است که توالی میانای کاربر (UI) و کنش‌های دیگر را توصیف می‌کند.

می‌توانید به روش‌های زیر Robo script ایجاد کنید:

  • از ویژگی ضبط Robo script استفاده کنید. (فقط Android)

  • اسکریپت Robo را به‌صورت دستی ایجاد کنید. (Android و iOS+)

  • اسکریپت Robo را ضبط کنید و سپس آن را به‌صورت دستی ویرایش کنید. (فقط Android)

برای کسب اطلاعات بیشتر درباره استفاده از Robo scripts، به اجرای Robo script مراجعه کنید.

مقدمه

دستورگان Robo درکنار ورودی‌های دیگر مانند «بسته برنامه Android» (APK) برنامه تحت آزمایش، برای آزمایش Robo ارائه می‌شود.

در زیر نمونه‌ای از Robo script آورده شده است که کاربر را به سیستم برنامه وارد می‌کند، که وقتی برنامه تحت آزمایش راه‌اندازی می‌شود، فعال می‌شود:

[
  {
    "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 script در فایل وجود داشته باشد و دارای شرط راه‌اندازی پیش‌فرض app_under_test_shown باشد، همان‌طور که در مثال بالا نشان داده شده است، می‌توانید Robo script را در فایل بااستفاده از قالب ساده‌تری مشخص کنید - درست مانند توالی کنش‌های آن:

[
  {
    "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+‎ از Robo scripts

Robo برای iOS+ (نسخه بتا) پشتیبانی محدودی برای Robo scripts دارد. نحو دستورگان Robo برای iOS+‎ با نحو Android یکسان است و ویژگی‌های پشتیبانی‌شده iOS+‎ رفتاری مشابه با همتایان Android خود دارند.

کنش‌های زیر در iOS+‎ پشتیبانی می‌شود:

  • اثبات
  • کلیک
  • کلیک طولانی
  • کشیدن
  • نادیده گرفتن همه عنصر(ها)
  • انتظار
  • نماگرفت گرفتن
  • پایان دادن به خزیدن

مشخصه‌های شناسایی زیر در توصیف‌کننده‌های عنصر در iOS+‎ پشتیبانی می‌شوند:

  • نام کلاس
  • نام کلاس نیا
  • شرح محتوا (و عبارت باقاعده)
  • نوشتار (و عبارت باقاعده)

شرایط راه‌انداز زیر در توصیف‌کننده‌های بافت در iOS+‎ پشتیبانی می‌شود:

  • برنامه تحت آزمایش نشان داده می‌شود
  • عنصر موجود است
  • کنش اسکریپت غیرروباتیک انجام شد

ساختار

یک Robo script چندین ویژگی دارد که نحوه اجرای آن توسط Robo را توصیف می‌کند. اکثر این مشخصه‌ها اختیاری هستند و مقادیر پیش‌فرض ازپیش‌تعریف‌شده دارند:

مشخصه شرح
id عدد صحیحی که به ردیابی این Robo script در بروندادهای خزیدن کمک می‌کند. Robo دارای اسکریپت‌های Robo داخلی با idهای خودشان است. اگرچه id یکسان در دستورگان‌های Robo مختلف بر رفتار آن‌ها تأثیر نمی‌گذارد، تشخیص کنش‌ها از این دستورگان‌های Robo در بروندادهای خزیدن می‌تواند چالش‌برانگیز باشد. توصیه می‌کنیم برای جلوگیری از هرگونه تداخل، id منحصربه‌فردی با مقدار 1000 یا بالاتر برای Robo scripts اختصاص دهید.
description مشابه id اما توصیفی‌تر.
crawlStage مرحله‌ای از خزیدن Robo که Robo این دستورات Robo را در آن اعمال می‌کند. به‌طور پیش‌فرض، این مرحله اصلی خزیدن است.
priority اولویت این Robo script درمقایسه با Robo scriptهای دیگر. به‌طور پیش‌فرض، همه Robo scripts اولویت 1 دارند.
maxNumberOfRuns مشخص می‌کند Robo چند بار درطول خزیدن می‌تواند این Robo script را اجرا کند. به‌طور پیش‌فرض، Robo می‌تواند یک‌بار اسکریپت Robo را اجرا کند.
contextDescriptor بافت یا شرایطی را که این Robo script را راه‌اندازی می‌کند شرح می‌دهد. اگر حذف شود، شرط راه‌اندازی این Robo script همیشه برآورده‌شده درنظر گرفته می‌شود؛ به‌عبارت دیگر، Robo script بدون شرط است.
actions همه کنش‌های این Robo script.

یک فایل حاوی مجموعه‌ای از یک یا چند Robo script است.

در زیر نمونه‌ای از فایل با دو Robo script غیرمشروط آورده شده است که هرکدام یک کنش دارند که یک‌بار در شروع خزیدن اجرا می‌شود:

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

توصیف‌گر بافت

توصیف‌کننده بافت، بافت یا شرایطی را تعریف می‌کند که بااستفاده از یک یا ترکیبی از چند مشخصه، راه‌انداز Robo script است:

مشخصه شرح
"condition": "always" همیشه یک Robo script را راه‌اندازی می‌کند.
"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 کنش متوالی آخر انجام‌شده توسط آزمایش Robo، کنش‌های اسکریپت Robo نباشند.
negateCondition اگر روی true تنظیم شود، condition را نفی می‌کند. برای مثال، می‌توانید از این مشخصه برای بررسی اینکه آیا ابزاره UI در صفحه وجود ندارد یا اینکه برنامه تحت آزمایش در پیش‌زمینه اجرا نمی‌شود استفاده کنید.
elementDescriptors یک یا چند توصیف‌کننده عنصر که ابزاره واسط کاربر را در صفحه شناسایی می‌کند. این نشانگر در ترکیب با شرایط element_present، element_disabled، و element_checked استفاده می‌شود. با visionText ناسازگار است. برای اطلاعات بیشتر، توصیف‌کننده‌های عنصر را ببینید.
visionText نوشتار روی صفحه بااستفاده از API «تشخیص نوری نویسه» (OCR) شناسایی می‌شود. visionText در ترکیب با شرط element_present استفاده می‌شود. با elementDescriptors ناسازگار است.
nonRoboscriptActionCount تعداد کنش‌های غیردستورگان Robo متوالی که قبلاً انجام شده است. این مقدار در ترکیب با شرط non_roboscript_action_performed استفاده می‌شود تا پس‌از هر nonRoboscriptActionCount کنش Robo، یک دستور Robo راه‌اندازی شود. به‌طور پیش‌فرض، 1 است.

در زیر نمونه‌ای از دستور Robo آورده شده است که با وجود ابزارک میانای کاربری با شناسه منبع "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"
        }
      ]
    }
  ]
}

در زیر نمونه‌ای از Robo script آورده شده است که با "Privacy Policy" شناسایی‌شده توسط «تشخیص نویسه نوری» (OCR) راه‌اندازی می‌شود:

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

در زیر نمونه‌ای از دستورگان Robo ارائه شده است که پس‌از هر کنش Robo غیردستورگانی، ۵ ثانیه صبر می‌کند:

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

کنش‌ها

هر کنش در دستور Robo به‌صورت دسته‌ای از یک یا چند جفت مقدار-ویژگی نشان داده می‌شود که در جدول زیر شرح داده شده است:

مشخصه شرح
eventType نوع کنش را مشخص می‌کند، برای مثال، کلیک، ویرایش نوشتار، و غیره. برای هر کنش الزامی است.
elementDescriptors توصیف‌کننده‌هایی که ابزاره واسط کاربر را شناسایی می‌کنند. برای همه کنش‌هایی که ابزاره واسط کاربر هدف دارند، مثل کلیک کردن روی دکمه‌ای خاص، الزامی است.
optional اگر روی true تنظیم شده باشد، وقتی این کنش قابل‌اجرا نباشد، از آن رد می‌شود. برای مثال، وقتی این کنش نمی‌تواند ابزارک واسط کاربر هدفش را در صفحه‌ای پیدا کند، از آن رد می‌شود، بدون اینکه اسکریپت Robo حاوی آن ناموفق شود. به‌طور پیش‌فرض، مقدار false است.
replacementText نوشتاری که باید در ابزاره واسط کاربر هدف وارد شود. برای کنش‌های ویرایش نوشتار الزامی است.
swipeDirection جهت تند کشیدن را مشخص می‌کند. برای کنش‌های تند کشیدن الزامی است.
delayTime مدت زمان انتظار را به میلی‌ثانیه مشخص می‌کند. برای کنش‌های انتظار الزامی است.
‫pointTapXCoordinate و pointTapYCoordinate مختصات X و Y پیکسل نقطه تک‌ضرب‌زده‌شده. به‌صورت متقابل انحصاری با pointTapXPercent و pointTapYPercent. برای کنش‌های تک‌ضرب زدن روی نقطه الزامی است.
‫pointTapXPercent و pointTapYPercent درصد مختصات X و Y نقطه تک‌ضرب‌زده‌شده. به‌صورت متقابل انحصاری با pointTapXCoordinate و pointTapYCoordinate. برای کنش‌های تک‌ضرب زدن روی نقطه الزامی است.

در زیر نمونه‌ای از دستورگان Robo با دو کنش بدون ابزاره‌های هدف واسط کاربر آورده شده است، یعنی این کنش‌ها روی ابزاره واسط کاربر خاصی اجرا نمی‌شوند:

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

توصیف‌گرهای عنصر

توصیف‌کننده عنصر، ابزارک واسط کاربر را بااستفاده از یک یا چند مورد از مشخصه‌های شناسایی زیر شناسایی می‌کند:

مشخصه شرح
className –
ancestorClassName نام کلاس عنصر سلسله‌مراتب واسط کاربر. جد هرکدام از گره‌های والد در سلسله‌مراتب واسط کاربر عنصر است، ازجمله خود عنصر.
resourceId –
resourceIdRegex عبارت باقاعده Java برای مطابقت با resourceId.
contentDescription –
contentDescriptionRegex عبارت باقاعده Java برای مطابقت با contentDescription.
text (که روی صفحه‌نمایش ظاهر می‌شود) –
textRegex عبارت باقاعده Java برای مطابقت با text.
groupViewChildPosition، recyclerViewChildPosition، یا adapterViewChildPosition نشان‌دهنده موقعیت فرزند ابزاره واسط کاربر بسته به نوع ابزاره والد آن است.

اغلب این مشخصه‌ها تعریف‌نشده هستند، برای مثال، ممکن است دکمه‌ای نوشتار و شرح محتوا نداشته باشد. حتی اگر برخی‌از مقادیر مشخصه وجود داشته باشند، ممکن است در صفحه برنامه خاصی (ازجمله resourceId) منحصربه‌فرد نباشند.

برای مثال، تمایز بین موارد یک فهرست معمولاً فقط بااستفاده از موقعیت‌های فرزند متفاوت آن‌ها در ابزارک والد امکان‌پذیر است. این یعنی استفاده از فقط یک توصیف‌گر عنصر برای شناسایی ابزاره واسط کاربر معمولاً کافی نیست. بنابراین، مشخصه elementDescriptors کنش حاوی توالی توصیف‌کننده‌های عنصر است که به‌گونه‌ای مرتب شده‌اند که اولین توصیف‌کننده با ابزاره واسط کاربر هدف مطابقت دارد، دومین توصیف‌کننده با ابزاره والد ابزاره واسط کاربر هدف مطابقت دارد، و غیره. وقتی همه توصیف‌کننده‌های عنصر ابزاره واسط کاربر با زیرسلسله‌مراتب ابزاره واسط کاربر مربوطه مطابقت داشته باشد، ابزاره واسط کاربر هدف کنش مطابقت داده می‌شود.

در زیر نمونه‌ای از Robo script با کنش‌های تغییر نوشتار و کلیک آورده شده است که هر دو کنش مستلزم آن است که ابزاره واسط کاربر هدف را بااستفاده از توصیف‌کننده‌های عنصر ارائه‌شده شناسایی کنید:

[
  {
    "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 گزینه‌های اجرای موردنظر می‌آید.

اسکریپت‌های Robo از گزینه‌های اجرای زیر پشتیبانی می‌کنند:

  • executionMode - گزینه‌های اجرا که هنگام اجرای Robo script اعمال می‌شود:
    • strict - اگر روی true تنظیم شده باشد، Robo script از تطابق جزئی، رد شدن از کنش فعلی، و تعلیق استفاده نمی‌کند. یعنی Robo script به‌عنوان یک آزمایش ابزار دقیق معمولی اجرا می‌شود و به‌محض اینکه هریک از کنش‌های آن قابل‌اجرا نباشد، ناموفق می‌شود. به‌طور پیش‌فرض، false است.
    • ‫dismiss_popups - اگر روی true تنظیم شده باشد، «آزمایش Robo» هرگونه گفتگوی غیرمنتظره را هنگام اجرای دستور Robo حتی در حالت strict رد می‌کند. این گزینه وقتی در حالت strict نباشید تأثیری ندارد. به‌طور پیش‌فرض، false است.
    • notify - اگر روی false تنظیم شود، Robo script اعلان‌های روی صفحه را در ابتدا و انتهای اجرایش نشان نمی‌دهد. به‌طور پیش‌فرض، true است.
  • postscript - گزینه‌های اجرا که پس‌از تکمیل اسکریپت Robo اعمال می‌شوند:
    • terminate - اگر روی true تنظیم شود، آزمایش Robo پس‌از تکمیل شدن Robo script، خزیدن را متوقف می‌کند. به‌طور پیش‌فرض، false است.

در زیر نمونه‌ای از Robo script اجراشده در حالت strict بدون اعلان‌های روی صفحه آورده شده است که سه ثانیه منتظر می‌ماند و سپس خزیدن متوقف می‌شود:

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

پارامترهای الگو

پارامتر الگو جای‌بانی در Robo script است که وقتی آزمایش Robo آن Robo script را برای اجرا بار می‌کند، با مقدار واقعی جایگزین می‌شود. پارامترهای الگو با دو زیرخط و سپس علامت درصد شروع می‌شوند و با علامت درصد و سپس دو زیرخط پایان می‌یابند.

اسکریپت‌های Robo از پارامتر الگوی زیر پشتیبانی می‌کنند:

  • __%APP_PACKAGE_NAME%__ - نام بسته برنامه تحت آزمایش.

در زیر نمونه‌ای از Robo script آورده شده است که فرایند برنامه تحت آزمایش را متوقف می‌کند:

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

نظرات

یک Robo script می‌تواند حاوی خطوط نظر باشد، که خطوطی هستند که با # یا // شروع می‌شوند.

در زیر نمونه‌ای از Robo script با چند نظر آورده شده است:

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

قابلیت‌ها

به‌طور پیش‌فرض، تا زمانی که همه کنش‌های Robo script تکمیل نشود (یا حداقل تلاش نشود)، Robo script فعال باقی می‌ماند. آزمایش Robo هرگاه کنشی را برای اجرا انتخاب می‌کند، تلاش می‌کند آن را با کنش اسکریپت Robo مطابقت دهد. اسکریپت Robo از تکنیک‌های زیر برای افزایش استحکام استفاده می‌کند:

تکنیک شرح
مطابقت جزئی اگر کنش فعلی Robo script به‌طور کامل مطابقت نداشته باشد، معیارهای مطابقت تسهیل می‌شود و مطابقت دوباره امتحان می‌شود. تطابق جزئی هنگام تطبیق دادن ابزاره واسط کاربر هدف کنش اسکریپت Robo، توصیف‌کننده بیرونی‌ترین عنصر را درنظر نمی‌گیرد.

اگر تطابق جزئی موفقیت‌آمیز باشد، کنش Robo script مربوطه طبق معمول انجام می‌شود. این تکنیک از سناریوهایی پشتیبانی می‌کند که در آن‌ها ساختار برنامه تغییر می‌کند، برای مثال، بین نسخه‌های برنامه، وقتی عناصر صفحه دوباره مرتب می‌شوند.

رد کردن کنش فعلی اگر کنش فعلی Robo script به‌طور کامل یا جزئی مطابقت نداشته باشد، Robo سعی می‌کند کنش بعدی Robo script را مطابقت دهد. اگر کنش بعدی به‌طور کامل یا جزئی مطابقت داشته باشد، «آزمایش Robo» کنش فعلی Robo script را رد می‌کند (و هرگز به آن برنمی‌گردد) و کنش بعدی را انجام می‌دهد.

این تکنیک از سناریوهایی پشتیبانی می‌کند که رفتار برنامه بین نسخه‌ها تغییر می‌کند یا ناپایدار است، برای مثال، زمانی که یک کادر گفتگوی متناوب ممکن است در صفحه‌های مختلف درطول ضبط درمقابل بازپخش یک Robo script ظاهر شود.

تعلیق اگر کنش‌های فعلی یا بعدی Robo script به‌طور کامل یا جزئی مطابقت نداشته باشند، Robo script موقتاً تعلیق می‌شود و Robo test کنشی را برای اجرا بااستفاده از استراتژی‌های دیگرش انتخاب می‌کند. پس‌از تکمیل این کنش، آزمایش Robo اجرای Robo script را ازسر می‌گیرد.

تا زمانی که کنش‌های فعلی یا بعدی Robo script مطابقت داده نشود، Robo script برای هر تعداد کنش به‌حالت تعلیق باقی می‌ماند. بنابراین، لزوماً لازم نیست که Robo script مقدمه‌ای برای آزمایش Robo باشد، و می‌توانید کنش‌های Robo script را با کنش‌های استاندارد آزمایش Robo درهم‌آمیزید. این تکنیک از سناریوهایی پشتیبانی می‌کند که رفتار برنامه ناپایدار است، یا زمانی که تغییرات بین نسخه‌های برنامه به‌اندازه‌ای بزرگ است که آزمایش Robo باید «شکاف‌ها را با کنش‌های استاندارد خود پر کند».

اولویت‌ها

اگر Robo script به maxNumberOfRuns خود برسد، دیگر نمی‌تواند در یک خزیدن مشخص راه‌اندازی شود. اگر بیش‌از یک Robo script بتواند توسط زمینه فعلی راه‌اندازی شود، اولویت با انتخاب Robo script است که به‌ترتیب زیر:

  1. دارای مشخصه contextDescriptor است.
  2. بالاترین priority را داشته باشد (به‌طور پیش‌فرض، همه اسکریپت‌های Robo priority اجرای یکسان 1 دارند).
  3. اگر اولویت‌های Robo script یکسان باشد، در ابتدای فهرست Robo script نشان داده می‌شود.

در زیر نمونه‌ای از فایل با سه Robo script آورده شده است که کنش یکسانی را انجام می‌دهند و با شرط یکسانی راه‌اندازی می‌شوند - برنامه تحت آزمایش در پیش‌زمینه است:

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

وقتی برنامه تحت آزمایش در پیش‌زمینه باشد، Robo موارد زیر را به‌ترتیب راه‌اندازی می‌کند:

  1. "Robo script 2" چون بالاترین اولویت را دارد.
  2. "Robo script 1" زیرا زودتر از سایر Robo scriptهای قابل‌اجرا با اولویت یکسان ظاهر می‌شود.
  3. "Robo script 3" به‌عنوان آخرین Robo script قابل‌اجرا.

اجراهای تکراری

به‌طور پیش‌فرض، Robo درطول خزش حداکثر یک‌بار راه‌انداز Robo را فعال می‌کند. این مورد را می‌توان ازطریق مشخصه maxNumberOfRuns تنظیم کرد.

در زیر نمونه‌ای از دستور Robo ارائه شده است که برنامه تحت آزمایش را تا ۱۰ بار به پس‌زمینه می‌برد:

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

مرحله خزیدن

دستورات Robo در مراحل مختلف خزیدن Robo قابل‌اجرا هستند:

مرحله خزیدن شرح
pre_crawl قبل‌از اینکه Robo راه‌اندازی شود و خزیدن در برنامه تحت آزمایش را شروع کند.
post_crawl پس‌از اینکه Robo خزیدن در برنامه تحت آزمایش را به‌پایان رساند. مدت زمان post_crawl دستورگان Robo نباید از ۱۵ ثانیه بیشتر باشد وگرنه ممکن است خزیدن به‌دلیل اتمام مهلت پایان یابد.
crawl مرحله اصلی خزیدن، زمانی که Robo در برنامه تحت آزمایش می‌خزد.
close_screen وقتی Robo سعی می‌کند از صفحه‌نمایش خاصی برگردد (برگشتن به عقب)، وقتی همه کنش‌های ممکن در این صفحه‌نمایش کاوش شده باشد. به‌طور پیش‌فرض، Robo دکمه برگشت را فشار می‌دهد که در برخی سناریوها نامطلوب است.

اگر مشخصه crawlStage از Robo script نامشخص باشد، به‌طور ضمنی crawl درنظر گرفته می‌شود.

در زیر نمونه‌ای از دستور Robo آورده شده است که داده‌های کاربر برنامه تحت آزمایش را پیش‌از شروع خزیدن Robo در آن پاک می‌کند:

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

در زیر نمونه‌ای از دستور Robo ارائه شده است که به Robo دستور می‌دهد هروقت می‌خواهد از کادر گفتگوی تأیید برگردد (ردیابی معکوس)، روی "Cancel" کلیک کند:

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

کنش‌های شرطی

یک Robo script می‌تواند شامل کنش‌های شرطی باشد. کنش‌های شرطی سه مشخصه اضافی دارند که نحوه اجرای آن‌ها توسط Robo را توصیف می‌کند:

مشخصه شرح
priority اولویت این کنش شرطی در مقایسه با دیگر کنش‌های شرطی در اسکریپت Robo حاوی آن. به‌طور پیش‌فرض، همه کنش‌های شرطی اولویت 1 دارند.
maxNumberOfRuns تعداد دفعاتی که این کنش شرطی می‌تواند درطول یک اجرای Robo script حاوی آن انجام شود. به‌طور پیش‌فرض، همه کنش‌های شرطی را می‌توان حداکثر یک‌بار در یک اجرای Robo script حاوی آن‌ها انجام داد.
contextDescriptor زمینه/شرطی که این کنش شرطی را راه‌اندازی می‌کند. این مؤلفه ساختاری مشابه با contextDescriptor Robo script دارد و قابلیت‌های مشابهی ارائه می‌دهد

وقتی راه‌اندازی می‌شود، یک اسکریپت Robo کنش‌های غیرشرطی خود را یکی یکی به ترتیب ظاهر شدن انجام می‌دهد. اگر اسکریپت Robo حاوی کنش‌های شرطی باشد، هر بار قبل‌از انتخاب کنش غیرشرطی برای اجرا، این کنش‌ها درنظر گرفته می‌شوند. اگر کنش شرطی‌ای راه‌اندازی شود و براساس اولویت و تعداد اجراهای باقی‌مانده انتخاب شود، سپس Robo script این کنش شرطی را انجام می‌دهد. درغیراین‌صورت، Robo script کنش غیرشرطی زیر را انجام می‌دهد. برای معتبر بودن، Robo script باید حداقل یک کنش غیرشرطی داشته باشد.

در زیر نمونه‌ای از اسکریپت Robo غیرمشروط با کنش مشروط آورده شده است که اگر کادرهای گفتگوی بالاپر در هر نقطه‌ای از اجرای اسکریپت Robo ظاهر شوند، آن‌ها را می‌بندد:

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

نادیده گرفتن کنش‌ها

یک Robo script می‌تواند حاوی دستورالعمل‌هایی برای Robo باشد تا ابزاره‌های خاص واسط کاربر یا همه ابزاره‌های واسط کاربر را در صفحه‌ای خاص نادیده بگیرد. این دستورالعمل‌ها به‌صورت نادیده گرفتن «کنش‌ها» با eventType ELEMENT_IGNORED و ALL_ELEMENTS_IGNORED به‌ترتیب نشان داده می‌شوند.

هرگاه مشخصه contextDescriptor اسکریپت Robo حاوی کنش‌های نادیده گرفتن با صفحه‌نمایش داده‌شده‌ای مطابقت داشته باشد، Robo با هیچ‌یک از ابزاره‌های میانای کاربر که هدف کنش‌های نادیده گرفتن آن هستند تعامل برقرار نمی‌کند (مگر اینکه کنش اسکریپت Robo دیگری Robo را وادار کند کنشی را روی یکی از ابزاره‌های میانای کاربر نادیده‌گرفته‌شده انجام دهد).

یک دستور Robo می‌تواند ترکیبی از کنش‌های نادیده گرفتن، شرطی، و غیرشرطی باشد. برخلاف دیگر کنش‌های Robo script، کنش‌های نادیده گرفتن تا زمانی اعمال می‌شوند که contextDescriptor Robo script حاوی آن‌ها با صفحه‌ای درطول خزیدن Robo مطابقت داشته باشد، صرف‌نظر از مقادیر مشخصه‌های priority و maxNumberOfRuns.

در زیر نمونه‌ای از فایل با دو Robo script آورده شده است. اولین Robo script باعث می‌شود Robo همه ابزاره‌های واسط کاربر را در صفحه‌ای که حاوی ابزاره واسط کاربر با شناسه منبع "my.app.package:id/ignored_screen" است نادیده بگیرد. دستورگان Robo دوم باعث می‌شود Robo ابزاره‌های میانای کاربری را که شناسه‌های منبع آن‌ها با عبارت باقاعده Java ".*:id/done" در صفحه‌ای حاوی ابزاره میانای کاربری با شناسه منبع "my.app.package:id/main_screen" مطابقت دارد نادیده بگیرد:

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

پشتیبانی RecyclerView و AdapterView

فرزندان ابزاره‌های RecyclerView و AdapterView به‌طور پویا بار می‌شوند و ممکن است با چندین تند کشیدن از صفحه فعلی نمایش داده شوند. ازآنجایی‌که اندازه صفحه‌نمایش و تعداد تند کشیدن‌های لازم برای رسیدن به این فرزند برای انواع مختلف دستگاه‌ها متفاوت است، تکیه بر موقعیت داده‌های فرزند که مطلق است بسیار مطمئن‌تر است. تکیه کردن بر تعداد تند کشیدن‌های لازم برای آوردن این فرزند به صفحه و سپس استفاده از موقعیت صفحه آن، رویکردی با استحکام کمتر است.

بنابراین، Robo script موقعیت‌های مطلق داده‌های فرزندان RecyclerView را که هدف کنش‌های Robo script هستند به‌صورت recyclerViewChildPosition ضبط می‌کند. اسکریپت Robo همچنین موقعیت‌های مطلق داده‌های فرزندان AdapterView را که هدف کنش‌های اسکریپت Robo هستند به‌صورت adapterViewChildPosition ضبط می‌کند.

کنش‌ها روی فرزندان RecyclerView و AdapterView در مراحل زیر انجام می‌شوند:

  1. آزمایش Robo مطمئن می‌شود که فرزند مربوطه ازطریق کنش موقعیت‌یابی در RecyclerView یا AdapterView حاوی آن روی صفحه نمایش داده می‌شود.

  2. آزمایش Robo کنش ضبط‌شده را مستقیماً روی عنصر فرزند انجام می‌دهد، زیرا این عنصر ازقبل در صفحه نمایش داده شده است.

در زیر نمونه‌ای از کنش کلیک روی فرزند 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
    }
  ]
}

ضبط کردن Robo script در Android Studio و اجرای آن در Test Lab

می‌توانید در Android Studio یک Robo script ایجاد کنید که اسکریپت را به‌عنوان یک فایل JSON ذخیره می‌کند. سپس می‌توانید فایل JSON را با برنامه در Firebase Test Lab بارگذاری کنید و آزمایش را براساس آن اجرا کنید.

وقتی آزمایش Robo را با متن پیوست‌شده اجرا می‌کنید، آزمایش Robo ابتدا کنش‌های ازپیش نوشته‌شده شما را گام‌به‌گام اجرا می‌کند و سپس برنامه را طبق معمول کاوش می‌کند.

برای ایجاد فایل JSON اسکریپت Robo در «استودیو Android»، مراحل موجود در ضبط اسکریپت Robo بااستفاده از Test Lab در «استودیو Android» را دنبال کنید.

کنش‌های Robo script

مشخصه اختیاری رایج زیر برای همه کنش‌ها اعمال می‌شود:

  • description - به ردیابی اجرای این کنش Robo script در خروجی‌های آزمایش Robo کمک می‌کند.

اثبات

اگر شرط ادعاشده درست باشد، Robo script به کنش بعدی ادامه می‌دهد که می‌تواند ادعای دیگری باشد. درغیراین‌صورت، اجرای Robo script به‌دلیل عدم موفقیت در اثبات متوقف می‌شود.

جدول زیر مشخصه‌های الزامی را فهرست می‌کند:

مشخصه شرح
"eventType": "ASSERTION" --
contextDescriptor بافت یا شرایط ادعاشده را توصیف می‌کند. این عنصر ساختاری مشابه با contextDescriptor در Robo script دارد و قابلیت‌های مشابهی ارائه می‌دهد.

در زیر نمونه‌ای از یک عبارت Robo script آورده شده است که بررسی می‌کند برنامه تحت آزمایش در پیش‌زمینه است:

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

در زیر نمونه‌ای از یک ادعای Robo script آورده شده است که بررسی می‌کند آیا یک ابزاره واسط کاربر با شناسه منبع "com.google.samples.apps.topeka:id/done" در صفحه وجود دارد یا نه:

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

در زیر نمونه‌ای از یک ادعای Robo script آورده شده است که بررسی می‌کند "Settings" بااستفاده از OCR در صفحه شناسایی نشده باشد:

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

کلیک

جدول زیر مشخصه‌های الزامی را فهرست می‌کند:

مشخصه شرح
eventType نوع کنش Robo script را مشخص می‌کند.
"eventType": "VIEW_CLICKED" روی عنصر هدف برنامه درحال آزمایش کلیک می‌کند.
"eventType": "SOFT_KEYBOARD_CLICK" روی عنصر هدف صفحه‌کلید نرم‌افزاری کلیک می‌کند.
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK" روی عناصر تصادفی صفحه‌کلید نرم‌افزاری تا maxNumberOfRuns بار کلیک می‌کند.
"eventType": "LIST_ITEM_CLICKED" توسط ضبط‌کننده Robo script در Android Studio برای کلیک کردن روی موارد فهرست استفاده می‌شود.
elementDescriptors ابزاره رابط کاربری کلیک‌شده را بااستفاده از سلسله‌مراتب رابط کاربری Android شناسایی می‌کند. با visionText ناسازگار است.
visionText عنصر کلیک‌شده را بااستفاده از OCR شناسایی می‌کند. با elementDescriptors ناسازگار است.
matchIndex نمایه رخداد عنصر هدف منطبق را مشخص می‌کند، وقتی عنصر هدف بااستفاده از visionText شناسایی می‌شود. اگر 0 باشد، کنش Robo script اولین عنصر منطبق را انتخاب می‌کند، اگر 1 باشد، کنش Robo script دومین عنصر منطبق را انتخاب می‌کند، و غیره. ترتیب از چپ به راست و از بالا به پایین تعیین می‌شود. مقدار پیش‌فرض 0 است (اولین مورد منطبق انتخاب می‌شود).
maxNumberOfRuns مشخص می‌کند که چند بار روی عنصر تصادفی صفحه‌کلید نرم‌افزاری کلیک شود، وقتی eventType برابر با SOFT_KEYBOARD_RANDOM_CLICK است. مقدار پیش‌فرض 1 است.

در زیر نمونه‌ای از کنش Robo script آورده شده است که روی دکمه‌ای با شناسه منبع "com.google.samples.apps.topeka:id/done" کلیک می‌کند:

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

در زیر نمونه‌ای از کنش Robo script آورده شده است که روی دومین مورد از کلمه "Search" که بااستفاده از OCR در صفحه شناسایی شده است کلیک می‌کند:

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

در زیر نمونه‌ای از کنش Robo script را می‌بینید که روی عنصر صفحه‌کلید نرم‌افزاری با شرح محتوای "Emoji button" کلیک می‌کند:

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

در زیر نمونه‌ای از کنش Robo script آورده شده است که به‌طور تصادفی روی عناصر صفحه‌کلید نرم‌افزاری تا پنج بار کلیک می‌کند:

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

غیرفعال کردن صفحه‌کلید نرم‌افزاری

جدول زیر مشخصه‌های الزامی را فهرست می‌کند:

مشخصه شرح
"eventType": "DISABLE_KEYBOARD" --

در زیر نمونه‌ای از کنش Robo script را می‌بینید که صفحه‌کلید نرم‌افزاری را غیرفعال می‌کند:

{
  "eventType": "DISABLE_KEYBOARD"
}

اجرای فرمان پوسته adb

جدول زیر مشخصه‌های الزامی را فهرست می‌کند:

مشخصه شرح
"eventType": "ADB_SHELL_COMMAND" --
command فرمان پوسته «پل اشکال‌زدایی Android»‏ (adb) برای اجرا.

مشخصه زیر اختیاری است:

  • expectedOutputRegex - خروجی موردانتظار فرمان به‌عنوان عبارت باقاعده Java. اگر خروجی مطابقت نداشته باشد، کنش Robo script ناموفق می‌شود. به‌طور پیش‌فرض، این رشته خالی است، یعنی برونداد بررسی نمی‌شود.

در زیر نمونه‌ای از کنش Robo script ارائه شده است که داده‌های کاربر برنامه تحت آزمایش را پاک می‌کند:

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

اعطای اجازه‌ها

این کنش توسط ضبط‌کننده Robo script در Android Studio برای سازگاری با نسخه قدیمی با Espresso Test Recorder ضبط می‌شود. آزمایش Robo در ابتدای هر خزیدن، همه اجازه‌ها را به برنامه تحت آزمایش اعطا می‌کند و بنابراین، این کنش بدون عملیات است. از این کنش در دستورات Robo استفاده نکنید.

جدول زیر مشخصه‌های الزامی را فهرست می‌کند:

مشخصه شرح
"eventType": "PERMISSIONS_REQUEST" --

نادیده گرفتن همه عناصر روی صفحه

این کنش باعث می‌شود Robo همه عناصر موجود در هر صفحه‌ای را که راه‌انداز متن Robo حاوی آن است نادیده بگیرد.

جدول زیر مشخصه‌های الزامی را فهرست می‌کند:

مشخصه شرح
"eventType": "ALL_ELEMENTS_IGNORED" --

در زیر نمونه‌ای از کنش Robo script آورده شده است که باعث می‌شود Robo همه عناصر روی صفحه را نادیده بگیرد:

{
  "eventType": "ALL_ELEMENTS_IGNORED"
}

نادیده گرفتن عنصر

این کنش باعث می‌شود Robo عنصر (یا عناصری) را که با elementDescriptors مشخص‌شده مطابقت دارد نادیده بگیرد.

جدول زیر مشخصه‌های الزامی را فهرست می‌کند:

مشخصه شرح
"eventType": "ELEMENT_IGNORED" --
elementDescriptors ابزاره(های) نادیده‌گرفته‌شده میانای کاربری را بااستفاده از سلسله‌مراتب میانای کاربری Android شناسایی می‌کند.

مشخصه زیر اختیاری است:

  • ignoreChildren - اگر روی true تنظیم شود، Robo همه فرزندان ابزاره(های) واسط کاربر نادیده‌گرفته‌شده را نیز نادیده می‌گیرد. به‌طور پیش‌فرض، false است.

در زیر نمونه‌ای از کنش Robo script آورده شده است که باعث می‌شود Robo همه عناصری را که شرح محتوای آن‌ها با "Avatar" شروع می‌شود نادیده بگیرد:

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

نوشتار ورودی

جدول زیر مشخصه‌های الزامی را فهرست می‌کند:

مشخصه شرح
eventType نوع کنش Robo script را مشخص می‌کند.
"eventType": "VIEW_TEXT_CHANGED" نوشتار ارائه‌شده را در ابزاره واسط کاربر هدف وارد می‌کند.
"eventType": "ENTER_TEXT" نوشتار داده‌شده را در ابزاره واسط کاربر هدف وارد می‌کند و سپس رویداد KEYCODE_ENTER را به این ابزاره واسط کاربر ارسال می‌کند.
elementDescriptors ابزارک میانای کاربری هدف را بااستفاده از سلسله‌مراتب میانای کاربری Android شناسایی می‌کند.
replacementText نوشتاری که باید در ابزاره واسط کاربر هدف وارد شود.

در زیر نمونه‌ای از کنش Robo script آورده شده است که "John" را در ابزارک میانای کاربری با شناسه منبع "com.google.samples.apps.topeka:id/first_name" وارد می‌کند:

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

کلیک طولانی

جدول زیر مشخصه‌های الزامی را فهرست می‌کند:

مشخصه شرح
"eventType": "VIEW_LONG_CLICKED" --
elementDescriptors ابزارک میانای کاربری هدف را بااستفاده از سلسله‌مراتب میانای کاربری Android شناسایی می‌کند. با visionText ناسازگار است.
visionText عنصری را که روی آن کلیک طولانی شده است بااستفاده از OCR شناسایی می‌کند. با elementDescriptors ناسازگار است.
matchIndex نمایه رخداد عنصر هدف منطبق را مشخص می‌کند، وقتی عنصر هدف بااستفاده از visionText شناسایی می‌شود. اگر 0 باشد، کنش Robo script اولین عنصر منطبق را انتخاب می‌کند، اگر 1 باشد، کنش Robo script دومین عنصر منطبق را انتخاب می‌کند، و غیره. ترتیب از چپ به راست و از بالا به پایین تعیین می‌شود. مقدار پیش‌فرض 0 است (اولین مورد منطبق انتخاب می‌شود).

مشخصه زیر اختیاری است:

  • delayTime - مشخص می‌کند که فشار دادن کلیک طولانی چقدر طول می‌کشد، برحسب میلی‌ثانیه.

در زیر نمونه‌ای از کنش Robo script آورده شده است که کلیکی پنج ثانیه‌ای روی ابزاره واسط کاربر با شرح محتوای "Avatar 8" انجام می‌دهد:

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

انجام اشاره یک‌نقطه‌ای

جدول زیر مشخصه‌های الزامی را فهرست می‌کند:

مشخصه شرح
"eventType": "ONE_POINT_GESTURE" --
coordinates دو مختصات برای اشاره یک‌نقطه‌ای، با قالب «(x1,y1)->(x2,y2)» به‌صورت درصد یا پیکسل.

مشخصه زیر اختیاری است:

  • dragAndDrop - اگر روی true تنظیم شده باشد، اشاره یک‌نقطه‌ای کنش کشیدن و رها کردن را انجام می‌دهد. به‌طور پیش‌فرض، false است.

در زیر مثالی از کنش اشاره یک‌نقطه‌ای Robo script آورده شده است که تند کشیدن به پایین را انجام می‌دهد:

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

اشاره دو نقطه‌ای انجام دهید

جدول زیر مشخصه‌های الزامی را فهرست می‌کند:

مشخصه شرح
"eventType": "TWO_POINT_GESTURE" --
coordinates چهار مختصات برای اشاره دو نقطه‌ای، با قالب «(x1,y1)->(x2,y2),(x3,y3)->(x4,y4)» به‌صورت درصد یا پیکسل.

در زیر نمونه‌ای از کنش Robo script که اشاره نزدیک کردن انگشتان را انجام می‌دهد آورده شده است:

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

انجام کنش IME

این کنش دکمه کنش فعلی را، برای مثال، بعدی، انجام شد، و جستجو، در «ویرایشگر روش ورودی» (IME) برای ابزاره واسط کاربر هدف مشخص‌شده فشار می‌دهد.

جدول زیر مشخصه‌های الزامی را فهرست می‌کند:

مشخصه شرح
"eventType": "PRESSED_EDITOR_ACTION" --
elementDescriptors ابزارک میانای کاربری هدف را بااستفاده از سلسله‌مراتب میانای کاربری Android شناسایی می‌کند.

در زیر نمونه‌ای از کنش Robo script آورده شده است که کنش IME را روی ابزاره واسط کاربر با شناسه منبع "com.google.samples.apps.topeka:id/first_name" انجام می‌دهد:

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

دکمه برگشتن را فشار دهید

جدول زیر مشخصه‌های الزامی را فهرست می‌کند:

مشخصه شرح
eventType نوع کنش Robo script را مشخص می‌کند.
"eventType": "PRESSED_BACK" رویداد KEYCODE_BACK را به دستگاه ارسال می‌کند.
"eventType": "PRESSED_BACK_EMULATOR_28" توسط ضبط‌کننده Robo script در Android Studio برای فشار دادن دکمه برگشت در شبیه‌سازهای API 28 استفاده می‌شود.

در زیر نمونه‌ای از کنش Robo script را می‌بینید که دکمه برگشت را فشار می‌دهد:

{
  "eventType": "PRESSED_BACK"
}

فشار دادن دکمه صفحه اصلی

این کنش رویداد KEYCODE_HOME را به دستگاه ارسال می‌کند.

جدول زیر مشخصه‌های الزامی را فهرست می‌کند:

مشخصه شرح
"eventType": "GO_HOME" --

در زیر نمونه‌ای از کنش Robo script آورده شده است که دکمه صفحه اصلی را فشار می‌دهد:

{
  "eventType": "GO_HOME"
}

پیمایش عنصر برای نمایش داده شدن

این کنش باعث می‌شود آزمایش Robo ابزاره واسط کاربری را که با elementDescriptors مشخص‌شده مطابقت دارد به جلو پیمایش کند تا زمانی که ابزاره واسط کاربری که با childElementDescriptors مشخص‌شده مطابقت دارد روی صفحه نمایش داده شود، یا ابزاره پیمایش‌شده دیگر قابل پیمایش نباشد، یا حداکثر تعداد ۵۰ پیمایش انجام شود.

جدول زیر مشخصه‌های الزامی را فهرست می‌کند:

مشخصه شرح
"eventType": "ELEMENT_SCROLL_INTO_VIEW" --
elementDescriptors ابزارک رابط کاربری پیمایش‌شده را بااستفاده از سلسله‌مراتب رابط کاربری Android شناسایی می‌کند.
childElementDescriptors ابزارک واسط کاربر را برای پیمایش بااستفاده از سلسله‌مراتب واسط کاربر Android شناسایی می‌کند.

در زیر نمونه‌ای از کنش Robo script ارائه شده است که ابزاره واسط کاربر با شناسه منبع "my.app.package:id/scrollable_card_container" را پیمایش می‌کند تا زمانی که ابزاره واسط کاربر با نوشتار "Orange" در صفحه نشان داده شود (یا دیگر پیمایشی قابل انجام نباشد، یا حداکثر تعداد ۵۰ پیمایش انجام شده باشد):

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

کشیدن

جدول زیر مشخصه‌های الزامی را فهرست می‌کند:

مشخصه شرح
"eventType": "VIEW_SWIPED" --
swipeDirection جهت تند کشیدن را مشخص می‌کند:
  • Left
  • Right
  • Up
  • Down
  • Forward - Down یا Right بسته به پیمایش‌پذیری عمودی یا افقی ابزاره واسط کاربر هدف.
  • Backward - Up یا Left بسته به پیمایش‌پذیری عمودی یا افقی ابزاره واسط کاربر هدف.
elementDescriptors ابزارک میانای کاربری هدف را بااستفاده از سلسله‌مراتب میانای کاربری Android شناسایی می‌کند.

در زیر نمونه‌ای از کنش Robo script ارائه شده است که ابزاره میانای کاربری را با شناسه منبع "my.app.package:id/custom_content" تند به‌بالا می‌کشد:

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

نماگرفت گرفتن

جدول زیر مشخصه‌های الزامی را فهرست می‌کند:

مشخصه شرح
"eventType": "TAKE_SCREENSHOT" --
screenshotName نام فایل نماگرفت را مشخص می‌کند.

در زیر نمونه‌ای از کنش Robo script که نماگرفت می‌گیرد آورده شده است:

{
  "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.

در زیر نمونه‌ای از کنش Robo script ارائه شده است که در وسط صفحه ضربه می‌زند:

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

روی نقطه‌ای در عنصر تک‌ضرب بزنید

جدول زیر مشخصه‌های الزامی را فهرست می‌کند:

مشخصه شرح
"eventType": "POINT_TAP_ELEMENT" --
pointTapXPercent مختصات X درصدی در عنصر هدف.
pointTapYPercent مختصات Y درصدی در عنصر هدف.
elementDescriptors ابزاره UI هدف را بااستفاده از سلسله‌مراتب UI Android شناسایی می‌کند.

در زیر نمونه‌ای از کنش Robo script آورده شده است که لغزنده نوار جستجو را به راست حرکت می‌دهد:

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

پایان دادن به خزیدن

این کنش آزمایش Robo را متوقف می‌کند.

جدول زیر مشخصه‌های الزامی را فهرست می‌کند:

مشخصه شرح
"eventType": "TERMINATE_CRAWL" --

در زیر نمونه‌ای از کنش Robo script آورده شده است که آزمایش Robo را متوقف می‌کند:

{
  "eventType": "TERMINATE_CRAWL"
}

انتظار

جدول زیر مشخصه‌های الزامی را فهرست می‌کند:

مشخصه شرح
"eventType": "WAIT" (or "DELAYED_MESSAGE_POSTED") --
delayTime مدت زمان انتظار را به میلی‌ثانیه مشخص می‌کند.

در زیر نمونه‌ای از کنش Robo script که سه ثانیه منتظر می‌ماند آورده شده است:

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

منتظر شدن برای عنصر

این کنش باعث می‌شود آزمایش Robo منتظر بماند تا عنصری روی صفحه ظاهر شود تا زمان‌بندی مشخص‌شده تمام شود.

جدول زیر مشخصه‌های الزامی را فهرست می‌کند:

مشخصه شرح
"eventType": "WAIT_FOR_ELEMENT" --
delayTime زمان انتظار را به میلی‌ثانیه مشخص می‌کند.
elementDescriptors ابزارک واسط کاربر منتظر را بااستفاده از سلسله‌مراتب واسط کاربر Android شناسایی می‌کند.

در زیر نمونه‌ای از کنش دستورگان Robo را می‌بینید که حداکثر ۳۰ ثانیه منتظر می‌ماند تا ابزاره واسط کاربر با شناسه منبع "my.app.package:id/confirmation_button" روی صفحه ظاهر شود:

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

مراحل بعدی