Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

راهنمای مرجع اسکریپت های Robo

با مجموعه‌ها، منظم بمانید ذخیره و دسته‌بندی محتوا براساس اولویت‌های شما.

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

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

  • از قابلیت ضبط اسکریپت Robo استفاده کنید.
  • اسکریپت Robo را به صورت دستی ایجاد کنید.
  • اسکریپت Robo را ضبط کنید و سپس آن را به صورت دستی ویرایش کنید.

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

اسکریپت Robo برای تست Robo در کنار ورودی های دیگر مانند بسته برنامه تحت آزمایش اندروید (APK) ارائه می شود.

نمونه زیر نمونه ای از اسکریپت 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 به صورت بسته ای از یک یا چند جفت ویژگی-مقدار نمایش داده می شود که در جدول زیر توضیح داده شده است:

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

در زیر نمونه‌ای از یک اسکریپت Robo با دو عملکرد بدون ابزارک‌های رابط کاربری هدف است، به این معنی که این اقدامات روی یک ویجت رابط کاربری خاص عمل نمی‌کنند:

[
  {
    "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 یا adapterViewChildPosition بسته به نوع ویجت والد، موقعیت فرزند ویجت UI را نشان می دهد.

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

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

در زیر نمونه‌ای از اسکریپت Robo با اعمال تغییر متن و کلیک وجود دارد که هر دوی آنها از شما می‌خواهند ویجت 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 از گزینه های اجرای مورد نظر شروع می شود.

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

  • executionMode - گزینه های اجرا در هنگام اجرا شدن اسکریپت Robo اعمال می شود:
    • strict - اگر روی true تنظیم شود، اسکریپت Robo از تطابق جزئی، پرش از عملکرد فعلی و تعلیق استفاده نمی کند. یعنی اسکریپت Robo به عنوان یک تست ابزار دقیق اجرا می شود و به محض اینکه هیچ یک از اقدامات آن قابل انجام نباشد شکست می خورد.
  • postscript - گزینه‌های اجرا پس از تکمیل اسکریپت Robo اعمال می‌شوند:
    • terminate - اگر روی true تنظیم شود، تست Robo خزیدن پس از تکمیل اسکریپت Robo متوقف می شود.

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

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

پارامترهای قالب

یک پارامتر الگو یک مکان نگهدار در یک اسکریپت Robo است که وقتی تست 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 را نتوان به طور کامل مطابقت داد، معیارهای تطبیق کاهش می‌یابند و تطابق دوباره امتحان می‌شود. تطبیق جزئی، بیرونی ترین عنصر را در حین تطبیق ویجت UI هدف یک اقدام اسکریپت Robo در نظر نمی گیرد.

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

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

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

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

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

پشتیبانی RecyclerView و AdapterView

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

بنابراین، اسکریپت Robo موقعیت‌های داده مطلق کودکان RecyclerView را که هدف اقدامات اسکریپت Robo هستند، به‌عنوان 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 را در اندروید استودیو ضبط کنید و آن را در Test Lab اجرا کنید

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

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

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

اقدامات اسکریپت Robo

ویژگی اختیاری مشترک زیر برای همه اقدامات اعمال می شود:

  • description - به ردیابی اجرای این عمل اسکریپت Robo در خروجی های تست Robo کمک می کند.

ادعا

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

جدول زیر ویژگی های مورد نیاز را فهرست می کند:

صفت شرح
"eventType": "ASSERTION" --
contextDescriptor زمینه یا شرایط ادعا شده را توصیف می کند.

توصیف کننده زمینه

یک توصیف کننده زمینه، زمینه/شرط را با استفاده از یکی یا ترکیبی از ویژگی های زیر تعریف می کند:

صفت شرح
"condition": "element_present" بررسی می کند که یک ویجت رابط کاربری که با elementDescriptors یا متن مشخص شده توسط visionText دارد، روی صفحه وجود دارد.
"condition": "element_disabled" بررسی می کند که ویجت UI که با elementDescriptors مطابقت دارد روی صفحه وجود دارد و نمی توان با آن تعامل داشت.
"condition": "app_under_test_shown" بررسی می کند که برنامه تحت آزمایش در پیش زمینه اجرا می شود.
"condition": "default_launcher_shown" بررسی می کند که صفحه اصلی دستگاه نشان داده شود، به این معنی که هیچ برنامه ای در پیش زمینه اجرا نمی شود.
"condition": "non_roboscript_action_performed" بررسی می‌کند که آخرین اقدامی که توسط تست Robo انجام شده، یک عمل اسکریپت Robo نباشد.
negateCondition اگر روی true تنظیم شود، condition را نفی می کند. برای مثال، می‌توانید از این ویژگی برای بررسی اینکه آیا ویجت رابط کاربری روی صفحه وجود ندارد یا اینکه برنامه تحت آزمایش در پیش‌زمینه اجرا نمی‌شود، استفاده کنید.
elementDescriptors یک یا چند توصیفگر عنصر که ویجت رابط کاربری را روی صفحه شناسایی می کند. در ترکیب با شرایط element_present و element_disabled استفاده می شود. انحصاری متقابل با visionText . برای اطلاعات بیشتر، به توصیفگرهای عنصر مراجعه کنید.
visionText متن روی صفحه با استفاده از API تشخیص کاراکتر نوری (OCR) شناسایی می‌شود. visionText در ترکیب با شرط element_present استفاده می شود. متقابل با elementDescriptors .

در زیر نمونه‌ای از ادعای اسکریپت Robo است که بررسی می‌کند که app-under-test در پیش‌زمینه است:

{
  "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,
    "elementDescriptors": [
      {
        "visionText": "Settings"
      }
    ]
  }
}

کلیک

جدول زیر ویژگی های مورد نیاز را فهرست می کند:

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

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

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

در زیر نمونه‌ای از عملکرد اسکریپت Robo است که روی "Privacy Policy" که روی صفحه با استفاده از OCR شناسایی شده کلیک می‌کند:

{
  "eventType": "VIEW_CLICKED",
  "elementDescriptors": [
    {
      "visionText": "Privacy Policy"
    }
  ]
}

در زیر نمونه‌ای از عملکرد اسکریپت Robo است که روی یک عنصر صفحه‌کلید نرم با توضیح محتوا "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 shell را اجرا کنید

جدول زیر ویژگی های مورد نیاز را فهرست می کند:

صفت شرح
"eventType": "ADB_SHELL_COMMAND" --
command دستور پوسته Android Debug Bridge (adb) برای اجرا.

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

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

مجوزها را اعطا کنید

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

جدول زیر ویژگی های مورد نیاز را فهرست می کند:

صفت شرح
"eventType": "PERMISSIONS_REQUEST" --

متن ورودی

جدول زیر ویژگی های مورد نیاز را فهرست می کند:

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

در زیر نمونه‌ای از عملکرد اسکریپت 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 ویجت UI مورد نظر را با استفاده از سلسله مراتب Android UI شناسایی می کند.

ویژگی زیر اختیاری است:

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

در زیر نمونه‌ای از عملکرد اسکریپت Robo است که پنج ثانیه کلیک روی یک ویجت رابط کاربری با توضیحات محتوا "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 است که تند کشیدن به پایین را انجام می‌دهد:

{
  "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) برای ویجت UI هدف مشخص شده فشار می دهد.

جدول زیر ویژگی های مورد نیاز را فهرست می کند:

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

در زیر نمونه‌ای از عملکرد اسکریپت 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 در اندروید استودیو برای فشار دادن مجدد شبیه سازهای API 28 استفاده می شود.

در زیر نمونه ای از یک عمل اسکریپت Robo است که به عقب فشار می دهد:

{
  "eventType": "PRESSED_BACK"
}

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

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

جدول زیر ویژگی های مورد نیاز را فهرست می کند:

صفت شرح
"eventType": "GO_HOME" --

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

{
  "eventType": "GO_HOME"
}

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

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

جدول زیر ویژگی های مورد نیاز را فهرست می کند:

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

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

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

انگشت خود را بکشید

جدول زیر ویژگی های مورد نیاز را فهرست می کند:

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

در زیر نمونه‌ای از عملکرد اسکریپت 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 ویجت UI مورد نظر را با استفاده از سلسله مراتب Android UI شناسایی می کند.

در زیر نمونه‌ای از اکشن اسکریپت 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": "DELAYED_MESSAGE_POSTED" --
delayTime مدت زمان انتظار را در میلی ثانیه مشخص می کند.

در زیر نمونه ای از یک عمل اسکریپت Robo است که به مدت سه ثانیه منتظر می ماند:

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

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

این عمل باعث می شود تا تست Robo منتظر بماند تا عنصری تا زمان تعیین شده روی صفحه ظاهر شود.

جدول زیر ویژگی های مورد نیاز را فهرست می کند:

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

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

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

مراحل بعدی