Appium Επιθυμητές Δυνατότητες για Android εξομοιωτή
⚡ Έξυπνη Σύνοψη
Οι επιθυμητές δυνατότητες είναι τα ζεύγη κλειδιού-τιμής και Appium Ο πελάτης στέλνει όταν ανοίγει μια συνεδρία, ενημερώνοντας τον διακομιστή σε ποια πλατφόρμα, συσκευή, πρόγραμμα οδήγησης και εφαρμογή θα πρέπει να εκτελεστεί η αυτοματοποιημένη δοκιμή.

Τι είναι οι Επιθυμητές Δυνατότητες
Οι «Επιθυμητές Δυνατότητες» μας βοηθούν να τροποποιήσουμε τη συμπεριφορά του διακομιστή κατά τη διάρκεια του αυτοματισμού. Appium είναι ένα hashmap ή ζεύγος κλειδιού-τιμής, που χρησιμοποιείται για την αποστολή μιας εντολής στο Appium διακομιστή, όπου κάθε εντολή πελάτη εκτελείται στο πλαίσιο μιας συνεδρίας.
Για παράδειγμα, ένας πελάτης στέλνει ένα αίτημα POST /session που περιέχει ένα αντικείμενο JSON στο Appium διακομιστή.
Έτσι, για την αποστολή ενός αιτήματος ή τη διατήρηση μιας συνεδρίας με τον διακομιστή, χρησιμοποιείται ένα σύνολο ζευγών κλειδιών και τιμών. Αυτό είναι γνωστό ως «Επιθυμητές Δυνατότητες».
import io.appium.java_client.AppiumDriver; import org.openqa.selenium.remote.DesiredCapabilities; { DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("deviceName","Android Emulator"); capabilities.setCapability("platformVersion", "4.4"); }
Σημαντικός Ρόλος της Επιθυμητής Ικανότητας
- Οι «Επιθυμητές Δυνατότητες» βοηθούν τον χρήστη να ελέγχει το αίτημα συνεδρίας με τον διακομιστή. Για παράδειγμα, για μια συνεδρία iOS ορίζουμε τη δυνατότητα platformName = iOS, και για μια Android πλατφόρμα συνεδρίας Όνομα = Android.
- Οι «DesiredCapabilities» χρησιμοποιούνται για τη ρύθμιση της παρουσίας WebDriver, για παράδειγμα FirefoxΠρόγραμμα οδήγησης, πρόγραμμα οδήγησης Chrome ή πρόγραμμα οδήγησης Internet Explorer.
- Το DesiredCapability είναι πολύ χρήσιμο για Selenium Πλέγμα. Για παράδειγμα, χρησιμοποιείται για την εκτέλεση διαφορετικών περιπτώσεων δοκιμών σε διαφορετικό πρόγραμμα περιήγησης και διαφορετικό λειτουργικό σύστημα. Με βάση τη δηλωμένη δυνατότητα, ο κόμβος πλέγματος δείχνει στον αντίστοιχο κόμβο. Οι κόμβοι ορίζονται χρησιμοποιώντας τις μεθόδους ιδιότητας 'set':
DesiredCapabilities obj = new DesiredCapabilities(); obj.setBrowserName("firefox"); obj.setVersion("18.0.1"); obj.setPlatform(org.openqa.selenium.Platform.WINDOWS);
- Μια επιθυμητή δυνατότητα είναι ένα πακέτο που ορίζεται από βιβλιοθήκη. Πριν από τη χρήση του 'DesiredCapabilities', θα πρέπει να εισαχθεί από την παρακάτω βιβλιοθήκη.
Org.openqa.selenium.remote.DesiredCapabilities
Appium υποστηρίζει και τα δύο Android και iOS, επομένως υπάρχει ξεχωριστό σύνολο Appium δυνατότητες διακομιστή για κάθε πλατφόρμα.
Ο παρακάτω πίνακας παρουσιάζει μερικές από τις πιο συνηθισμένες Android δυνατότητες και οι αξίες που θα χρησιμοποιηθούν.
| Δυνατότητες | Περιγραφή | Αξίες/Χρήσεις |
|---|---|---|
| πακέτο εφαρμογών | Καλέστε τον επιθυμητό Java πακέτο σε Android που ο χρήστης θέλει να εκτελέσει |
Value= com.example.myapp/ Obj.setCapability ("appPackage", "com.whatsapp"); |
| AppActivity | Δραστηριότητα εφαρμογής που θέλει να εκκινήσει ο χρήστης από το πακέτο. |
Τιμή= MainActivity, .Ρυθμίσεις Obj.setCapability("appActivity", "com.whatsapp.Main"); |
| appWaitPackage | Πακέτο για το οποίο πρέπει να περιμένει η εφαρμογή | Value=com.example.android.myapp |
| appWaitActivity | Κάθε Android δραστηριότητα για την οποία ο χρήστης πρέπει να περιμένει |
Τιμή= SplashActivity capabilities.setCapability("appWaitActivity", "com.example.game.SplashActivity") |
ΣΗΜΕΙΩΣΗ: ανατρέξτε στο Appium τεκμηρίωση για να δείτε περισσότερα Android δυνατότητες.
Ο παρακάτω πίνακας δείχνει ορισμένες δυνατότητες του iOS που χρησιμοποιούνται συνήθως και τις τιμές που πρέπει να χρησιμοποιηθούν.
| Δυνατότητες | Περιγραφή | Αξίες |
|---|---|---|
| LaunchTimeout | Συνολικός χρόνος (σε ms) για αναμονή για όργανα. | 2000 |
| ΕΣΥ ΤΟ ΕΚΑΝΕΣ | Για να προσδιορίσετε τον μοναδικό αριθμό συσκευής μιας συνδεδεμένης φυσικής συσκευής | 166aestu4 |
ΣΗΜΕΙΩΣΗ: ανατρέξτε στο Appium οδηγός δυνατοτήτων για να δείτε περισσότερες δυνατότητες του iOS.
Πώς άλλαξαν οι επιθυμητές δυνατότητες Appium 2
Τα παραπάνω παραδείγματα προέρχονται από το Appium 1 εποχή και εξακολουθούν να εμφανίζουν το σχήμα ενός συνόλου δυνατοτήτων, αλλά δύο κανόνες άλλαξαν και οι δύο θα εμποδίσουν την έναρξη μιας σύγχρονης συνεδρίας.
Καταρχάς, η προδιαγραφή WebDriver του W3C ορίζει μόνο ένα μικρό σύνολο τυπικών δυνατοτήτων, εκ των οποίων platformName και browserName έχει σημασία εδώ. Κάθε άλλη δυνατότητα είναι μια επέκταση προμηθευτή και πρέπει να φέρει ένα πρόθεμα χώρου ονομάτων που τελειώνει σε άνω και κάτω τελεία. AppiumΤο πρόθεμα του είναι appium:. Έτσι deviceName γίνεται appium:deviceName και platformVersion γίνεται appium:platformVersion. Appium 2 απαιτεί επίσης appium:automationName, επειδή τα προγράμματα οδήγησης εγκαθίστανται ξεχωριστά και όχι σε πακέτο με τον διακομιστή.
Δεύτερον, η επανάληψη του προθέματος γίνεται κουραστική, επομένως Appium δέχεται ένα μόνο appium:options Δυνατότητα της οποίας η τιμή είναι ένα αντικείμενο. Οι δυνατότητες μέσα σε αυτό το αντικείμενο δεν χρειάζονται πρόθεμα και όπου ένα όνομα εμφανίζεται τόσο μέσα όσο και έξω από το αντικείμενο, η εσωτερική τιμή υπερισχύει.
{
"platformName": "iOS",
"appium:options": {
"automationName": "XCUITest",
"platformVersion": "16.0",
"app": "/path/to/your.app",
"deviceName": "iPhone 12",
"noReset": true
}
}
⚠️ Σημείωση έκδοσης: σχετικά με την Java πλευρά, Selenium 4 και Appium Java Ο πελάτης 8 απέρριψε το DesiredCapabilities κατηγορία που παρουσιάστηκε νωρίτερα. Οι κατασκευαστές που κληρονόμησαν ειδικά για τον οδηγό BaseOptions αντικαταστήστε το — UiAutomator2Options για Android και XCUITestOptions για iOS — με χάρτη ένα προς έναping από κάθε παλιό setCapability κλήση. Ο αρχικός κώδικας παραπάνω διατηρείται εδώ ως ιστορικό παράδειγμα.
Extracπληροφορίες για πακέτα και δραστηριότητες
Τα πακέτα είναι ομαδοποιημένα αρχεία ή κλάσεις. Δίνουν μια οργανωμένη δομή στον αρθρωτό προγραμματισμό. Java, διαφορετικά πακέτα αποθηκεύονται σε ένα μόνο αρχείο JAR και ο χρήστης μπορεί να καλέσει αυτό το JAR για πλήρη εκτέλεση. Μια παρόμοια ιδέα ακολουθείται στην ανάπτυξη εφαρμογών για κινητά.
Στο Android λειτουργικό σύστημα, όλες οι εφαρμογές εγκαθίστανται με τη μορφή Java πακέτα. Έτσι, για ναtracπληροφορίες διαδρομής πακέτου t, το Android Χρησιμοποιείται η κλάση PackageManager.
Ανακτά πληροφορίες πακέτων και δραστηριότητας για προεγκατεστημένες και μεταεγκατεστημένες εφαρμογές στη συσκευή.
Μπορείτε να λάβετε μια παρουσία της κλάσης PackageManager καλώντας την getPackageManager(). Αυτή η μέθοδος μπορεί να έχει πρόσβαση και να χειριστεί τα πακέτα και τα σχετικά δικαιώματα των εγκατεστημένων εφαρμογών.
Για παράδειγμα:
PackageManager pManager = getPackageManager();
List<ApplicationInfo> list = pManager.getInstalledApplications(PackageManager.GET_META_DATA)
Πώς να βρείτε το appPackage και το appActivity με το adb
Η παραπάνω διαδρομή PackageManager λειτουργεί μέσα από μια εφαρμογή. Ως δοκιμαστής, συνήθως έχετε μόνο την εγκατεστημένη έκδοση, επομένως η ταχύτερη διαδρομή είναι ένα ερώτημα μέσω adb σε μια συνδεδεμένη συσκευή ή εξομοιωτή.
Ανοίξτε την εφαρμογή στη συσκευή χειροκίνητα και, στη συνέχεια, εκτελέστε μία από τις παρακάτω εντολές από ένα τερματικό στον φάκελο platform-tools. Η εντολή εκτυπώνει το παράθυρο που έχει την τρέχουσα εστίαση και η τιμή έχει τη μορφή package/activity.
adb shell dumpsys window | find "mCurrentFocus" adb shell dumpsys window windows | grep -i "mCurrentFocus"
Χρησιμοποιήστε την πρώτη φόρμα στο Windows γραμμή εντολών και το δεύτερο σε ένα κέλυφος Unix ή Git Bash. Διαβάστε το αποτέλεσμα ως δύο μισά: όλα όσα βρίσκονται πριν από την κάθετο είναι η τιμή για appPackage, και όλα όσα ακολουθούν έχουν την αξία για appActivity.
Ισχύουν δύο προειδοποιήσεις. Η εστιασμένη δραστηριότητα είναι ό,τι εμφανίζεται στην οθόνη εκείνη τη στιγμή, η οποία δεν είναι πάντα η δραστηριότητα με την οποία ξεκινά η εφαρμογή — εάν μια συνεδρία αποτύχει κατά την αρχικοποίηση του προγράμματος οδήγησης, εκκινήστε την εφαρμογή από την αρχή και διαβάστε ξανά την τιμή. Και εάν εμφανιστεί πρώτα μια οθόνη εκκίνησης, η δραστηριότητα εισαγωγής θα διαφέρει από αυτήν που τελικά θέλετε να αντιταχθείτε, κάτι που ισχύει ακριβώς. appWaitActivity υπάρχει για.
Μια οπτική εναλλακτική είναι uiautomatorviewer, το οποίο καταγράφει την τρέχουσα ιεραρχία οθόνης και εμφανίζει το πακέτο και την κλάση κάθε κόμβου.
Συνήθη σφάλματα επιθυμητών δυνατοτήτων και πώς να τα διορθώσετε
Οι περισσότεροι απέτυχαν Appium Οι συνεδρίες τερματίζονται πριν από την εκτέλεση ενός μόνο βήματος δοκιμής και η αιτία βρίσκεται σχεδόν πάντα στο σύνολο δυνατοτήτων και όχι στη δοκιμή. Ο παρακάτω πίνακας αντιστοιχίζει κάθε μήνυμα στη συνήθη επιδιόρθωσή του.
| Το μήνυμά σας | Πιθανή αιτία | σταθερός |
| Μη έγκυρη ή μη υποστηριζόμενη δυνατότητα WebDriver | Στάλθηκε μια μη τυπική δυνατότητα χωρίς το πρόθεμα του προμηθευτή | Προσθέστε το appium: σε αυτό ή μετακινήστε το μέσα στο appium:options |
| Οι επιθυμητές δυνατότητες πρέπει να περιλαμβάνουν είτε ένα automationName είτε ένα platformName | Appium 2 δεν μπορούν να επιλέξουν οδηγό | Ορίστε ρητά τα platformName και appium:automationName |
| Δεν είναι δυνατή η εκκίνηση της εφαρμογής. Αρχικό σφάλμα: η δραστηριότητα που χρησιμοποιήθηκε για την εκκίνηση της εφαρμογής δεν υπάρχει. | Η εφαρμογήActivity δεν ταιριάζει με το μανιφέστο | Ξαναδιαβάστε την τιμή με την εντολή dumpsys παραπάνω |
| Η συνεδρία δεν ξεκίνησε: δεν βρέθηκαν συσκευές | Δεν υπάρχει συνδεδεμένος εξομοιωτής ή ακουστικό | Επιβεβαιώστε τη συσκευή με συσκευές adb πριν από την εκκίνηση |
| Δεν ήταν δυνατή η δημιουργία νέας συνεδρίας μετά το χρονικό όριο | Μια οθόνη εκκίνησης καθυστερεί τη δραστηριότητα εισόδου | Ορίστε την τιμή appWaitActivity και αυξήστε την τιμή appWaitDuration |
| Η κατάσταση της εφαρμογής δεν επαναφέρεται μεταξύ των εκτελέσεων | Η προεπιλεγμένη συμπεριφορά επαναφοράς παρακάμφθηκε | Review appium:noReset και appium:fullReset για την εκτέλεση που θέλετε |
Όταν μια συνεδρία αρνείται να ξεκινήσει, διαβάστε το Appium αρχείο καταγραφής διακομιστή αντί για τη στοίβα πελατών tracε. Ο διακομιστής δηλώνει ποια δυνατότητα δεν μπορούσε να ικανοποιήσει και αυτή η γραμμή ονομάζει την επιδιόρθωση.
