Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

الدليل المرجعي لنصوص Robo النصية

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

يوفر هذا المستند معلومات مرجعية حول نصوص Robo النصية بما في ذلك البنية والإمكانيات والاستخدام والتسجيل والإجراءات. نصوص Robo عبارة عن اختبارات تعمل على أتمتة مهام ضمان الجودة اليدوية (QA) لتطبيقات الأجهزة المحمولة ، وتمكين التكامل المستمر (CI) واستراتيجيات اختبار التشغيل المسبق. نص Robo النصي هو ملف JSON يصف سلسلة من واجهة المستخدم (UI) وإجراءات أخرى.

يمكنك إنشاء نص Robo النصي بالطرق التالية:

  • استخدم ميزة تسجيل نص Robo.
  • قم بإنشاء نص Robo يدويًا.
  • قم بتسجيل نص Robo النصي ثم قم بتحريره يدويًا.

لمعرفة المزيد حول استخدام نصوص Robo النصية ، راجع تشغيل نص Robo النصي .

يتم توفير برنامج Robo النصي لاختبار Robo جنبًا إلى جنب مع مدخلات أخرى مثل حزمة تطبيق Android قيد الاختبار (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 الواصفات التي تحدد أداة واجهة المستخدم. مطلوب لجميع الإجراءات التي تحتوي على أداة واجهة مستخدم مستهدفة ، مثل النقر فوق زر معين.
optional إذا تم التعيين على true ، يتم تخطي هذا الإجراء عندما يتعذر تنفيذه. على سبيل المثال ، يتم تخطي هذا الإجراء عندما يتعذر عليه العثور على أداة واجهة المستخدم المستهدفة على الشاشة - دون الإخفاق في نص Robo النصي المحتوي. بشكل افتراضي ، القيمة false .
replacementText النص المطلوب إدخاله في أداة واجهة المستخدم المستهدفة. مطلوب لإجراءات تحرير النص.
swipeDirection يحدد اتجاه السحب. مطلوب لإجراءات التمرير.
delayTime يحدد مدة الانتظار بالمللي ثانية. مطلوب لإجراءات الانتظار.
pointTapXCoordinate و pointTapYCoordinate إحداثيات البكسل X و Y للنقطة التي يتم النقر عليها. حصري متبادل مع pointTapXPercent و pointTapYPercent . مطلوب لإجراءات النقر على النقاط.
pointTapXPercent و pointTapYPercent النسبة المئوية للإحداثيات X و Y للنقطة المستغلة. حصري متبادل مع pointTapXCoordinate و pointTapYCoordinate . مطلوب لإجراءات النقر على النقاط.

فيما يلي مثال على نص برمجي Robo يتضمن إجراءين بدون أدوات واجهة مستخدم مستهدفة ، مما يعني أن هذه الإجراءات لا تعمل على أداة واجهة مستخدم معينة:

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

واصفات العنصر

يحدد واصف العنصر أداة واجهة المستخدم باستخدام واحدة أو أكثر من سمات التعريف التالية:

ينسب وصف
className -
ancestorClassName اسم فئة سلف التدرج الهرمي لواجهة المستخدم للعنصر. الأصل هو أي من العقد الأصلية في التسلسل الهرمي لواجهة المستخدم للعنصر ، بما في ذلك العنصر نفسه.
resourceId -
resourceIdRegex تعبير Java العادي لمطابقة resourceId .
contentDescription -
contentDescriptionRegex تعبير Java العادي لمطابقة 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:
  • 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 الحالي بشكل كامل ، فسيتم تخفيف معايير المطابقة وإعادة محاولة المطابقة. لا تأخذ المطابقة الجزئية في الاعتبار واصف العنصر الخارجي أثناء مطابقة عنصر واجهة المستخدم الهدف لإجراء نص Robo النصي.

إذا نجحت المطابقة الجزئية ، فسيتم تنفيذ إجراء نص Robo المقابل كالمعتاد. تدعم هذه التقنية السيناريوهات التي تتغير فيها بنية التطبيق ، على سبيل المثال ، بين إصدارات التطبيق ، عند إعادة ترتيب عناصر الشاشة.

تخطي الإجراء الحالي إذا تعذر مطابقة إجراء نص 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 النصي أيضًا مواضع البيانات المطلقة لأطفال AdaptorView الأطفال الذين يمثلون أهدافًا لإجراءات نص Robo مثل adapterViewChildPosition .

يتم تنفيذ الإجراءات على الأطفال RecyclerView و AdapterView في الخطوات التالية:

  1. يضمن اختبار Robo عرض الطفل المقابل على الشاشة من خلال إجراء تحديد الموضع على RecyclerView أو AdaptorView المحتوي عليه.

  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 النصي في Android Studio وتشغيله في 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 النصي بسبب فشل التأكيد ، وتكون نتيجة الاختبار FAILED.

يسرد الجدول التالي السمات المطلوبة:

ينسب وصف
"eventType": "ASSERTION" -
contextDescriptor يصف السياق أو الشرط المؤكد.

واصف السياق

يحدد واصف السياق السياق / الشرط باستخدام واحد أو مجموعة من السمات التالية:

ينسب وصف
"condition": "element_present" يتحقق من وجود عنصر واجهة مستخدم UI يتطابق مع elementDescriptors أو النص المحدد بواسطة visionText على الشاشة.
"condition": "app_under_test_shown" للتحقق من تشغيل التطبيق قيد الاختبار في المقدمة.
"condition": "default_launcher_shown" للتحقق من ظهور الشاشة الرئيسية للجهاز ، مما يعني أنه لا توجد تطبيقات قيد التشغيل في المقدمة.
"condition": "non_roboscript_action_performed" للتحقق من أن الإجراء الأخير الذي تم تنفيذه بواسطة اختبار Robo ليس إجراء نصي Robo.
negateCondition إذا تم التعيين على true ، فإن هذا يلغي condition . على سبيل المثال ، يمكنك استخدام هذه السمة للتحقق مما إذا كانت أداة واجهة المستخدم غير موجودة على الشاشة ، أو أن التطبيق قيد الاختبار لا يعمل في المقدمة.
elementDescriptors واحد أو أكثر من واصفات العناصر التي تحدد أداة واجهة المستخدم على الشاشة. يتم استخدامه مع شرط element_present . حصري مع visionText . لمزيد من المعلومات ، راجع واصفات العناصر .
visionText يتم الكشف عن النص على الشاشة باستخدام واجهة برمجة تطبيقات التعرف الضوئي على الحروف (OCR). يتم استخدام element_present visionText حصري مع elementDescriptors .

فيما يلي مثال لتأكيد نص 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,
    "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 يحدد أداة واجهة المستخدم التي تم النقر عليها باستخدام التسلسل الهرمي لواجهة مستخدم Android. حصري مع visionText .
visionText يحدد العنصر الذي تم النقر عليه باستخدام التعرف الضوئي على الحروف. حصري مع elementDescriptors .
maxNumberOfRuns يحدد عدد مرات النقر فوق عنصر عشوائي في لوحة المفاتيح المرنة ، عندما يكون eventType هو SOFT_KEYBOARD_RANDOM_CLICK . القيمة الافتراضية هي 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 أمر shell Android Debug Bridge (adb) المراد تنفيذه.

فيما يلي مثال على إجراء نص برمجي Robo يمسح بيانات مستخدم التطبيق قيد الاختبار:

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

منح الأذونات

يتم تسجيل هذا الإجراء بواسطة مسجل البرامج النصية Robo في Android Studio للتوافق مع الإصدارات السابقة مع Espresso Test Recorder . يمنح اختبار Robo جميع الأذونات للتطبيق قيد الاختبار في بداية كل عملية زحف ، وبالتالي ، يعد هذا الإجراء غير متاح. لا تستخدم هذا الإجراء في نصوص Robo النصية الخاصة بك.

يسرد الجدول التالي السمات المطلوبة:

ينسب وصف
"eventType": "PERMISSIONS_REQUEST" -

أدخل نصآ

يسرد الجدول التالي السمات المطلوبة:

ينسب وصف
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.

السمة التالية اختيارية:

  • 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) لعنصر واجهة المستخدم المستهدف المحدد.

