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

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

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

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

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

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

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

مقدمه

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

در زیر نمونه‌ای از یک دستورگان 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"
      }
    ]
  }
]

پشتیبانی iOS+ از دستورگان‌های Robo

‫Robo ویژه iOS+ (نسخه بتا) از دستورگان Robo پشتیبانی محدودی دارد. نحو دستورگان Robo برای iOS+ با نحو Android یکسان است و ویژگی‌های iOS+ پشتیبانی‌شده مشابه همتایان Android خود عمل می‌کنند.

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

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

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

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

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

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

ساختار

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

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

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

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

[
  {
    "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" همیشه یک دستورگان روبو را راه‌اندازی می‌کند.
"condition": "element_present" بررسی می‌کند که ابزاره واسط کاربری که با elementDescriptors یا نوشتار مشخص‌شده توسط visionText مطابقت دارد در صفحه وجود داشته باشد.
"condition": "element_disabled" بررسی می‌کند که ابزاره واسط کاربر منطبق با elementDescriptors در صفحه وجود داشته باشد و نتوان با آن تعامل داشت.
"condition": "element_checked" بررسی می‌کند که ابزاره واسط کاربری مطابق با elementDescriptors در صفحه‌نمایش وجود داشته باشد و علامت‌گذاری شده باشد.
"condition": "app_under_test_shown" بررسی می‌کند که برنامه تحت آزمایش در پیش‌زمینه اجرا می‌شود.
"condition": "default_launcher_shown" بررسی می‌کند که صفحه اصلی دستگاه نشان داده شود، که یعنی هیچ برنامه‌ای در پیش‌زمینه اجرا نمی‌شود.
"condition": "non_roboscript_action_performed" بررسی می‌کند که آخرین nonRoboscriptActionCount کنش متوالی انجام‌شده توسط «آزمایش روبو» کنش‌های «دستورگان روبو» نباشد.
negateCondition اگر روی true تنظیم شود، condition را نفی می‌کند. برای مثال، می‌توانید از این مشخصه برای بررسی اینکه آیا ابزارک واسط کاربر در صفحه‌نمایش وجود ندارد یا اینکه برنامه تحت آزمایش در پیش‌زمینه اجرا نمی‌شود استفاده کنید.
elementDescriptors یک یا چند توصیفگر عنصر که ابزاره واسط کاربر را در صفحه شناسایی می‌کند. این ویژگی در ترکیب با شرایط element_present، element_disabled، و element_checked استفاده می‌شود. با visionText متقابلاً انحصاری است. برای اطلاعات بیشتر، توصیف‌گرهای عنصر را ببینید.
visionText نوشتار روی صفحه بااستفاده از «میانای برنامه‌سازی کاربردی تشخیص نویسه نوری» (OCR) شناسایی می‌شود. ‫visionText در ترکیب با شرط element_present استفاده می‌شود. با elementDescriptors متقابلاً انحصاری است.
nonRoboscriptActionCount تعداد کنش‌های دستورگان غیر«روبو» متوالی که قبلاً انجام شده است. این گزینه در ترکیب با شرط non_roboscript_action_performed برای راه‌اندازی دستورگان Robo پس‌از هر nonRoboscriptActionCount کنش 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 آورده شده است که توسط "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 عبارت باقاعده جاوا برای مطابقت با resourceId.
contentDescription –
contentDescriptionRegex عبارت باقاعده جاوا برای مطابقت با contentDescription.
‫text (که روی صفحه ظاهر می‌شود) –
textRegex عبارت باقاعده جاوا برای مطابقت با text.
‫groupViewChildPosition، recyclerViewChildPosition، یا adapterViewChildPosition موقعیت فرزند ابزاره واسط کاربر را بسته به نوع ابزاره والد آن نشان می‌دهد.

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

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

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

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

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

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

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

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

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

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

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

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

نظرات

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

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

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

قابلیت‌ها

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

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

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

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

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

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

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

اولویت‌ها

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

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

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

[
  {
    "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" زیرا در میان دستورگان‌های روبو کاربردی باقی‌مانده با اولویت یکسان، زودتر ظاهر می‌شود.
  3. ‫"Robo script 3" به‌عنوان آخرین دستورگان Robo قابل‌اعمال.

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

به‌طور پیش‌فرض، 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 مدت زمان روبو اسکریپت نباید از ۱۵ ثانیه بیشتر باشد، درغیراین‌صورت خزنده ممکن است در زمان اتمام کار متوقف شود.
crawl مرحله خزیدن اصلی، زمانی که Robo برنامه تحت آزمایش را می‌خزد.
close_screen وقتی Robo سعی می‌کند از صفحه‌نمایش داده‌شده به عقب برگردد (ردیابی معکوس کند)، وقتی همه کنش‌های ممکن در این صفحه کاوش شده باشد. به‌طور پیش‌فرض، Robo دکمه بازگشت را فشار می‌دهد که در برخی‌از سناریوها نامطلوب است.

اگر مشخصه crawlStage یک دستورگان Robo مشخص نشده باشد، به‌طور ضمنی 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 می‌تواند شامل کنش‌های شرطی باشد. کنش‌های شرطی سه مشخصه اضافی دارند که نحوه انجام آن‌ها توسط Robo را توصیف می‌کنند:

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

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

در زیر نمونه‌ای از یک «دستورگان 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
    }
}

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

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

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

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

در زیر نمونه‌ای از فایلی با دو دستورگان Robo آورده شده است. اولین 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 موقعیت‌های داده مطلق فرزندان RecyclerView را که هدف کنش‌های دستورگان Robo هستند به‌صورت recyclerViewChildPosition ضبط می‌کند. دستورگان Robo همچنین موقعیت‌های داده مطلق عناصر فرزند AdapterView را که هدف کنش‌های دستورگان Robo هستند به‌صورت adapterViewChildPosition ضبط می‌کند.

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

  1. آزمایش روبو تضمین می‌کند که کودک مربوطه ازطریق کنش جای‌گذاری در RecyclerView یا AdapterView حاوی آن در صفحه نمایش داده شود.

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

در زیر نمونه‌ای از کنش کلیک روی فرزند AdapterView (android.widget.GridView) آمده است:

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

در زیر نمونه‌ای از کنش کلیک روی عنصر فرزند RecyclerView (android.support.v7.widget.RecyclerView) آمده است:

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

ضبط کردن نوشتار Robo در «استودیو Android» و اجرای آن در Test Lab

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

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

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

کنش‌های دستورگان Robo

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

  • ‫description - به پیگیری اجرای این کنش «متن Robo» در بروندادهای Robo test کمک می‌کند.

ادعا

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

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

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

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

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

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

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

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

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

کلیک

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

مشخصه شرح
eventType نوع کنش دستورگان Robo را مشخص می‌کند.
"eventType": "VIEW_CLICKED" روی عنصر هدف برنامه درحال آزمایش کلیک می‌کند.
"eventType": "SOFT_KEYBOARD_CLICK" روی عنصر هدف صفحه‌کلید نرم کلیک می‌کند.
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK" تا maxNumberOfRuns بار روی عناصر تصادفی صفحه‌کلید مجازی کلیک می‌کند.
"eventType": "LIST_ITEM_CLICKED" مورد استفاده ضبط‌کننده دستورگان Robo در «استودیو Android» برای کلیک کردن روی موارد فهرست.
elementDescriptors عنصر واسط کاربر کلیک‌شده را بااستفاده از سلسله‌مراتب واسط کاربر Android شناسایی می‌کند. با 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"
    }
  ]
}

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

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

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

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

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

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

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

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

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

