top 10 selenium exceptions
Χειρισμός εξαιρέσεων Selenium WebDriver με χρήση εξαίρεσης Πλαίσιο χειρισμού - Selenium Tutorial # 19
Η εξαίρεση στον κώδικα αυτοματισμού είναι πολύ συνηθισμένη. «Εξαίρεση» όπως υποδηλώνει η λέξη, είναι μια ειδική ή ασυνήθιστη περίπτωση.
Η εκτέλεση κώδικα αυτοματοποίησης συνήθως δεν μπορεί να πραγματοποιηθεί όπως αναμενόταν λόγω πολλών παραγόντων που εμπλέκονται στην εκτέλεση, όπως ζητήματα σταθερότητας δικτύου, ζητήματα Διαδικτύου, σταθερότητα διακομιστή κ.λπ. Ενδέχεται να έχουμε εξαιρέσεις λόγω ανεπαρκούς χρόνου αναμονής ή εσφαλμένων συντάξεων, παραμέτρων κ.λπ.
Στο τελευταίο σεμινάριο WebDriver, μάθαμε για 3 διαφορετικούς τύπους σημαντικών στοιχείων ιστού όπως Πίνακες Ιστού, Πλαίσια και Δυναμικά στοιχεία και τους μηχανισμούς χειρισμού τους σε σενάριο σενάριο
Πριν προχωρήσετε με τα μαθήματα Framework σε αυτό Εκπαίδευση σεληνίου σειρά, εδώ σε αυτό το σεμινάριο θα μάθουμε για τύποι εξαιρέσεων και τρόπος χειρισμού εξαιρέσεων σε σενάρια Java και Selenium . Οι προγραμματιστές / δοκιμαστές χρησιμοποιούν το πλαίσιο χειρισμού εξαιρέσεων για να χειριστούν μια εξαίρεση σε σενάρια σεληνίου.
Τι θα μάθετε:
- Τι είναι μια εξαίρεση;
- Πλεονεκτήματα και μειονεκτήματα της προσέγγισης αποφυγής-χειρισμού
- Τύποι εξαιρέσεων σε Java και σελήνιο
- Χειρισμός εξαίρεσης
- Κοινές εξαιρέσεις στο Selenium WebDriver
- Αποφυγή και χειρισμός κοινών εξαιρέσεων
- # 1) org.openqa.selenium.NoSuchElementException
- # 2) org.openqa.selenium.NoSuchWindowException
- # 3) org.openqa.selenium.NoSuchFrameException
- # 4) org.openqa.selenium.NoAlertPresentException
- # 5) org.openqa.selenium.InvalidSelectorException
- # 6) org.openqa.selenium.ElementNotVisibleException
- # 7) org.openqa.selenium.ElementNotSelectableException
- # 8) org.openqa.selenium.TimeoutException
- # 9) org.openqa.selenium.NoSuchSessionException
- # 10) org.openqa.selenium.StaleElementReferenceException
- συμπέρασμα
- Συνιστώμενη ανάγνωση
Τι είναι μια εξαίρεση;
Εξαιρέσεις είναι συμβάντα λόγω των οποίων το πρόγραμμα java τελειώνει απότομα χωρίς να δίνει την αναμενόμενη έξοδο. Η Java παρέχει ένα πλαίσιο όπου ένας χρήστης μπορεί να χειριστεί εξαιρέσεις.
Η διαδικασία χειρισμού εξαιρέσεων ονομάζεται Εξαίρεση χειρισμού.
Οι εξαιρέσεις πρέπει να αντιμετωπιστούν επειδή σπάνε την κανονική ροή εκτέλεσης ενός προγράμματος. Μία από τις σημαντικές προθέσεις του χειρισμού εξαιρέσεων είναι να αποφευχθεί αυτή η διακοπή και να συνεχιστεί η εκτέλεση του προγράμματος. Μερικές φορές, ίσως θελήσετε να εκτελέσετε κάποιες σειρές ενεργειών κατά την εμφάνιση μιας συγκεκριμένης εξαίρεσης.
Όταν προκύπτει μια εξαίρεση, δημιουργείται ένα αντικείμενο εξαίρεσης το οποίο τεχνικά αναφέρεται ως « Ρίχνει μια εξαίρεση » και προσθέτουμε Προσπάθησε να πιάσεις μπλοκ όπως,
try { // Protected code } catch (ExceptionName e) { // Catch block }
# 1) Το κομμάτι του κώδικα που μπορεί να ρίξει μια εξαίρεση προστίθεται στο μπλοκ Try.
#δύο) Η δήλωση Catch συλλαμβάνει την εξαίρεση και την παίρνει ως παράμετρο.
# 3) Όταν δεν υπάρχει εξαίρεση, εκτελείται η δήλωση δοκιμής και όχι η δήλωση σύλληψης.
Παράδειγμα : Όταν το σενάριο σεληνίου αποτύχει λόγω λανθασμένου εντοπισμού, τότε ο προγραμματιστής θα πρέπει να είναι σε θέση να κατανοήσει τον λόγο αποτυχίας και αυτό μπορεί να επιτευχθεί εύκολα εάν η εξαίρεση αντιμετωπίζεται σωστά στο πρόγραμμα.
Σύμφωνα με την εμπειρία μου, είναι καλύτερο να προσπαθήσετε να αποφύγετε τις εξαιρέσεις του WebDriver όποτε είναι δυνατόν και να πιάσετε πραγματικά εξαιρετικές περιπτώσεις. Χρησιμοποιήστε το try / catch για να χειριστείτε πράγματα που πάνε στραβά και είναι εκτός ελέγχου μου.
Αποφύγετε αυτά που μπορώ να πιάσω άλλους!
Αυτή είναι η καλύτερη στρατηγική που λειτούργησε για μένα.
Για παράδειγμα, Σκεφτείτε μια δοκιμαστική σελίδα για να φορτωθεί περισσότερο από το συνηθισμένο χρόνο σε έναν δοκιμαστικό διακομιστή. Θα λαμβάνουμε συχνές εξαιρέσεις ενώ κάνουμε ενέργειες σε αυτήν τη σελίδα. Έτσι, αντί να το πιάζουμε κάθε φορά, μπορούμε
- Προσθέστε μια εντολή αναμονής και προσπαθήστε να αποφύγετε μια εξαίρεση
- Χρησιμοποιήστε το 'Try / Catch' για χειρισμό σε περίπτωση που έχει συμβεί μια πραγματικά εξαιρετική θήκη
Με αυτόν τον τρόπο μειώνονται οι πιθανότητες εξαιρέσεων.
Πλεονεκτήματα και μειονεκτήματα της προσέγγισης αποφυγής-χειρισμού
Πλεονεκτήματα | Μειονεκτήματα |
---|---|
1) Αυτή η προσέγγιση μειώνει τις πιθανότητες λήψης εξαιρέσεων. | 1) Αυξάνει τις γραμμές κωδικών επειδή προσθέτετε επιπλέον κώδικα για να αποφύγετε εξαιρέσεις |
Εάν εξακολουθεί να ισχύει μια εξαίρεση 2) θα ήταν μια πραγματικά εξαιρετική περίπτωση που αξίζει τον έλεγχο | 2) Πρέπει να κατανοήσουν καλύτερα το Web Driver API, τις εντολές και τις εξαιρέσεις |
Μειώστε τον χρόνο εντοπισμού σφαλμάτων. Ο κωδικός αυτοματισμού προορίζεται να εντοπίσει σφάλματα και δεν θέλετε να δείτε πάρα πολλές ανεπιθύμητες εξαιρέσεις 3) και να βρείτε τους λόγους πίσω από καθένα από αυτά | |
4) Στο μπλοκ Catch, αντιμετωπίζετε πιο έγκυρες περιπτώσεις | |
5) Μειώστε τις ψευδείς αποτυχίες | |
6) Σαφέστερη αναφορά |
Σε αυτό το σεμινάριο, θα συζητήσουμε Αποφύγετε-και-χειριστείτε προσέγγιση για τις 10 πιο κοινές εξαιρέσεις στο Selenium WebDriver. Πριν από αυτό, ας πάρουμε μια βασική κατανόηση του Exception Handling και του Try / Catch blocks.
Τύποι εξαιρέσεων σε Java και σελήνιο
Παρακάτω έχουμε περιγράψει τους τύπους εξαιρέσεων και τους διαφορετικούς τρόπους με τους οποίους μπορούμε να χρησιμοποιήσουμε το πλαίσιο χειρισμού εξαιρέσεων σε σενάρια σεληνίου.
Υπάρχουν τρία είδη εξαιρέσεων:
- Ελεγμένη εξαίρεση
- Μη επιλεγμένη εξαίρεση
- Λάθος
Η ιεραρχία τάξης εξαίρεσης και σφάλματος:
c ++ απροσδιόριστη αναφορά στη λειτουργία στο αρχείο κεφαλίδας
# 1) Ελεγμένη εξαίρεση: Ο έλεγχος της εξαίρεσης αντιμετωπίζεται κατά τη διάρκεια της μεταγλώττισης και δίνει το σφάλμα σύνταξης εάν δεν το πιάσετε και το χειριστείτε κατά τη διάρκεια της μεταγλώττισης.
Παράδειγμα : FileNotFoundException , IOException και τα λοιπά.
# 2) Μη ελεγμένη εξαίρεση: Σε περίπτωση της μη ελεγμένης εξαίρεσης, ένας μεταγλωττιστής δεν υποχρεούται να χειριστεί. Ο μεταγλωττιστής αγνοεί κατά το χρόνο μεταγλώττισης.
Παράδειγμα : ArrayIndexoutOfBoundException
# 3) Λάθος: Όταν ένα σενάριο είναι θανατηφόρο και το πρόγραμμα δεν μπορεί να ανακτήσει τότε το JVM ρίχνει ένα σφάλμα. Δεν είναι δυνατή η αντιμετώπιση σφαλμάτων από το μπλοκ δοκιμής. Ακόμα κι αν ο χρήστης προσπαθήσει να χειριστεί το σφάλμα χρησιμοποιώντας το Try catch block, δεν μπορεί να ανακτήσει το σφάλμα.
Παράδειγμα : Σφάλμα επιβεβαίωσης , Σφάλμα OutOfMemory και τα λοιπά.
Χειρισμός εξαίρεσης
Δοκιμάστε και πιάστε το μπλοκ:
προσπάθησε να πιάσεις Τα μπλοκ χρησιμοποιούνται γενικά για τον χειρισμό εξαιρέσεων. Ο τύπος εξαιρέσεων δηλώνεται στο μπλοκ αλιευμάτων που αναμένεται να έρθει. Όταν υπάρχει μια εξαίρεση στο μπλοκ δοκιμής, ελέγξτε αμέσως τις κινήσεις για να μπλοκάρει.
Παράδειγμα :
try { br = new BufferedReader(new FileReader('Data')); } catch(IOException ie) { ie.printStackTrace(); }
Μπορεί να υπάρχουν πολλαπλά μπλοκ για μια δοκιμή μπλοκ ανάλογα με τον τύπο εξαίρεσης.
Παράδειγμα :
try { br = new BufferedReader(new FileReader('Data')); } catch(IOException ie) { ie.printStackTrace(); } catch(FileNotFoundException file){ file.printStackTrace(); }
ρίχνει Εξαίρεση:
ρίχνει Η λέξη-κλειδί στο java χρησιμοποιείται για να ρίξει μια εξαίρεση αντί να την χειριστεί. Όλες οι ελεγμένες εξαιρέσεις μπορούν να απορριφθούν με μεθόδους.
Παράδειγμα :
public static void main(String() args) throws IOException { BufferedReader br=new BufferedReader(new FileReader('Data')); while ((line = br.readLine()) != null) { System.out.println(line); } }
τελικά ΟΙΚΟΔΟΜΙΚΟ ΤΕΤΡΑΓΩΝΟ:
τελικά , το μπλοκ εκτελείται ανεξάρτητα από την εκτέλεση του μπλοκ try-catch και εκτελείται αμέσως μετά την ολοκλήρωση του μπλοκ try / catch.
Βασικά κλείσιμο αρχείων, σύνδεση βάσης δεδομένων κ.λπ. μπορεί να κλείσει τελικά στο μπλοκ.
Παράδειγμα :
try { br = new BufferedReader(new FileReader('Data')); } catch(IOException ie) { ie.printStackTrace(); } Finally { br.close(); }
Στο παραπάνω παράδειγμα, BufferReader η ροή είναι κλειστή τελικά. br.κλείσιμο () θα εκτελείται πάντα ανεξάρτητα από την εκτέλεση του μπλοκ δοκιμής και σύλληψης.
Σημείωση : επιτέλους το μπλοκ μπορεί να υπάρχει χωρίς κανένα μπλοκ σύλληψης. Δεν είναι απαραίτητο να έχετε πάντα ένα μπλοκ σύλληψης.
Μπορεί να υπάρχουν πολλά μπλοκ, αλλά μόνο ένα μπλοκ επιτέλους μπορεί να χρησιμοποιηθεί.
Ρίξιμο : Το Throwable είναι μια γονική τάξη για σφάλμα και εξαίρεση. Γενικά, είναι δύσκολο να χειριστείτε λάθη στο java. Εάν ένας προγραμματιστής δεν είναι σίγουρος για τον τύπο σφάλματος και εξαίρεσης, συνιστάται να χρησιμοποιήσετε την κλάση Throwable που μπορεί να εντοπίσει σφάλμα και εξαίρεση.
Παράδειγμα :
try { br = new BufferedReader(new FileReader('Data')); } catch (Throwable t) { t.printStackTrace(); }
Κοινές εξαιρέσεις στο Selenium WebDriver
Το Selenium έχει το δικό του σύνολο εξαιρέσεων. Κατά την ανάπτυξη σεναρίων σεναρίων, ένας προγραμματιστής πρέπει να χειριστεί ή να πετάξει αυτές τις εξαιρέσεις.
Ακολουθούν μερικά παραδείγματα εξαιρέσεων στο σελήνιο:
Όλες οι τάξεις εξαίρεσης χρόνου εκτέλεσης στο Selenium WebDriver εμπίπτουν στο superclass WebDriverException.
Αν και υπάρχουν πολλές κατηγορίες εξαίρεσης στο WebDriverException, συνήθως βλέπουμε τα παρακάτω.
- NoSuchElementException
- NoSuchWindowException
- NoSuchFrameException
- NoAlertPresentException
- Μη έγκυροSelectorException
- ElementNotVisibleException
- ElementNotSelectableException
- TimeoutException
- NoSuchSessionException
- StaleElementReferenceException
Λεπτομέριες :
ElementNotVisibleException : Εάν το σελήνιο προσπαθεί να βρει ένα στοιχείο, αλλά το στοιχείο δεν είναι ορατό στη σελίδα
NoAlertPresentException : Εάν ένας χρήστης προσπαθεί να χειριστεί ένα πλαίσιο ειδοποίησης, αλλά η ειδοποίηση δεν υπάρχει.
NoSuchAttributeException : Ενώ προσπαθείτε να λάβετε την τιμή χαρακτηριστικού, αλλά το χαρακτηριστικό δεν είναι διαθέσιμο στο DOM.
NoSuchElementException : Αυτή η εξαίρεση οφείλεται στην πρόσβαση σε ένα στοιχείο που δεν είναι διαθέσιμο στη σελίδα.
WebDriverException : Η εξαίρεση έρχεται όταν ένας κωδικός δεν μπορεί να προετοιμάσει το WebDriver.
Αποφυγή και χειρισμός κοινών εξαιρέσεων
Ας συζητήσουμε την προσέγγιση 'Αποφυγή και χειρισμός' για τις παραπάνω εξαιρέσεις:
# 1) org.openqa.selenium.NoSuchElementException
Αυτή η κοινώς γνωστή κατηγορία εξαίρεσης είναι μια υποκατηγορία του NotFoundException τάξη. Η εξαίρεση προκύπτει όταν το WebDriver δεν μπορεί να εντοπίσει και να εντοπίσει στοιχεία.
Συνήθως, αυτό συμβαίνει όταν ο ελεγκτής γράφει εσφαλμένο εντοπιστή στοιχείων στη μέθοδο findElement (By, by).
Λάβετε υπόψη ότι στο παρακάτω παράδειγμα, το σωστό αναγνωριστικό για το πεδίο κειμένου ήταν «firstfield», αλλά ο υπεύθυνος δοκιμής το ανέφερε εσφαλμένα ως «fistfield». Σε αυτήν την περίπτωση, το WebDriver δεν μπορεί να εντοπίσει το στοιχείο και org.openqa.selenium.NoSuchElementException θα πετάξει
driver.findElement(By.id('submit')).click(); Exception Handling: try { driver.findElement(By.id('submit')).click(); } catch (NoSuchElementException e)
Σε αυτήν την περίπτωση, η εξαίρεση ρίχνεται ακόμα και αν το στοιχείο δεν έχει φορτωθεί.
Αποφυγή-και-χειρισμός : Δοκιμάστε να δώσετε μια εντολή αναμονής.
Παράδειγμα: Η παρακάτω εντολή αναμονής περιμένει 10 δευτερόλεπτα για την παρουσία στοιχείου ιστού με αναγνωριστικό «υποβολή». Στη συνέχεια προσπαθεί να κάνει κλικ. Εάν το στοιχείο είναι διαθέσιμο αλλά εξακολουθεί να αποτυγχάνει το κλικ, η εξαίρεση έχει παγιδευτεί.
Η χρήση καθυστερημένου χρόνου είναι μια συνήθης πρακτική στον αυτοματοποιημένο έλεγχο για να δημιουργήσετε μια παύση μεταξύ των βημάτων. Προσθέτοντας ένα Try / Catch διασφαλίζουμε ότι το πρόγραμμα συνεχίζεται ακόμη και αν η αναμονή δεν μπορούσε να βοηθήσει.
try { WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); wait.Until(ExpectedConditions.presenceOfElementLocated(By.id('submit'))); try { driver.findElement(By.id('submit')).click(); } catch (WebDriverException e) { System.out.println(“An exceptional case.”); } } catch (TimeOutException e) { System.out.println(“WebDriver couldn’t locate the element”); }
# 2) org.openqa.selenium.NoSuchWindowException
NoSuchWindowException έρχεται κάτω NotFoundException τάξη. Αυτό απορρίπτεται όταν το WebDriver προσπαθεί να μεταβεί σε μη έγκυρο παράθυρο.
Ο παρακάτω κώδικας μπορεί να ρίξει το org.openqa.selenium.NoSuchWindowException εάν η λαβή του παραθύρου δεν υπάρχει ή δεν είναι διαθέσιμη για εναλλαγή.
driver.switchTo (). παράθυρο (χειρολαβή_1);
Αποφυγή-και-χειρισμός : Θα χρησιμοποιούσαμε λαβές παραθύρων για να πάρουμε το σύνολο των ενεργών παραθύρων και στη συνέχεια να εκτελέσουμε ενέργειες στο ίδιο.
Στο παρακάτω παράδειγμα, για κάθε λαβή παραθύρου, εκτελείται ο διακόπτης προγράμματος οδήγησης. Επομένως, οι πιθανότητες να περάσει μια λάθος παράμετρος παραθύρου μειώθηκαν.
for (String handle : driver.getWindowHandles()) { try { driver.switchTo().window(handle); } catch (NoSuchWindowException e) { System.out.println(“An exceptional case”); } }
# 3) org.openqa.selenium.NoSuchFrameException
Όταν το WebDriver προσπαθεί να μεταβεί σε μη έγκυρο καρέ, το NoSuchFrameException κάτω από την τάξη NotFoundException ρίχνεται.
Ο παρακάτω κώδικας μπορεί να ρίξει το org.openqa.selenium.NoSuchFrameException εάν το πλαίσιο 'frame_11' δεν υπάρχει ή δεν είναι διαθέσιμο.
driver.switchTo (). frame ('frame_11');
Χειρισμός εξαίρεσης:
try { driver.switchTo().frame('frame_11'); } catch (NoSuchFrameException e)
Σε αυτήν την περίπτωση, η εξαίρεση ρίχνεται ακόμα και αν το πλαίσιο δεν έχει φορτωθεί.
Αποφυγή-και-χειρισμός : Προσπαθήστε να δώσετε μια εντολή αναμονής.
Στο παρακάτω παράδειγμα, το WebDriver περιμένει 10 δευτερόλεπτα για να είναι διαθέσιμο το πλαίσιο. Εάν το πλαίσιο είναι διαθέσιμο και εξακολουθεί να υπάρχει μια εξαίρεση, τότε πιάστηκε.
try { WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); wait.Until(ExpectedConditions.frameToBeAvaliableAndSwitchToIt(frame_11)); try { driver.switchTo().frame('frame_11'); } catch (WebDriverException e) { System.out.println(“An exceptional case”); } } catch (TimeOutException e) { System.out.println(“WebDriver couldn’t locate the frame”); }
# 4) org.openqa.selenium.NoAlertPresentException
NoAlertPresentException κάτω από NotFoundException ρίχνεται όταν το WebDriver προσπαθεί να μεταβεί σε μια ειδοποίηση, η οποία δεν είναι διαθέσιμη.
org.openqa.selenium.NoAlertPresentException θα πετάξει Εάν κάτω από τον κωδικό αυτοματισμού, οι κλήσεις δέχονται () λειτουργία στην κατηγορία Ειδοποίηση () όταν δεν υπάρχει ακόμη ειδοποίηση στην οθόνη.
driver.switchTo (). alert (). accept ();
Χειρισμός εξαίρεσης:
try { driver.switchTo().alert().accept(); } catch (NoSuchAlertException e)
Σε αυτήν την περίπτωση, η εξαίρεση απορρίπτεται ακόμη και αν η ειδοποίηση δεν φορτωθεί πλήρως.
Αποφυγή-και-χειρισμός : Να χρησιμοποιείτε πάντα ρητή ή άπταιστη αναμονή για συγκεκριμένο χρόνο σε όλες τις περιπτώσεις όπου αναμένεται ειδοποίηση. Εάν η ειδοποίηση είναι διαθέσιμη και εξακολουθεί να υπάρχει μια εξαίρεση, τότε έχει παγιδευτεί.
try { WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); wait.Until(ExpectedConditions.alertIsPresent()); try { driver.switchTo().alert().accept(); } catch (NoAlertPresentException e) { System.out.println(“An exceptional case”); } } catch (TimeOutException e) System.out.println(“WebDriver couldn’t locate the Alert”); }
# 5) org.openqa.selenium.InvalidSelectorException
Αυτή η υποκατηγορία του NoSuchElementException κλάση εμφανίζεται όταν ένας επιλογέας είναι λανθασμένος ή συντακτικός άκυρος. Αυτή η εξαίρεση εμφανίζεται συνήθως όταν χρησιμοποιείται το εργαλείο εντοπισμού XPATH.
Εξετάστε το παρακάτω παράδειγμα:
clickXPathButtonAndWait (“// κουμπί (@ type =’ button ’) (100)”);
Αυτό θα ρίξει ένα InvalidSelectorExeption επειδή η σύνταξη XPATH είναι λανθασμένη.
Αποφυγή και χειρισμός : Για να αποφευχθεί αυτό, θα πρέπει να ελέγξουμε τον εντοπιστή που χρησιμοποιήθηκε επειδή ο εντοπιστής είναι πιθανώς λανθασμένος ή η σύνταξη είναι λανθασμένη. Η χρήση του Firebug για την εύρεση του xpath μπορεί να μειώσει αυτήν την εξαίρεση.
Ο παρακάτω κώδικας δείχνει πώς να το χειριστείτε χρησιμοποιώντας το Try / Catch
try { clickXPathButtonAndWait('//button(@type='button')'); } catch (InvalidSelectorException e) { }
# 6) org.openqa.selenium.ElementNotVisibleException
ElementNotVisibleException τάξη είναι μια υποκατηγορία του ElementNotInteractableException τάξη. Αυτή η εξαίρεση απορρίπτεται όταν το WebDriver προσπαθεί να εκτελέσει μια ενέργεια σε ένα αόρατο στοιχείο ιστού, το οποίο δεν μπορεί να αλληλεπιδράσει. Δηλαδή, το στοιχείο ιστού βρίσκεται σε κρυφή κατάσταση.
Για παράδειγμα, στον παρακάτω κώδικα, εάν ο τύπος κουμπιού με αναγνωριστικό «υποβάλλει» είναι «κρυμμένος» σε HTML, org.openqa.selenium.ElementNotVisibleException θα πετάξει.
driver.findElement(By.id('submit')).click(); Exception Handling: try { driver.findElement(By.id('submit')).click(); } catch (ElementNotVisibleException e)
Σε αυτήν την περίπτωση, η εξαίρεση ρίχνεται ακόμα και αν η σελίδα δεν έχει φορτωθεί πλήρως.
Αποφυγή-και-χειρισμός : Υπάρχουν δύο τρόποι για να το κάνετε αυτό. Μπορούμε είτε να χρησιμοποιήσουμε την αναμονή για να ολοκληρωθεί πλήρως το στοιχείο.
Ο παρακάτω κωδικός περιμένει 10 δευτερόλεπτα για το στοιχείο. Εάν το στοιχείο είναι ορατό και εξακολουθεί να υπάρχει εξαίρεση, θα παγιδευτεί.
try { WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); wait.Until(ExpectedConditions.visibilityOfElementLocated(By.id(”submit”)); try { driver.findElement(By.id('submit')).click(); } catch (WebDriverException e) { System.out.println(“Exceptional case”); } } catch (TimeOutException e) System.out.println(“WebDriver couldn’t find this element visible”); }
# 7) org.openqa.selenium.ElementNotSelectableException
Αυτή η εξαίρεση περιλαμβάνεται Μη έγκυροElementStateException τάξη . ElementNotSelectableException υποδεικνύει ότι το στοιχείο ιστού υπάρχει στην ιστοσελίδα αλλά δεν μπορεί να επιλεγεί.
Για παράδειγμα, Ο παρακάτω κώδικας μπορεί να ρίξει ένα ElementNotSelectableException εάν το αναγνωριστικό 'swift' είναι απενεργοποιημένο.
Επιλέξτε dropdown = νέο Select (driver.findElement (By.id (“swift”)));
Χειρισμός εξαίρεσης:
προσπαθήστε {
Επιλέξτε dropdown = νέο Select (driver.findElement (By.id (“swift”)));
} catch (ElementNotSelectableException ε)
Σε αυτήν την περίπτωση, η εξαίρεση ρίχνεται ακόμα και αν το στοιχείο ενεργοποιηθεί μετά από λίγο.
Αποφυγή-και-χειρισμός : Μπορούμε να προσθέσουμε μια εντολή αναμονής για να περιμένουμε μέχρι να γίνει κλικ στο στοιχείο. Εάν εξακολουθεί να υπάρχει εξαίρεση, έχει παγιδευτεί.
try { WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); wait.Until(ExpectedConditions. elementToBeClickable(By.id(”swift”)); try { Select dropdown = new Select(driver.findElement(By.id('swift'))); } catch (WebDriverException e) { System.out.println(“Exceptional case”); } } catch (TimeOutException e) System.out.println(“WebDriver found that this element was not selectable.”); }
# 8) org.openqa.selenium .TimeoutException
Αυτή η εξαίρεση προκύπτει όταν η ολοκλήρωση μιας εντολής διαρκεί περισσότερο από το χρόνο αναμονής. Οι αναμονές χρησιμοποιούνται κυρίως στο WebDriver για να αποφευχθεί η εξαίρεση ElementNotVisibleException.
Μερικές φορές η δοκιμαστική σελίδα ενδέχεται να μην φορτωθεί πλήρως πριν από την επόμενη εντολή στο πρόγραμμα. Εάν το WebDriver προσπαθεί να βρει ένα στοιχείο στην ιστοσελίδα πριν από τη φόρτωση της σελίδας, τότε εξαιρείται η εξαίρεση ElementNotVisibleException. Για να αποφευχθεί αυτή η εξαίρεση, προστίθενται εντολές.
Ωστόσο, εάν τα στοιχεία δεν φορτώνονται ακόμη και μετά την αναμονή, η εξαίρεση org.openqa.selenium .TimeoutException θα πετάξει.
driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);
driver.get ('https://www.softwaretestinghelp.com');
Στο παραπάνω πρόγραμμα, προστίθεται μια σιωπηρή αναμονή 10 δευτερολέπτων. Εάν η σελίδα www.softwaretestinghelp.com δεν φορτώνεται σε 10 δευτερόλεπτα, τότε το TimeoutException θα πετάξει.
Αποφυγή και χειρισμός : Για να αποφευχθεί αυτό, μπορούμε να ελέγξουμε με μη αυτόματο τρόπο τον μέσο χρόνο φόρτωσης μιας σελίδας και να προσαρμόσουμε την αναμονή
Εναλλακτικά, μπορούμε να προσθέσουμε ρητή αναμονή χρησιμοποιώντας το πρόγραμμα εκτέλεσης JavaScript έως ότου φορτωθεί η σελίδα.
Στο παρακάτω παράδειγμα, χρησιμοποιείται εκτελεστής JavaScript. Μετά την πλοήγηση στη σελίδα, καλούμε το έγγραφο επιστροφής JavaScript. ΉδηΣτάση για 20 δευτερόλεπτα έως ότου επιστραφεί το 'πλήρες'
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30)); wait.until(webDriver -> ((JavascriptExecutor)webDriver).executeScript('return document.readyState').equals('complete')); driver.get('https://www.softwaretestinghelp.com');
# 9) org.openqa.selenium.NoSuchSessionException
Αυτή η εξαίρεση απορρίπτεται όταν καλείται μια μέθοδος μετά την έξοδο από το πρόγραμμα περιήγησης από το WebDriver.quit (). Αυτό μπορεί επίσης να συμβεί λόγω ζητημάτων προγράμματος περιήγησης στο Web, όπως σφάλματα και το WebDriver δεν μπορεί να εκτελέσει καμία εντολή χρησιμοποιώντας την παρουσία προγράμματος οδήγησης.
Για να δείτε αυτήν την εξαίρεση, μπορείτε να εκτελέσετε τον παρακάτω κώδικα.
driver.quit ()
Επιλέξτε dropdown = νέο Select (driver.findElement (By.id (“swift”)));
Αποφυγή και χειρισμός : Να επιλέγετε πάντα την τελευταία σταθερή έκδοση του προγράμματος περιήγησης για να εκτελείτε τις δοκιμαστικές θήκες Selenium Webdriver.
Αυτή η εξαίρεση μπορεί να μειωθεί χρησιμοποιώντας το driver.quit () κατά την ολοκλήρωση όλων των δοκιμών. Μην προσπαθήσετε να τα χρησιμοποιήσετε μετά από κάθε δοκιμαστική περίπτωση. Αυτό μπορεί να οδηγήσει σε προβλήματα όταν η παρουσία προγράμματος οδήγησης είναι μηδενική και οι επερχόμενες δοκιμαστικές περιπτώσεις προσπαθούν να το χρησιμοποιήσουν χωρίς να αρχικοποιηθούν.
Ο παρακάτω κώδικας δημιουργεί μια παρουσία WebDriver στον σχολιασμό @BeforeSuite TestiNG και τον καταστρέφει στον σχολιασμό @AfterSuite TestiNG
@BeforeSuite public void setUp() throws MalformedURLException { WebDriver driver = new FirefoxDriver(); } @AfterSuite public void testDown() { driver.quit(); }
# 10) org.openqa.selenium.StaleElementReferenceException
Αυτή η εξαίρεση λέει ότι ένα στοιχείο ιστού δεν υπάρχει πλέον στην ιστοσελίδα.
Αυτό το σφάλμα δεν είναι το ίδιο με το ElementNotVisibleException.
Το StaleElementReferenceException ρίχνεται όταν ένα αντικείμενο για ένα συγκεκριμένο στοιχείο ιστού δημιουργήθηκε στο πρόγραμμα χωρίς κανένα πρόβλημα και ωστόσο. αυτό το στοιχείο δεν υπάρχει πλέον στο παράθυρο. Αυτό μπορεί να συμβεί εάν υπήρχε
- Πλοήγηση σε άλλη σελίδα
- Το DOM ανανεώθηκε
- Διακόπτης πλαισίου ή παραθύρου
WebElement firstName = driver.findElement (By.id ('όνομα'));
driver.switchTo (). παράθυρο (Child_Window);
element.sendKeys (“Aaron”);
Στον παραπάνω κώδικα, δημιουργήθηκε το αντικείμενο firstName και μετά άλλαξε το παράθυρο. Στη συνέχεια, το WebDriver προσπαθεί να πληκτρολογήσει 'Aaron' στο πεδίο φόρμας. Σε αυτήν την περίπτωση, το StaleElementReferenceException ρίχνεται.
Αποφυγή και χειρισμός : Επιβεβαιώστε ότι προσπαθούμε να κάνουμε την ενέργεια στο σωστό παράθυρο. Για να αποφύγουμε προβλήματα λόγω ανανέωσης DOM, μπορούμε να χρησιμοποιήσουμε το Dynamic Xpath
Ας συζητήσουμε ένα άλλο παράδειγμα.
Πείτε 'id' ενός πεδίου ονόματος χρήστη είναι 'username_1' και το XPath θα είναι // * (@ id = «όνομα πρώτου_1;) . Όταν ανοίξετε ξανά τη σελίδα, το 'id' ενδέχεται να αλλάξει λέγοντας ' 'όνομα _11 ». Σε αυτήν την περίπτωση, ο έλεγχος θα αποτύχει επειδή το WebDriver δεν μπόρεσε να βρει το στοιχείο. Σε αυτήν την περίπτωση, το StaleElementReferenceException θα πετάξει.
Σε αυτήν την περίπτωση, μπορούμε να χρησιμοποιήσουμε ένα δυναμικό xpath όπως,
try { driver.findElement(By.xpath(“//*(contains(@id,firstname’))”)).sendKeys(“Aaron”); } catch (StaleElementReferenceException e)
Στο παραπάνω παράδειγμα χρησιμοποιείται το δυναμικό XPATH και εάν εξακολουθεί να βρίσκεται η εξαίρεση, έχει παγιδευτεί.
συμπέρασμα
Ο χειρισμός εξαίρεσης είναι το βασικό μέρος κάθε προγράμματος java καθώς και σεναρίου σεληνίου. Μπορούμε να δημιουργήσουμε έναν ισχυρό και βέλτιστο κώδικα έως χειρισμός μιας εξαίρεσης με έξυπνους τρόπους . Και είναι επίσης μια βέλτιστη πρακτική να χειρίζεστε εξαιρέσεις σε ένα σενάριο που θα σας παρέχει μια καλύτερη αναφορά όταν ένα πρόγραμμα αποτυγχάνει για οποιονδήποτε λόγο.
Εδώ προσπαθήσαμε να καλύψουμε τη διαδικασία και το πλαίσιο του χειρισμού εξαιρέσεων που απαιτείται να εφαρμοστεί σε σενάρια σεληνίου.
Να θυμάστε ότι δεν είναι υποχρεωτικό να χειρίζεστε πάντα την εξαίρεση στο α προσπάθησε να πιάσεις ΟΙΚΟΔΟΜΙΚΟ ΤΕΤΡΑΓΩΝΟ. Μπορείτε επίσης να ρίξετε μια εξαίρεση ανάλογα με την απαίτηση σε ένα σενάριο.
Μια εξαίρεση δεν πρέπει να αγνοείται καθώς διακόπτουν την εκτέλεση του προγράμματος. Σε αυτό το σεμινάριο, περάσαμε από διαφορετικές εξαιρέσεις και τρόπους για να μειώσουμε τις πιθανότητες να τις κάνουμε μέσω μη αυτόματων ελέγχων και κωδικών.
Η προσθήκη αναμονών μπορεί να ελέγξει ορισμένες περιπτώσεις όπως «NoSuchElementException», «ElementNotFoundException», «ElementNotVisibleException».
Επόμενο σεμινάριο # 20 : Στο επερχόμενο σεμινάριο, θα συζητήσουμε το διατίθενται διάφοροι τύποι πλαισίων δοκιμών . Θα μελετήσαμε επίσης τα πλεονεκτήματα και τα μειονεκτήματα της χρήσης μιας εκτεταμένης προσέγγισης πλαισίου σε δοκιμές αυτοματισμού. Θα συζητούσαμε λεπτομερώς για το πλαίσιο βάσει δεδομένων δοκιμής.
Δημοσιεύστε τα ερωτήματά σας, που σχετίζονται με την εξαίρεση χειρισμού στο Selenium WebDriver, εάν έχετε.
Συνιστώμενη ανάγνωση
- Εξαιρέσεις Java και χειρισμός εξαιρέσεων με παραδείγματα
- Τρόπος χειρισμού ειδοποιήσεων / αναδυόμενων παραθύρων στο Selenium WebDriver - Selenium Tutorial # 16
- AutoIt Tutorial - Αυτόματη λήψη, εγκατάσταση και βασικό σενάριο AutoIt
- Cucumber Selenium Tutorial: Αγγούρι Java Selenium WebDriver Integration
- Ενσωμάτωση σεληνίου με JMeter
- Εισαγωγή στο Selenium WebDriver - Selenium Tutorial # 8
- 30+ καλύτερα σεμινάρια σεληνίου: Μάθετε το σελήνιο με πραγματικά παραδείγματα
- Ευκαιρία εργασίας μερικής απασχόλησης για ειδικούς σεληνίου