يقدّم هذا المستند معلومات مرجعية حول نصوص Robo البرمجية، بما في ذلك البنية والإمكانات والاستخدام والتسجيل والإجراءات. نصوص Robo البرمجية الاختبارات التي تعمل على أتمتة مهام ضمان الجودة (QA) لتطبيقات الأجهزة المحمولة، لتفعيل استراتيجيات التكامل المستمر (CI) واستراتيجيات اختبار الإطلاق التجريبي روبو النص البرمجي هو ملف JSON يصف تسلسلاً من واجهة المستخدم (UI) إجراءات أخرى.
يمكنك إنشاء نص Robo برمجي بالطرق التالية:
استخدِم ميزة تسجيل نص Robo البرمجي. (نظام التشغيل Android فقط)
إنشاء نص Robo البرمجي يدويًا (Android وiOS والإصدارات الأحدث)
سجِّل نص Robo البرمجي ثم عدِّله يدويًا. (نظام التشغيل Android فقط)
لمزيد من المعلومات عن استخدام نصوص Robo البرمجية، يُرجى الاطّلاع على المقالة Run a Robo. البرنامج النصي.
مقدمة
يتم توفير نص Robo البرمجي لاختبار Robo إلى جانب إدخالات أخرى مثل اختبار تطبيق Android (APK)
في ما يلي مثال على نص 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 البرمجي على عدة سمات تصف طريقة تنفيذ 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 باستخدام سمة واحدة أو مجموعة من السمات المتعددة:
السمة | الوصف |
---|---|
"condition": "always"
|
تؤدي هذه السياسة دائمًا إلى تشغيل نص Robo برمجي. |
"condition": "element_present"
|
يتحقّق من مطابقة تطبيق واجهة المستخدم المصغّر مع elementDescriptors أو
النص الذي تم تحديده من خلال visionText يظهر على الشاشة.
|
"condition": "element_disabled"
|
يتحقّق من أنّ تطبيق واجهة المستخدم المصغّر الذي يتطابق مع "elementDescriptors "
الآن على الشاشة ولا يمكن التفاعل معها.
|
"condition": "element_checked"
|
يتحقّق من أنّ تطبيق واجهة المستخدم المصغّر الذي يتطابق مع "elementDescriptors "
الحالي على الشاشة ويتم تحديده.
|
"condition": "app_under_test_shown"
|
للتحقّق من تشغيل التطبيق تحت الاختبار في المقدّمة. |
"condition": "default_launcher_shown"
|
يتحقّق من عرض الشاشة الرئيسية للجهاز، ما يعني عدم توفّر تطبيقات. قيد التشغيل في المقدّمة. |
"condition": "non_roboscript_action_performed"
|
يتحقّق من أنّ آخر nonRoboscriptActionCount عنصرًا متتاليًا
إنّ الإجراءات التي يتم تنفيذها من خلال اختبار Robo ليست إجراءات نص Robo برمجي.
|
negateCondition
|
وفي حال ضبطها على true ، سيتم إلغاء condition . بالنسبة
على سبيل المثال، يمكنك استخدام هذه السمة للتحقق مما إذا كانت أداة واجهة المستخدم ليست
الموجودة على الشاشة، أو أن التطبيق قيد الاختبار لا يعمل في
المقدّمة.
|
elementDescriptors
|
أداة وصف عنصر واحد أو أكثر تحدد أداة واجهة المستخدم على الشاشة.
ويتم استخدامها مع element_present ،
element_disabled وelement_checked
الظروف. يمكن استخدامهما حصريًا مع "visionText ". لمزيد من المعلومات،
المعلومات، راجِع واصفات العناصر.
|
visionText
|
يتم رصد النص على الشاشة باستخدام ميزة "التعرّف البصري على الأحرف"
(OCR) واجهة برمجة التطبيقات. يتم استخدام السمة visionText مع السمة
شرط element_present . الأحداث المتنافية مع
elementDescriptors
|
nonRoboscriptActionCount
|
عدد الإجراءات المتتالية المتعلّقة بالنص البرمجي غير Robo التي تم تنفيذها سابقًا. من المهم
يتم استخدامها مع 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 البرمجي الذي ينتظر 5 ثوانٍ بعد كل إجراء Robo غير نصي:
{
"contextDescriptor": {
"condition": "non_roboscript_action_performed"
},
"maxNumberOfRuns" : 1000,
"actions" : [
{
"eventType" : "DELAYED_MESSAGE_POSTED",
"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": "DELAYED_MESSAGE_POSTED",
"delayTime": 3000
},
{
"eventType": "PRESSED_BACK"
}
]
أدوات وصف العناصر
يحدد واصف العناصر تطبيق واجهة المستخدم المصغّر باستخدام واحد أو أكثر من السمات التعريفية التالية:
السمة | الوصف |
className
|
– |
ancestorClassName
|
اسم فئة الأصل الهرمي لواجهة المستخدم للعنصر. الأصل هو أي في العُقد الرئيسية في التدرج الهرمي لواجهة مستخدم العنصر، بما في ذلك العنصر نفسها. |
resourceId
|
– |
resourceIdRegex
|
تعبير Java عادي لمطابقة resourceId
|
contentDescription
|
– |
contentDescriptionRegex
|
تعبير Java عادي لمطابقة contentDescription
|
text (التي تظهر على الشاشة)
|
– |
textRegex
|
تعبير Java عادي لمطابقة text
|
groupViewChildPosition ,
recyclerViewChildPosition ، أو
adapterViewChildPosition
|
يمثل هذا الحقل الموضع الثانوي لتطبيق واجهة مستخدم، بناءً على نوع التطبيق المصغّر الرئيسي. |
وغالبًا ما تكون هذه السمات غير محددة، على سبيل المثال، قد لا يكون أحد الأزرار
تحتوي على نص ووصف للمحتوى. حتى في حالة وجود بعض قيم السمات،
وقد لا تكون فريدة على شاشة تطبيق معيّنة (بما في ذلك resourceId
).
على سبيل المثال، يمكن عادةً التفريق بين عناصر القائمة فقط
باستخدام مواضعهم الفرعية المختلفة ضمن التطبيق المصغَّر الرئيسي. يعني ذلك
أن استخدام واصف عنصر واحد فقط لتحديد أداة واجهة المستخدم
غير كافية. وبالتالي، تحتوي سمة elementDescriptors
للإجراء على
تسلسل أدوات وصف العناصر التي يتم ترتيبها بطريقة تجعل أول وصف
مع أداة واجهة المستخدم المستهدفة، يتجاوب التطبيق الثاني مع الهدف
والأداة الرئيسية لأداة واجهة المستخدم، وما إلى ذلك. تمت مطابقة أداة واجهة المستخدم المستهدفة للإجراء
عندما تتطابق جميع واصفات عناصره مع أداة واجهة المستخدم المقابلة
تسلسلاً هرميًا فرعيًا.
في ما يلي مثال على نص Robo برمجي مع تغيير النص والنقر عليه الإجراءات، وكلاهما يتطلب منك تحديد أداة واجهة المستخدم المستهدفة باستخدام واصفات العناصر المتوفرة:
[
{
"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
، لا يظهر نص Robo البرمجي على الشاشة. في بداية ونهاية التنفيذ. بشكل افتراضي،true
.
postscript
: خيارات التنفيذ المطبَّقة بعد اكتمال نص Robo البرمجي:terminate
: في حال ضبط السياسة علىtrue
، يتوقف اختبار Robo عن الزحف بعد Robo. يتم إكمال النص البرمجي. وهيfalse
تلقائيًا.
في ما يلي مثال على نص Robo برمجي تم تنفيذه في الوضع strict
بدون
الإشعارات التي تظهر على الشاشة لفترة ثلاث ثوانٍ، وبعدها ينتقل الزحف
المحطات:
"roboscript": {
"executionMode": {
"strict": true,
"notify": false
},
"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 برمجي إلى maxNumberOfRuns
، لا يمكن تشغيله بعد ذلك
في عملية زحف معينة. في حال كان من الممكن تشغيل أكثر من نص Robo برمجي واحد من خلال البرنامج الحالي
السياق، تُعطى الأولوية من خلال اختيار نص Robo البرمجي بالترتيب التالي
الذي:
- تتضمّن السمة
contextDescriptor
. - تتضمّن أعلى
priority
(تلقائيًا، تحتوي جميع نصوص Robo البرمجية على نفس التنفيذpriority
من1
). - يظهر في البداية في قائمة نصوص Robo البرمجية، إذا كانت نصوص Robo البرمجية أولويات متطابقة.
في ما يلي مثال على ملف يحتوي على ثلاثة نصوص Robo برمجية تؤدي عملية نفس الإجراء ويتم تشغيلها بواسطة الحالة نفسها - حيث يتم اختبار التطبيق في المقدّمة:
[
{
"id": 1000,
"description": "Robo script 1",
"contextDescriptor": {
"condition": "app_under_test_shown"
},
"actions": [
{
"eventType": "DELAYED_MESSAGE_POSTED",
"delayTime": 3000
}
]
},
{
"id": 1001,
"description": "Robo script 2",
"priority": "2",
"contextDescriptor": {
"condition": "app_under_test_shown"
},
"actions": [
{
"eventType": "DELAYED_MESSAGE_POSTED",
"delayTime": 3000
}
]
},
{
"id": 1002,
"description": "Robo script 3",
"contextDescriptor": {
"condition": "app_under_test_shown"
},
"actions": [
{
"eventType": "DELAYED_MESSAGE_POSTED",
"delayTime": 3000
}
]
}
]
عندما يكون التطبيق قيد الاختبار في المقدّمة، يُشغِّل Robo ما يلي، الترتيب:
"Robo script 2"
لأنه ذو الأولوية القصوى."Robo script 1"
لأنّه يظهر في مرحلة مبكرة من بين باقي الرموز السارية نصوص Robo البرمجية التي لها الأولوية نفسها"Robo script 3"
باعتباره آخر نص Robo برمجي قابل للتطبيق.
عمليات التنفيذ المتكررة
يشغِّل Robo تلقائيًا نص Robo برمجي مرة واحدة أثناء الزحف. يمكن أن تظهر فائدة هذا بوضوح أكبر
وتعديلها باستخدام السمة maxNumberOfRuns
.
في ما يلي مثال على نص Robo برمجي يُجري التطبيق تحت الاختبار في الخلفية لمدة تصل إلى 10 مرات:
{
"id": 1000,
"maxNumberOfRuns": 10,
"contextDescriptor": {
"condition": "app_under_test_shown"
},
"actions": [
{
"eventType": "GO_HOME"
}
]
}
مرحلة الزحف
تنطبق نصوص Robo البرمجية في مراحل مختلفة من زحف Robo محدّد:
مرحلة الزحف | الوصف |
pre_crawl
|
قبل أن يبدأ Robo في العمل ويبدأ في الزحف إلى التطبيق الذي يجري اختباره. |
post_crawl
|
بعد أن ينتهي Robo من الزحف إلى اختبار التطبيق السفلي. حاسمة
post_crawl يجب ألا يتجاوز نص Robo البرمجي 15 ثانية في
المدة وإلا فقد ينتهي الزحف بانتهاء المهلة.
|
crawl
|
مرحلة الزحف الرئيسية، عندما يزحف Robo إلى التطبيق التجريبي. |
close_screen
|
عندما يحاول روبو العودة (الرجوع) من شاشة معينة، عند يتم استكشاف جميع الإجراءات الممكنة على هذه الشاشة. وفقًا للإعدادات التلقائية، الضغط مرة أخرى، وهو أمر غير مرغوب فيه في بعض السيناريوهات. |
إذا لم يتم تحديد السمة 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
|
السياق/الشرط الذي يؤدي إلى تشغيل هذا الإجراء الشرطي. تحتوي على نفس الهيكل ويقدم إمكانات مماثلة مصفّ السياق الخاص بنص 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": "DELAYED_MESSAGE_POSTED",
"delayTime": 10000
},
{
"description": "Screen on",
"eventType": "ADB_SHELL_COMMAND",
"command": "input keyevent 82"
},
{
"description": "Wait for 10 seconds",
"eventType": "DELAYED_MESSAGE_POSTED",
"delayTime": 10000
}
}
تجاهل الإجراءات
يمكن أن يحتوي نص Robo البرمجي على تعليمات لكي يتجاهل Robo واجهة مستخدم معيّنة
أو التطبيقات المصغّرة أو جميع أدوات واجهة المستخدم على شاشة معينة. هذه التعليمات
يتم تمثيلها على أنها تجاهل "الإجراءات" مع "eventType
" و"ELEMENT_IGNORED
"
ALL_ELEMENTS_IGNORED
وفقًا لذلك.
عندما تحتوي السمة contextDescriptor
في نص Robo برمجي على تجاهل
تتطابق الإجراءات مع شاشة معيّنة، لا يتفاعل Robo مع أي تطبيقات مصغّرة لواجهة المستخدم.
المستهدفة من خلال تجاهل إجراءاته (ما لم يجرِ بعض إجراءات نص Robo البرمجية الأخرى
ينفِّذ Robo إجراءً على إحدى أدوات واجهة المستخدم التي تم تجاهلها).
يمكن أن يحتوي نص Robo البرمجي على مزيج من إجراءات التجاهل الشرطية وغير المشروطة
مناسبة. على عكس إجراءات نصوص Robo البرمجية الأخرى، يتم تطبيق إجراءات التجاهل طالما
لأنّ contextDescriptor
الذي يحتوي على نص Robo البرمجي يتطابق مع شاشة أثناء
زحف Robo، بغض النظر عن قيمتَي priority
وmaxNumberOfRuns
ذات الصلة.
في ما يلي مثال على ملف يتضمّن نص Robo برمجيَين. أول روبو
يجعل Robo يتجاهل جميع تطبيقات واجهة المستخدم على شاشة تحتوي على تطبيق مصغّر لواجهة مستخدم يحتوي على
معرّف مورد "my.app.package:id/ignored_screen"
. يقدم نص Robo الثاني الثاني
يتجاهل Robo أدوات واجهة المستخدم التي تتطابق أرقام تعريف مواردها مع ".*:id/done"
للتعبير العادي في Java على
شاشة تحتوي على تطبيق مصغّر لواجهة مستخدم مع رقم تعريف لمصدر
"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 في ما يلي: الخطوات:
يضمن اختبار Robo عرض الطفل ذي الصلة على الشاشة. من خلال إجراء تحديد الموضع على عنصر RecyclerView أو AdapterView.
ينفِّذ اختبار 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" وشغِّله في Test Lab
يمكنك إنشاء نص Robo برمجي في "استوديو Android" لحفظ النص البرمجي في ملف JSON. يمكنك بعد ذلك تحميل ملف JSON إلى Firebase Test Lab. مع التطبيق وإجراء الاختبار وفقًا لذلك.
عند إجراء اختبار Robo مع إرفاق نص برمجي، يختبر Robo الخطوات الأولى من خلال الإجراءات التي تستلزم وصفة طبية ثم يستكشف التطبيق كالمعتاد.
لإنشاء ملف Robo برمجي بتنسيق JSON في "استوديو Android"، اتّبِع الخطوات الواردة في تسجيل نص Robo برمجي باستخدام Test Lab في "استوديو Android"
إجراءات نص Robo البرمجي
تنطبق السمة الاختيارية الشائعة التالية على جميع الإجراءات:
description
: للمساعدة في تتبُّع تنفيذ إجراء نص Robo البرمجي هذا في Robo مخرجات الاختبار.
التأكيد
إذا كان الشرط الذي تم تأكيده صحيحًا، يستمر نص Robo البرمجي إلى المرحلة التالية إجراء، وقد يكون تأكيدًا آخر. بخلاف ذلك، سيتم تنفيذ نص Robo البرمجي تم إيقافها بسبب إخفاق التأكيد.
يسرد الجدول التالي السمات المطلوبة:
السمة | الوصف |
"eventType": "ASSERTION"
|
-- |
contextDescriptor
|
تصف السياق أو الحالة التي تم تأكيدها. لديه نفس الهيكل وتوفر إمكانات مماثلة موضِّح نص Robo البرمجي. |
في ما يلي مثال على تأكيد نص 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"
" على الشاشة باستخدام تقنية التعرّف البصري على الأحرف:
{
"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
|
يحدد العنصر الذي تم النقر عليه باستخدام تقنية التعرّف البصري على الأحرف. الأحداث المتنافية مع
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"
" على شاشة باستخدام تقنية التعرّف البصري على الأحرف:
{
"eventType": "VIEW_CLICKED",
"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) Shell لتنفيذه. |
السمة التالية اختيارية:
expectedOutputRegex
- المخرجات المتوقعة للأمر كلغة Java عادية التعبير. في حال عدم تطابق الناتج، يتعذّر تنفيذ إجراء نص Robo البرمجي. من افتراضيًا، تكون سلسلة فارغة، مما يعني أنه لم يتم التحقق من الإخراج.
في ما يلي مثال على إجراء نص Robo برمجي يمحو بيانات مستخدمي التطبيق تحت الاختبار:
{
"eventType": "ADB_SHELL_COMMAND",
"command": "pm clear __%APP_PACKAGE_NAME%__"
}
منح الأذونات
يتم تسجيل هذا الإجراء بواسطة مسجّل نصوص Robo البرمجية في "استوديو Android" لما يلي: التوافق مع الإصدارات السابقة مع مسجّلة اختبار Espresso. يمنح اختبار Robo جميع الأذونات للتطبيق الذي يجري اختباره في بداية كل عملية زحف، وبالتالي لا يمكن تنفيذ هذا الإجراء. يُرجى عدم استخدام هذا الإجراء في نصوص Robo البرمجية.
يسرد الجدول التالي السمات المطلوبة:
السمة | الوصف |
"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
|
يحدد العنصر الذي تم النقر عليه طويلاً باستخدام تقنية التعرّف البصري على الأحرف. الأحداث المتنافية مع
elementDescriptors
|
السمة التالية اختيارية:
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" بالضغط على زر الرجوع. على واجهة برمجة التطبيقات 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
|
لتحديد اتجاه التمرير السريع:
|
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
|
إحداثي البكسل س للنقطة التي تم النقر عليها. الأحداث المتنافية مع
"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
|
الإحداثي السيني (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": "DELAYED_MESSAGE_POSTED"
|
-- |
delayTime
|
لتحديد مدة الانتظار بالمللي ثانية. |
في ما يلي مثال على إجراء نص Robo برمجي ينتظر ثلاثة ثوانٍ:
{
"eventType": "DELAYED_MESSAGE_POSTED",
"delayTime": 3000
}
انتظار عنصر
يؤدي هذا الإجراء إلى أن ينتظر روبو اختبار ظهور أحد العناصر على الشاشة حتى المهلة المحددة.
يسرد الجدول التالي السمات المطلوبة:
السمة | الوصف |
"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"
}
]
}