در زیر نمونه‌ای از کنش «دستورگان Robo» ارائه شده است که صفحه‌کلید نرم‌افزاری را غیرفعال می‌کند:

{
  "eventType": "DISABLE_KEYBOARD"
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{
  "eventType": "ALL_ELEMENTS_IGNORED"
}

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

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

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

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

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

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

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

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

نوشتار ورودی

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

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

در زیر نمونه‌ای از کنش دستورگان Robo ارائه شده است که "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 اولین عنصر منطبق را انتخاب می‌کند، اگر 1 باشد، کنش دستورگان Robo دومین عنصر منطبق را انتخاب می‌کند، و به همین ترتیب. ترتیب از چپ به راست و از بالا به پایین تعیین می‌شود. مقدار پیش‌فرض 0 است (اولین مورد منطبق انتخاب می‌شود).

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

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

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

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

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

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

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

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

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

در زیر نمونه‌ای از کنش اشاره یک‌نقطه‌ای «دستورگان روبو» ارائه شده است که تند کشیدن به‌پایین را انجام می‌دهد:

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

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

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

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

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

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

اجرای کنش IME

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

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

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

در زیر نمونه‌ای از کنش دستورگان Robo آورده شده است که کنش 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 را مشخص می‌کند.
"eventType": "PRESSED_BACK" رویداد KEYCODE_BACK را به دستگاه ارسال می‌کند.
"eventType": "PRESSED_BACK_EMULATOR_28" «ضبط‌کننده دستورگان Robo» در «استودیو Android» برای فشار دادن دکمه بازگشت در شبیه‌سازهای API 28 استفاده می‌شود.

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

{
  "eventType": "PRESSED_BACK"
}

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

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

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

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

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

{
  "eventType": "GO_HOME"
}

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

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

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

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

در زیر نمونه‌ای از کنش «دستورگان Robo» نشان داده شده است که عنصر واسط کاربر با شناسه منبع "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 را می‌بینید که ابزارک میانای کاربری را با شناسه منبع "my.app.package:id/custom_content" تند به بالا می‌کشد:

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

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

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

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

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

{
  "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» ارائه شده است که در وسط صفحه تک‌ضرب می‌زند:

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

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

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

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

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

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

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

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

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

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

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

{
  "eventType": "TERMINATE_CRAWL"
}

انتظار

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

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

در زیر نمونه‌ای از کنش «دستورگان روبو» آورده شده است که سه ثانیه منتظر می‌ماند:

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

منتظر عنصر شدن

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

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

مشخصه شرح
"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"
    }
  ]
}

مراحل بعدی