يسرد الجدول التالي السمات المطلوبة:

ينسب وصف
"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 Studio للضغط مرة أخرى على برامج محاكاة API 28.

فيما يلي مثال على إجراء نصي Robo يقوم بالضغط على الخلف:

{
  "eventType": "PRESSED_BACK"
}

اضغط على الصفحة الرئيسية

هذا التصرف يرسل حدث KEYCODE_HOME للجهاز.

يسرد الجدول التالي السمات المطلوبة:

ينسب وصف
"eventType": "GO_HOME" -

فيما يلي مثال على إجراء نصي Robo يضغط على الصفحة الرئيسية:

{
  "eventType": "GO_HOME"
}

تمرير عنصر في العرض

يؤدي هذا الإجراء إلى قيام اختبار Robo بالتمرير إلى الأمام لعنصر واجهة المستخدم الذي يتطابق مع العنصر المحدد elementDescriptors حتى تظهر أداة واجهة المستخدم التي تتطابق مع childElementDescriptors المحدد على الشاشة ، أو لم يعد من الممكن تمرير عنصر واجهة المستخدم الذي تم تمريره ، أو الوصول إلى الحد الأقصى لعدد التمرير وهو 50 تمريرًا.

يسرد الجدول التالي السمات المطلوبة:

ينسب وصف
"eventType": "ELEMENT_SCROLL_INTO_VIEW" -
elementDescriptors يحدد أداة واجهة المستخدم التي تم تمريرها باستخدام التسلسل الهرمي لواجهة مستخدم Android.
childElementDescriptors يحدد أداة واجهة المستخدم للتمرير لاستخدام التسلسل الهرمي لواجهة مستخدم Android.

