Εξαίρεση Χειρισμός σε Selenium Webdriver (Τύποι)
⚡ Έξυπνη Σύνοψη
Εξαίρεση χειρισμός σε Selenium Το WebDriver κρατάει μια αποτυχημένη εντολή από το stopping μια ολόκληρη δοκιμαστική λειτουργία. Java δοκιμή-πιάσιμο, πολλαπλά μπλοκ πιάσματος, ρίψη, ρίψεις και τέλος, το καθένα δίνει σε ένα σενάριο έναν διαφορετικό τρόπο ανάκτησης.
Τι είναι η Εξαίρεση;
Μια εξαίρεση είναι ένα σφάλμα που συμβαίνει κατά την εκτέλεση ενός προγράμματος. Ενώ εκτελείται ένα πρόγραμμα, η γλώσσα προγραμματισμού δημιουργεί μια εξαίρεση που πρέπει να αντιμετωπιστεί, διαφορετικά το πρόγραμμα θα παρουσιάσει σφάλμα.
Η εξαίρεση υποδεικνύει ότι, παρόλο που το συμβάν μπορεί να συμβεί, αυτός ο τύπος συμβάντος συμβαίνει σπάνια. Όταν μια μέθοδος δεν είναι σε θέση να χειριστεί την εξαίρεση, μετατίθεται στη συνάρτηση καλούντος της. Java, η οποία οδηγεί τους περισσότερους Selenium Στις σουίτες, κάθε εξαίρεση WebDriver δεν είναι ελεγμένη, επομένως ο μεταγλωττιστής δεν σας αναγκάζει ποτέ να την εντοπίσετε — μια μη αντιμετωπισμένη αποτυχία εμφανίζεται μόνο κατά τον χρόνο εκτέλεσης.
Τύποι εξαιρέσεων σε Selenium Πρόγραμμα οδήγησης Web
Η WebDriverException είναι η βασική κλάση της ιεραρχίας και κάθε εξαίρεση παρακάτω κληρονομείται από αυτήν. Ο πίνακας παραθέτει και τις 41 εξαιρέσεις που ενδέχεται να συναντήσετε, μαζί με τη συνθήκη που ενεργοποιεί την καθεμία.
| # | Εξαίρεση | Όταν συμβαίνει |
|---|---|---|
| 1 | ElementNotVisibleException | Ένα υπάρχον στοιχείο στο DOM έχει ένα χαρακτηριστικό που έχει οριστεί ως κρυφό. |
| 2 | ElementNotSelectableException | Το στοιχείο βρίσκεται στο DOM αλλά δεν μπορεί να επιλεγεί, επομένως η αλληλεπίδραση είναι αδύνατη. |
| 3 | NoSuchElementException | Το στοιχείο δεν βρέθηκε με το τοποθετών παρέχονται. |
| 4 | NoSuchFrameException | The πλαίσιο Ο στόχος στον οποίο θα γίνει η μετάβαση δεν υπάρχει. |
| 5 | NoAlertPresentException | Μια μετάβαση σε ένα ειδοποιεί εκτελείται όταν δεν εμφανίζεται καμία ειδοποίηση. |
| 6 | NoSuchWindowException | Ο στόχος παραθύρου στον οποίο θα γίνει η εναλλαγή δεν υπάρχει. |
| 7 | Εξαίρεση αναφοράς StaleElement | Το στοιχείο ιστού είναι αποκομμένο από το τρέχον DOM. |
| 8 | Εξαίρεση περιόδου σύνδεσης | Το WebDriver λειτουργεί αφού κλείσετε το πρόγραμμα περιήγησης. |
| 9 | TimeoutException | Μια εντολή δεν ολοκληρώθηκε εγκαίρως — για παράδειγμα, το στοιχείο που αναζητήθηκε δεν βρέθηκε εντός της αναμονής. |
| 10 | WebDriverException | Βασική κλάση των άλλων εξαιρέσεων του WebDriver. Επίσης, ενεργοποιείται όταν το WebDriver ενεργεί αμέσως μετά το κλείσιμο του προγράμματος περιήγησης. |
| 11 | Εξαίρεση Κλειστής Σύνδεσης | Υπάρχει αποσύνδεση στον οδηγό. |
| 12 | ElementClickInterceptedException | Το στοιχείο που λαμβάνει τα συμβάντα αποκρύπτει το στοιχείο που ζητήθηκε για το κλικ. |
| 13 | ElementNotInteractableException | Το στοιχείο υπάρχει στο DOM, αλλά είναι αδύνατο να αλληλεπιδράσει κανείς με αυτό. |
| 14 | Εξαίρεση ErrorInResponse | Κάτι απέτυχε κατά την αλληλεπίδραση με το Firefox επέκταση ή τον απομακρυσμένο διακομιστή προγράμματος οδήγησης. |
| 15 | ErrorHandler.UnknownServerException | Χρησιμοποιείται ως placeholder όταν ο διακομιστής επιστρέφει σφάλμα χωρίς στοίβα trace. |
| 16 | ImeActivationFailedException | Η ενεργοποίηση του μηχανισμού IME απέτυχε. |
| 17 | ImeNotAvailableException | Η υποστήριξη IME δεν είναι διαθέσιμη. |
| 18 | Εξαίρεση Μη Ασφαλούς Πιστοποιητικού | Η πλοήγηση έκανε τον παράγοντα χρήστη να φτάσει σε ένα προειδοποίηση πιστοποιητικού, κάτι που μπορεί να προκαλέσει ένα μη έγκυρο ή ληγμένο πιστοποιητικό TLS. |
| 19 | Εξαίρεση Μη έγκυρου Ορίσματος | Ένα όρισμα δεν ανήκει στον αναμενόμενο τύπο. |
| 20 | Εξαίρεση Μη έγκυρου Τομέα Cookie | A κουλουράκι προστίθεται σε διαφορετικό τομέα αντί για τον τρέχοντα URL. |
| 21 | Εξαίρεση Μη έγκυρων Συντεταγμένων | Η αντιστοιχισμένη αλληλεπιδραστική λειτουργία δεν είναι έγκυρη. |
| 22 | Εξαίρεση Κατάστασης Μη Εφαρμοστέου Στοιχείου | Η εντολή δεν μπορεί να ολοκληρωθεί επειδή το στοιχείο δεν είναι έγκυρο. |
| 23 | Εξαίρεση Μη έγκυρου ΑναγνωριστικούΠεριόδου | Το δεδομένο αναγνωριστικό συνεδρίας δεν περιλαμβάνεται στις ενεργές συνεδρίες, επομένως δεν υπάρχει ή είναι ανενεργό. |
| 24 | Μη έγκυρη εναλλαγή σεTargetΕξαίρεση | Ο στόχος πλαισίου ή παραθύρου στον οποίο θα γίνει η εναλλαγή δεν υπάρχει. |
| 25 | JavascriptΕξαίρεση | Παρουσιάστηκε σφάλμα κατά την εκτέλεση JavaΣενάριο που δίνεται από τον χρήστη. |
| 26 | JsonException | Η συνεδρία ζητείται όταν η συνεδρία δεν έχει δημιουργηθεί. |
| 27 | NoSuchAttributeException | Δεν ήταν δυνατή η εύρεση του χαρακτηριστικού ενός στοιχείου. |
| 28 | ΚίνησηTargetΕξαίρεση Εκτός Ορίων | Ο στόχος που παρέχεται στη μέθοδο ActionChains move() δεν είναι έγκυρος — για παράδειγμα, εκτός εγγράφου. |
| 29 | NoSuchContextException | Το ContextAware, το οποίο πραγματοποιεί δοκιμές σε κινητές συσκευές, δεν μπορεί να βρει το ζητούμενο περιβάλλον. |
| 30 | Εξαίρεση από το NoSuchCookieException | Δεν βρέθηκε cookie που να ταιριάζει με το όνομα της δεδομένης διαδρομής μεταξύ των cookie του εγγράφου που βρίσκεται σε εξέλιξη. |
| 31 | ΔενΒρέθηκεΕξαίρεση | Μια υποκλάση του WebDriverException, που ενεργοποιείται όταν ένα στοιχείο στο DOM δεν υπάρχει. |
| 32 | Εξαίρεση διακομιστή απομακρυσμένου προγράμματος οδήγησης | Ο διακομιστής δεν αποκρίνεται επειδή οι δυνατότητες που περιγράφονται δεν είναι σωστές. |
| 33 | Εξαίρεση οθόνης | Δεν είναι δυνατή η λήψη οθόνης. |
| 34 | Εξαίρεση περιόδου σύνδεσης που δεν δημιουργήθηκε | Δεν ήταν δυνατή η επιτυχής δημιουργία νέας συνεδρίας. |
| 35 | UnableToSetCookieException | Ένας οδηγός δεν μπορεί να ορίσει ένα cookie. |
| 36 | Μη αναμενόμενηεξαίρεσηόνομαετικέτας | Μια κλάση υποστήριξης δεν έλαβε ένα στοιχείο web όπως αναμενόταν. |
| 37 | Μη χειριζόμενη ΕξαίρεσηΕιδοποίησης | Υπάρχει μια ειδοποίηση, αλλά το WebDriver δεν είναι σε θέση να εκτελέσει τη λειτουργία ειδοποίησης. |
| 38 | Μη αναμενόμενη ειδοποίησηΠαρούσαεξαίρεση | Εμφανίζεται μια απροσδόκητη ειδοποίηση. |
| 39 | ΆγνωστηΕξαίρεσηΜεθόδου | Η ζητούμενη εντολή ταιριάζει με μια γνωστή URL αλλά όχι μια μέθοδος για αυτό το συγκεκριμένο URL. |
| 40 | Εξαίρεση Μη ΠροσβάσιμουΠρόγραμμαΑναζήτησης | Το πρόγραμμα περιήγησης δεν μπορεί να ανοίξει ή παρουσίασε σφάλμα για κάποιο λόγο. |
| 41 | Μη υποστηριζόμενη εντολή εξαίρεσης | Το απομακρυσμένο WebDriver δεν στέλνει έγκυρες εντολές όπως αναμενόταν. |
Τρία κυριαρχούν στην καθημερινή αποσφαλμάτωση: NoSuchElementException σημαίνει λάθος XPath ή ένα στοιχείο που δεν έχει αποδοθεί, το TimeoutException σημαίνει ότι η αναμονή είναι πολύ σύντομη για ένα AJAX απόκριση και το StaleElementReferenceException ακολουθεί ένα δυναμικός επαναποτύπωση.
Πώς να χειριστείτε τις εξαιρέσεις στο Selenium
Ακολουθούν οι τυπικές δομές για τον χειρισμό εξαιρέσεων στο Selenium WebDriver. Κάθε ένα είναι απλό Java, επομένως λειτουργεί σε οποιοδήποτε Σκριπτ WebDriver χωρίς επιπλέον βιβλιοθήκες.
Βήμα 1) Try-catch
Αυτή η μέθοδος μπορεί να εντοπίσει εξαιρέσεις χρησιμοποιώντας έναν συνδυασμό των λέξεων-κλειδιών try και catch. Η εντολή try σηματοδοτεί την αρχή του μπλοκ και η εντολή catch τοποθετείται στο τέλος του μπλοκ try, όπου επιλύει την εξαίρεση.
try { // Code } catch (Exception e) { // Code for Handling exception }
Βήμα 2) Πολλαπλά μπλοκ αλίευσης
Υπάρχουν διάφοροι τύποι εξαιρέσεων και ένα μόνο μπλοκ κώδικα μπορεί να εγείρει περισσότερες από μία. Τα πολλαπλά μπλοκ catch σάς επιτρέπουν να χειρίζεστε κάθε τύπο ξεχωριστά με τον δικό του κώδικα. Μπορείτε να χρησιμοποιήσετε περισσότερα από δύο μπλοκ catch και δεν υπάρχει όριο στον αριθμό που προσθέτετε.
try { //Code } catch (ExceptionType1 e1) { //Code for Handling Exception 1 } catch (ExceptionType2 e2) { //Code for Handling Exception 2 }
Βήμα 3) Πέτα
Όταν θέλετε να δημιουργήσετε μια εξαίρεση, η λέξη-κλειδί throw την παραδίδει για χειρισμό κατά τον χρόνο εκτέλεσης. Χρησιμοποιήστε τη συνάρτηση throw όταν μεταβιβάζετε μια εξαίρεση προς τα εμπρός αντί να την επιλύσετε στην τρέχουσα μέθοδο.
public static void anyFunction() throws Exception{ try { // write your code here } catch (Exception b) { // Do whatever you want to perform // Throw the Exception back to the system throw(b); } }
Βήμα 4) Πολλαπλές Εξαιρέσεις
Μπορείτε να αναφέρετε διάφορες εξαιρέσεις στην ρήτρα ρίψεων.
public static void anyFunction() throws ExceptionType1, ExceptionType2{ try { // write your code here } catch (ExceptionType1 e1) { // Code to handle exception 1 } catch (ExceptionType2 e2) { // Code to handle exception 2 }
Βήμα 5) Τέλος
Η λέξη-κλειδί finally δημιουργεί ένα μπλοκ κάτω από το μπλοκ try. Εκτελείται ανεξάρτητα από το αν έχει προκύψει κάποια εξαίρεση, γεγονός που την καθιστά το κατάλληλο μέρος για να κλείσετε ένα πρόγραμμα οδήγησης ή να αποδεσμεύσετε μια λαβή αρχείου.
try { //Code } catch (ExceptionType1 e1) { //Catch block } catch (ExceptionType2 e2) { //Catch block } catch (ExceptionType3 e3) { //Catch block } finally { //The finally block always executes. }
Μέθοδοι εμφάνισης πληροφοριών εξαίρεσης
Μόλις εντοπιστεί μια εξαίρεση, το ίδιο το αντικείμενο φέρει τις διαγνωστικές λεπτομέρειες. Μπορείτε να χρησιμοποιήσετε τις ακόλουθες μεθόδους για να την εμφανίσετε:
| Μέθοδος | Τι αναφέρει |
|---|---|
| εκτύπωσηΣτοίβαTracμι() | Εκτυπώνει τη στοίβα tracε, το όνομα της εξαίρεσης και άλλη χρήσιμη περιγραφή. |
| toString () | Επιστρέφει ένα μήνυμα κειμένου που περιγράφει το όνομα και την περιγραφή της εξαίρεσης. |
| getMessage() | Εμφανίζει την περιγραφή της εξαίρεσης από μόνη της. |
Συνδυάστε τα με ένα στιγμιότυπο οθόνης που έχει ληφθεί μέσα στο μπλοκ catch και μια αποτυχημένη εκτέλεση θα δείξει τόσο τι χάλασε όσο και πώς φαινόταν η σελίδα.
