מסמך זה מספק מידע התייחסות על סקריפטים של Robo כולל מבנה, יכולות, שימוש, הקלטה ופעולות. סקריפטים של רובו הם מבחנים שממגנים משימות של אבטחת איכות ידנית (QA) עבור אפליקציות לנייד, ומאפשרות אינטגרציה מתמשכת (CI) ואסטרטגיות בדיקות טרום-השקה. סקריפט Robo הוא קובץ JSON שמתאר רצף של ממשק משתמש (UI) ופעולות אחרות.
אתה יכול ליצור סקריפט 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"
}
]
}
]
מִבְנֶה
כל פעולה בסקריפט של רובו מיוצגת כצרור של זוג ערך-תכונה אחד או יותר, המתוארים בטבלה הבאה:
תְכוּנָה | תיאור |
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 אינו משתמש בהתאמה חלקית, דילוג על הפעולה הנוכחית והשעיה . כלומר, התסריט של רובו מבוצע כמבחן מכשור רגיל ונכשל ברגע שלא ניתן לבצע כל אחת מהפעולות שלו.
-
-
postscript
- אפשרויות ביצוע שהוחלו לאחר השלמת סקריפט Robo:-
terminate
- אם מוגדר כ-true
, מבחן Robo מפסיק את הסריקה לאחר השלמת הסקריפט של Robo.
-
להלן דוגמה של סקריפט Robo המופעל במצב strict
, שינה למשך שלוש שניות, ולאחר מכן הסריקה נעצרת:
"roboscript": {
"executionMode": {
"strict": true
},
"postscript": {
"terminate": true
}
}
[
{
"eventType": "DELAYED_MESSAGE_POSTED",
"delayTime": 3000
}
]
פרמטרים של תבנית
פרמטר תבנית הוא מציין מיקום בסקריפט Robo שמוחלף בערך בפועל כאשר מבחן Robo טוען את הסקריפט של Robo לביצוע. פרמטרים של תבנית מקבלים קידומת קו תחתון כפול ואחריו סימן אחוז, ומקובעים לאחר מכן עם סימן אחוז ואחריו קו תחתון כפול.
סקריפטים של רובו תומכים בפרמטר התבנית הבא:
-
__%APP_PACKAGE_NAME%__
- שם החבילה של האפליקציה שבבדיקה.
להלן דוגמה לסקריפט של Robo שעוצר את תהליך הבדיקה של האפליקציה:
[
{
"eventType": "ADB_SHELL_COMMAND",
"command": "am force-stop __%APP_PACKAGE_NAME%__"
}
]
הערות
סקריפט 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 באופן מלא, קריטריוני ההתאמה רפויים וההתאמה מתבצעת מחדש. ההתאמה החלקית אינה מחשיבה את מתאר האלמנטים החיצוני ביותר בזמן התאמה ל-widget של ממשק המשתמש של פעולת סקריפט 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 מבוצעות בשלבים הבאים:
בדיקת רובו מבטיחה שהילד המתאים מוצג על המסך באמצעות פעולת מיקום על המכיל RecyclerView או AdapterView.
מבחן רובו מבצע את הפעולה המוקלטת ישירות על אלמנט הילד, מכיוון שהוא כבר מוצג על המסך.
להלן דוגמה לפעולת לחיצה על ילד 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
}
]
}
הקלט סקריפט של רובו ב-Android Studio והפעל אותו ב-Test Lab
אתה יכול ליצור סקריפט Robo ב-Android Studio, ששומר את הסקריפט כקובץ JSON. לאחר מכן תוכל להעלות את קובץ ה-JSON ל-Firebase Test Lab עם האפליקציה ולהפעיל את הבדיקה בהתאם.
כאשר אתה מפעיל מבחן רובו עם סקריפט מצורף, מבחן רובו עובר בשלבים ראשונים דרך הפעולות שנקבעו מראש ולאחר מכן בוחן את האפליקציה כרגיל.
כדי ליצור קובץ JSON של Robo סקריפט ב-Android Studio, בצע את השלבים בהקלטת סקריפט Robo באמצעות Test Lab ב-Android Studio .
פעולות תסריט של רובו
התכונה האופציונלית הנפוצה הבאה חלה על כל הפעולות:
-
description
- עוזר לעקוב אחר ביצוע פעולת הסקריפט של Robo זו בפלטי בדיקת Robo.
טַעֲנָה
אם התנאי הנטען נכון, הסקריפט של רובו ממשיך לפעולה הבאה, שיכולה להיות טענה נוספת. אחרת, ביצוע הסקריפט של Robo נעצר עקב טענה שנכשלה, ותוצאת הבדיקה נכשלה.
הטבלה הבאה מפרטת את התכונות הנדרשות:
תְכוּנָה | תיאור |
"eventType": "ASSERTION" | -- |
contextDescriptor | מתאר את ההקשר או המצב הנטען. |
מתאר הקשר
מתאר הקשר מגדיר את ההקשר/התנאי באמצעות אחת או שילוב של התכונות הבאות:
תְכוּנָה | תיאור |
---|---|
"condition": "element_present" | בודק ש-widget של ממשק משתמש התואם elementDescriptors או לטקסט שצוין על-ידי visionText קיים על המסך. |
"condition": "element_disabled" | בודק ש-widget של ממשק משתמש התואם elementDescriptors קיים על המסך ולא ניתן ליצור איתו אינטראקציה. |
"condition": "element_checked" | בודק ש-widget של ממשק משתמש התואם elementDescriptors קיים על המסך ומסומן. |
"condition": "app_under_test_shown" | בודק שהאפליקציה שבבדיקה פועלת בחזית. |
"condition": "default_launcher_shown" | בודק שמסך הבית של מכשיר מוצג, מה שאומר שאף אפליקציות לא פועלות בחזית. |
"condition": "non_roboscript_action_performed" | בודק שהפעולה האחרונה שבוצעה על ידי מבחן רובו אינה פעולת סקריפט של רובו. |
negateCondition | אם מוגדר כ- true , שולל את condition . לדוגמה, אתה יכול להשתמש בתכונה זו כדי לבדוק אם יישומון ממשק משתמש אינו קיים על המסך, או שהאפליקציה הנבדקת אינה פועלת בחזית. |
elementDescriptors | מתאר אלמנט אחד או יותר המזהים ווידג'ט ממשק משתמש על המסך. הוא משמש בשילוב עם התנאים element_present , element_disabled ו- element_checked . בלעדי הדדית עם visionText . למידע נוסף, ראה מתארי אלמנטים . |
visionText | טקסט על המסך מזוהה באמצעות ה-API של זיהוי תווים אופטי (OCR). visionText משמש בשילוב עם התנאי element_present . בלעדי הדדית עם elementDescriptors . |
להלן דוגמה להצהרת סקריפט של Robo שבודקת שהאפליקציה שנמצאת בבדיקה נמצאת בחזית:
{
"eventType": "ASSERTION",
"contextDescriptor": {
"condition": "app_under_test_shown"
}
}
להלן דוגמה להצהרת סקריפט של Robo הבודקת ש-widget של ממשק משתמש עם מזהה המשאב "com.google.samples.apps.topeka:id/done"
קיים על מסך:
{
"eventType": "ASSERTION",
"contextDescriptor": {
"condition": "element_present",
"elementDescriptors": [
{
"resourceId": "com.google.samples.apps.topeka:id/done"
}
]
}
}
להלן דוגמה להצהרת סקריפט של Robo הבודקת "Settings"
לא מזוהה על מסך באמצעות OCR:
{
"eventType": "ASSERTION",
"contextDescriptor": {
"condition": "element_present",
"negateCondition": true,
"visionText": "Settings"
}
}
נְקִישָׁה
הטבלה הבאה מפרטת את התכונות הנדרשות:
תְכוּנָה | תיאור |
---|---|
eventType | מציין את סוג פעולת הסקריפט של Robo. |
"eventType": "VIEW_CLICKED" | לוחץ על רכיב היעד של האפליקציה שבבדיקה. |
"eventType": "SOFT_KEYBOARD_CLICK" | לוחץ על רכיב היעד של המקלדת הרכה. |
"eventType": "SOFT_KEYBOARD_RANDOM_CLICK" | לוחץ על רכיבים אקראיים של המקלדת הרכה עד maxNumberOfRuns פעמים. |
"eventType": "LIST_ITEM_CLICKED" | משמש את מקליט הסקריפטים של Robo ב-Android Studio ללחיצה על פריטי רשימה. |
elementDescriptors | מזהה את הווידג'ט של ממשק המשתמש שלחצו עליו באמצעות היררכיית ממשק המשתמש של Android. בלעדי הדדית עם visionText . |
visionText | מזהה את הרכיב שנלחץ באמצעות OCR. בלעדי הדדית עם 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",
"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%__"
}
הענק הרשאות
פעולה זו מוקלטת על ידי מקליט התסריטים של רובו ב-Android Studio לצורך תאימות לאחור עם מקליט בדיקות אספרסו . מבחן רובו מעניק את כל ההרשאות לאפליקציה הנבדקת בתחילת כל סריקה, ולפיכך, פעולה זו היא ללא הפעלה. אל תשתמש בפעולה זו בסקריפטים של רובו.
הטבלה הבאה מפרטת את התכונות הנדרשות:
תְכוּנָה | תיאור |
"eventType": "PERMISSIONS_REQUEST" | -- |
הקלד טקסט
הטבלה הבאה מפרטת את התכונות הנדרשות:
תְכוּנָה | תיאור |
---|---|
eventType | מציין את סוג פעולת הסקריפט של Robo. |
"eventType": "VIEW_TEXT_CHANGED" | מזין את הטקסט הנתון לווידג'ט ממשק המשתמש היעד. |
"eventType": "ENTER_TEXT" | מזין את הטקסט הנתון לתוך הווידג'ט של ממשק המשתמש ולאחר מכן שולח אירוע KEYCODE_ENTER לווידג'ט ממשק המשתמש הזה. |
elementDescriptors | מזהה את יישומון ממשק המשתמש היעד באמצעות היררכיית ממשק המשתמש של אנדרואיד. |
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 | מזהה את יישומון ממשק המשתמש היעד באמצעות היררכיית ממשק המשתמש של אנדרואיד. |
התכונה הבאה היא אופציונלית:
-
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)" כאחוזים או פיקסלים. |
להלן דוגמה לפעולת סקריפט של רובו המבצעת תנועת צביטה החוצה:
{
"eventType": "TWO_POINT_GESTURE",
"coordinates": "(50%,50%)->(25%,50%),(50%,50%)->(75%,50%)"
}
בצע פעולת IME
פעולה זו לוחצת על כפתור הפעולה הנוכחית, לדוגמה, הבא, סיום וחיפוש, בעורך שיטת הקלט (IME) עבור ווידג'ט ממשק המשתמש שצוין.
הטבלה הבאה מפרטת את התכונות הנדרשות:
תְכוּנָה | תיאור |
---|---|
"eventType": "PRESSED_EDITOR_ACTION" | -- |
elementDescriptors | מזהה את יישומון ממשק המשתמש היעד באמצעות היררכיית ממשק המשתמש של אנדרואיד. |
להלן דוגמה לפעולת סקריפט 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 של emulators. |
להלן דוגמה לפעולת סקריפט של רובו הלוחצת לאחור:
{
"eventType": "PRESSED_BACK"
}
לחץ על הבית
פעולה זו שולחת אירוע KEYCODE_HOME
למכשיר.
הטבלה הבאה מפרטת את התכונות הנדרשות:
תְכוּנָה | תיאור |
"eventType": "GO_HOME" | -- |
להלן דוגמה לפעולת סקריפט של רובו הלוחצת הביתה:
{
"eventType": "GO_HOME"
}
גלול אלמנט לתצוגה
פעולה זו גורמת לבדיקה של Robo לגלול קדימה את יישומון ה-UI שתואם ל- elementDescriptors
שצוין עד שהווידג'ט של ממשק המשתמש שתואם ל- childElementDescriptors
שצוין קיים על המסך, או שלא ניתן עוד לגלול את ה-widget הגלילה, או שמגיעים למספר המקסימלי של 50 גלילה.
הטבלה הבאה מפרטת את התכונות הנדרשות:
תְכוּנָה | תיאור |
"eventType": "ELEMENT_SCROLL_INTO_VIEW" | -- |
elementDescriptors | מזהה את הווידג'ט של ממשק המשתמש הגלילה באמצעות היררכיית ממשק המשתמש של אנדרואיד. |
childElementDescriptors | מזהה את ווידג'ט ממשק המשתמש לגלול אליו באמצעות היררכיית ממשק המשתמש של אנדרואיד. |
להלן דוגמה לפעולת סקריפט 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 | מזהה את יישומון ממשק המשתמש היעד באמצעות היררכיית ממשק המשתמש של אנדרואיד. |
להלן דוגמה לפעולת סקריפט Robo המחליקה כלפי מעלה ווידג'ט ממשק משתמש עם מזהה המשאב "my.app.package:id/custom_content"
:
{
"eventType": "VIEW_SWIPED",
"swipeDirection": "Up",
"elementDescriptors": [
{
"resourceId": "my.app.package:id/custom_content"
}
]
}
קח צילום מסך
הטבלה הבאה מפרטת את התכונות הנדרשות:
תְכוּנָה | תיאור |
"eventType": "TAKE_SCREENSHOT" | -- |
screenshotName | מציין את שם קובץ צילום המסך. |
להלן דוגמה לפעולת סקריפט של רובו הלוקחת צילום מסך:
{
"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 | מזהה את הווידג'ט של ממשק המשתמש באמצעות היררכיית ממשק אנדרואיד. |
להלן דוגמה לפעולת סקריפט Robo המזיזה את המחוון של סרגל החיפוש ימינה:
{
"eventType": "POINT_TAP_ELEMENT",
"pointTapXPercent": 80,
"pointTapYPercent": 50,
"elementDescriptors": [
{
"resourceId": "my.app.package:id/my_seekbar"
}
]
}
הפסקת זחילה
פעולה זו עוצרת את מבחן הרובו.
הטבלה הבאה מפרטת את התכונות הנדרשות:
תְכוּנָה | תיאור |
---|---|
"eventType": "TERMINATE_CRAWL" | -- |
להלן דוגמה לפעולת סקריפט Robo שעוצרת מבחן Robo:
{
"eventType": "TERMINATE_CRAWL"
}
לַחֲכוֹת
הטבלה הבאה מפרטת את התכונות הנדרשות:
תְכוּנָה | תיאור |
"eventType": "DELAYED_MESSAGE_POSTED" | -- |
delayTime | מציין כמה זמן לחכות, באלפיות שניות. |
להלן דוגמה לפעולת סקריפט של רובו שמחכה שלוש שניות:
{
"eventType": "DELAYED_MESSAGE_POSTED",
"delayTime": 3000
}
חכה לאלמנט
פעולה זו גורמת לבדיקת רובו להמתין לרכיב שיופיע על המסך עד לזמן הקצוב שצוין.
הטבלה הבאה מפרטת את התכונות הנדרשות:
תְכוּנָה | תיאור |
"eventType": "WAIT_FOR_ELEMENT" | -- |
delayTime | מציין את פסק הזמן הקצוב להמתנה, באלפיות שניות. |
elementDescriptors | מזהה את ווידג'ט ממשק המשתמש הממתין באמצעות היררכיית ממשק המשתמש של אנדרואיד. |
להלן דוגמה לפעולת סקריפט של Robo שמחכה עד 30 שניות עד שווידג'ט ממשק משתמש עם מזהה המשאב "my.app.package:id/confirmation_button"
יופיע על המסך:
{
"eventType": "WAIT_FOR_ELEMENT",
"delayTime": 30000,
"elementDescriptors": [
{
"resourceId": "my.app.package:id/confirmation_button"
}
]
}