فيما يلي مثال على إجراء نص برمجي Robo يقوم بتمرير أداة واجهة المستخدم باستخدام معرّف المورد "my.app.package:id/scrollable_card_container" حتى تظهر أداة واجهة المستخدم مع النص "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 بناءً على إمكانية التمرير الرأسي أو الأفقي لعنصر واجهة المستخدم المستهدف.
  • 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 النسبة المئوية للإحداثيات س للنقطة التي تم استغلالها. حصري متبادل مع pointTapXCoordinate و pointTapYCoordinate .
pointTapYPercent النسبة المئوية للإحداثيات Y للنقطة المستغلة. حصري متبادل مع pointTapXCoordinate و pointTapYCoordinate .

فيما يلي مثال على إجراء نصي Robo ينقر في منتصف الشاشة:

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

اضغط على نقطة داخل عنصر

يسرد الجدول التالي السمات المطلوبة:

ينسب وصف
"eventType": "POINT_TAP_ELEMENT" -
pointTapXPercent النسبة المئوية للتنسيق س داخل العنصر الهدف.
pointTapYPercent النسبة المئوية للتنسيق ص داخل العنصر الهدف.
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": "DELAYED_MESSAGE_POSTED" -
delayTime يحدد مدة الانتظار بالمللي ثانية.

فيما يلي مثال على إجراء نصي Robo ينتظر لمدة ثلاث ثوانٍ:

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

انتظر عنصر

يجعل هذا الإجراء اختبار Robo ينتظر ظهور عنصر على الشاشة حتى المهلة المحددة.

يسرد الجدول التالي السمات المطلوبة:

ينسب وصف
"eventType": "WAIT_FOR_ELEMENT" -
delayTime تحدد مهلة الانتظار بالمللي ثانية.
elementDescriptors يحدد أداة واجهة المستخدم التي تم انتظارها باستخدام التسلسل الهرمي لواجهة مستخدم Android.

ما يلي هو مثال على إجراء نصي Robo الذي ينتظر لمدة تصل إلى 30 ثانية حتى تظهر أداة واجهة المستخدم مع معرف المورد "my.app.package:id/confirmation_button" على الشاشة:

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

الخطوات التالية