implicit explicit wait selenium webdriver
Μάθετε έμμεση και ρητή αναμονή στο Selenium WebDriver:
Στο προηγούμενο σεμινάριο, προσπαθήσαμε να σας εξοικειώσουμε με τα διάφορα Λειτουργίες βρόχου και υπό όρους WebDriver . Αυτές οι μέθοδοι υπό όρους συχνά αφορούν σχεδόν όλους τους τύπους επιλογών ορατότητας για στοιχεία ιστού.
Προχωρώντας σε αυτό δωρεάν σειρά προπόνησης Selenium , θα συζητήσουμε διαφορετικοί τύποι αναμονής που παρέχονται από το Selenium WebDriver . Θα συζητήσουμε επίσης για το v διάφοροι τύποι επιλογών πλοήγησης διαθέσιμο στο WebDriver.
Οι αναμονές βοηθούν τον χρήστη να αντιμετωπίσει προβλήματα ενώ ανακατευθύνει σε διαφορετικές ιστοσελίδες ανανεώνοντας ολόκληρη την ιστοσελίδα και φορτώνοντας ξανά τη νέα στοιχεία ιστού. Μερικές φορές μπορεί να υπάρχουν και κλήσεις Ajax. Έτσι, μπορεί να παρατηρηθεί μια χρονική υστέρηση κατά τη φόρτωση των ιστοσελίδων και να αντικατοπτρίζει τα στοιχεία του ιστού.
Συχνά, οι χρήστες βρίσκονται στην περιήγηση σε διάφορες ιστοσελίδες. Έτσι, εντολές / μέθοδοι πλοήγησης () που παρέχονται από το WebDriver βοηθά το χρήστη να προσομοιώσει τα σενάρια σε πραγματικό χρόνο, μεταβαίνοντας στις ιστοσελίδες με αναφορά στο ιστορικό του προγράμματος περιήγησης.
Το WebDriver εξοπλίζει τον χρήστη με δύο γονίδια αναμονής για να χειριστεί την επαναλαμβανόμενη φόρτωση σελίδας s, φόρτωση στοιχείων ιστού, εμφάνιση παραθύρων, αναδυόμενα μηνύματα και μηνύματα σφάλματος και αντανάκλαση στοιχείων ιστού στην ιστοσελίδα.
- Σιωπηρή αναμονή
- Άμεση αναμονή
Ας συζητήσουμε καθένα από αυτά λεπτομερώς λαμβάνοντας υπόψη την πρακτική προσέγγιση.
Τι θα μάθετε:
- WebDriver Implicit Wait
- WebDriver Explicit Wait
- Αναμενόμενη κατάσταση
- Πλοήγηση με χρήση WebDriver
- συμπέρασμα
- Συνιστώμενη ανάγνωση
WebDriver Implicit Wait
Οι έμμεσες αναμονές χρησιμοποιούνται για να παρέχουν έναν προεπιλεγμένο χρόνο αναμονής (ας πούμε 30 δευτερόλεπτα) μεταξύ κάθε διαδοχικού βήματος / εντολής σε ολόκληρο το σενάριο δοκιμής. Έτσι, το επόμενο βήμα δοκιμής θα εκτελεστεί μόνο όταν έχουν παρέλθει τα 30 δευτερόλεπτα μετά την εκτέλεση του προηγούμενου βήματος / εντολής δοκιμής.
Βασικές σημειώσεις
- Η σιωπηρή αναμονή είναι μία γραμμή κώδικα και μπορεί να δηλωθεί στη μέθοδο ρύθμισης του δοκιμαστικού σεναρίου.
- Σε σύγκριση με τη ρητή αναμονή, η έμμεση αναμονή είναι διαφανής και απλή. Η σύνταξη και η προσέγγιση είναι απλούστερες από τη ρητή αναμονή.
Όντας εύκολο και απλό στην εφαρμογή, η σιωπηρή αναμονή εισάγει και μερικά μειονεκτήματα. Δίνει τον χρόνο εκτέλεσης της δοκιμαστικής δέσμης ενεργειών, καθώς κάθε εντολή θα σταματήσει να περιμένει ένα καθορισμένο χρονικό διάστημα πριν συνεχίσει την εκτέλεση.
Έτσι, για να αντιμετωπιστεί αυτό το ζήτημα, το WebDriver εισάγει τις ρητές αναμονές όπου μπορούμε να εφαρμόσουμε ρητά τις αναμονές όποτε προκύψει η κατάσταση αντί να περιμένουμε δυναμικά κατά την εκτέλεση κάθε βήματος δοκιμής.
Εισαγωγικές δηλώσεις
εισαγωγή java.util.concurrent.TimeUnit - Για να έχουμε πρόσβαση και να εφαρμόζουμε σιωπηρή αναμονή στα σενάρια δοκιμής μας, είμαστε υποχρεωμένοι να εισαγάγουμε αυτό το πακέτο στο δοκιμαστικό σενάριό μας.
Σύνταξη
drv .manage (). timeouts (). implicitly Περιμένετε (10, TimeUnit. ΔΕΥΤΕΡΟΤΑ );
Συμπεριλάβετε την παραπάνω γραμμή κώδικα στο δοκιμαστικό σενάριό σας αμέσως μετά την εμφάνιση της μεταβλητής παρουσίας WebDriver. Έτσι, αυτό είναι το μόνο που απαιτείται για να ρυθμίσετε μια σιωπηρή αναμονή στο δοκιμαστικό σας σενάριο.
Περιήγηση κώδικα
Η σιωπηρή αναμονή υποχρεώνει να περάσει δύο τιμές ως παραμέτρους. Το πρώτο όρισμα δείχνει τον χρόνο στα αριθμητικά ψηφία που πρέπει να περιμένει το σύστημα. Το δεύτερο όρισμα δείχνει την κλίμακα μέτρησης του χρόνου. Έτσι, στον παραπάνω κώδικα, έχουμε αναφέρει τα '30' δευτερόλεπτα ως προεπιλεγμένο χρόνο αναμονής και η μονάδα ώρας έχει οριστεί σε 'δευτερόλεπτα'.
WebDriver Explicit Wait
Οι ρητές αναμονές χρησιμοποιούνται για να σταματήσουν την εκτέλεση μέχρι τη στιγμή που πληρούται μια συγκεκριμένη συνθήκη ή έχει παρέλθει ο μέγιστος χρόνος. Σε αντίθεση με τις σιωπηρές αναμονές, οι ρητές αναμονές εφαρμόζονται μόνο για μια συγκεκριμένη παρουσία.
Το WebDriver εισάγει μαθήματα όπως το WebDriverWait και το ExpectedConditions για την επιβολή του Explicit αναμονή στα δοκιμαστικά σενάρια. Στο πλαίσιο αυτής της συζήτησης, θα χρησιμοποιήσουμε το 'gmail.com' ως δείγμα.
Σενάριο που θα αυτοματοποιηθεί
- Εκκινήστε το πρόγραμμα περιήγησης ιστού και ανοίξτε το 'gmail.com'
- Εισαγάγετε ένα έγκυρο όνομα χρήστη
- Εισαγάγετε έναν έγκυρο κωδικό πρόσβασης
- Κάντε κλικ στο κουμπί σύνδεσης
- Περιμένετε να είναι ορατό το κουμπί Σύνταξη μετά τη φόρτωση της σελίδας
Κωδικός WebDriver χρησιμοποιώντας ρητή αναμονή
Σημειώστε ότι για τη δημιουργία σεναρίων, θα χρησιμοποιούσαμε το έργο 'Learning_Selenium' που δημιουργήθηκε στα προηγούμενα σεμινάρια.
Βήμα 1 : Δημιουργήστε μια νέα τάξη java που ονομάζεται 'Wait_Demonstration' στο έργο 'Learning_Selenium'.
Βήμα 2 : Αντιγράψτε και επικολλήστε τον παρακάτω κώδικα στην τάξη 'Wait_Demonstration.java'.
Παρακάτω είναι το σενάριο δοκιμής που είναι ισοδύναμο με το παραπάνω σενάριο.
import static org.junit.Assert.*; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; public class Wait_Demonstration { // created reference variable for WebDriver WebDriver drv; @Before public void setup() throws InterruptedException { // initializing drv variable using FirefoxDriver drv=new FirefoxDriver(); // launching gmail.com on the browser drv.get('https://gmail.com'); // maximized the browser window drv.manage().window().maximize(); drv.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } @Test public void test() throws InterruptedException { // saving the GUI element reference into a 'username' variable of WebElement type WebElement username = drv.findElement(By.id('Email')); // entering username username.sendKeys('shruti.shrivastava.in'); // entering password drv.findElement(By.id('Passwd')).sendKeys('password'); // clicking signin button drv.findElement(By.id('signIn')).click(); // explicit wait - to wait for the compose button to be click-able WebDriverWait wait = new WebDriverWait(drv,30); wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath('//div(contains(text(),'COMPOSE'))'))); // click on the compose button as soon as the 'compose' button is visible drv.findElement(By.xpath('//div(contains(text(),'COMPOSE'))')).click(); } @After public void teardown() { // closes all the browser windows opened by web driver drv.quit(); } }
Εισαγωγικές δηλώσεις
- εισαγωγή οργ. openqa.selenium.support.ui.ExpectedConditions
- εισαγωγή οργ. openqa.selenium.support.ui.WebDriverWait
- Εισαγωγή παραπάνω πακέτων πριν από τη δημιουργία σεναρίου. Τα πακέτα αναφέρονται στην κατηγορία Select που απαιτείται για τον χειρισμό του αναπτυσσόμενου μενού.
Αντίσταση αντικειμένων για κλάση WebDriverWait
WebDriverWait wait = νέος WebDriverWait ( Δρβ , 30);
Δημιουργούμε μια μεταβλητή αναφοράς 'αναμονή' για την κλάση WebDriverWait και την εγκαθιστούμε χρησιμοποιώντας την παρουσία WebDriver και τον μέγιστο χρόνο αναμονής για την απολύση της εκτέλεσης. Ο μέγιστος χρόνος αναμονής που αναφέρεται μετράται σε 'δευτερόλεπτα'.
Το Instantation του WebDriver συζητήθηκε στα αρχικά σεμινάρια του WebDriver.
Αναμενόμενη κατάσταση
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath('//div(contains(text(),'COMPOSE'))'))); drv.findElement(By.xpath('//div(contains(text(),'COMPOSE'))')).click();
Η παραπάνω εντολή περιμένει ένα καθορισμένο χρονικό διάστημα ή μια αναμενόμενη κατάσταση που θα συμβεί όποιο συμβεί ή παρέλθει πρώτα.
Έτσι, για να μπορέσουμε να το κάνουμε αυτό, χρησιμοποιούμε τη μεταβλητή αναφοράς «αναμονή» της κλάσης WebDriverWait που δημιουργήθηκε στο προηγούμενο βήμα με την κατηγορία ExpectedConditions και μια πραγματική κατάσταση που αναμένεται να συμβεί. Επομένως, μόλις προκύψει η αναμενόμενη κατάσταση, ο έλεγχος του προγράμματος θα μετακινηθεί στο επόμενο βήμα εκτέλεσης αντί να περιμένει δυνατά για ολόκληρα τα 30 δευτερόλεπτα.
Στο δείγμα μας, περιμένουμε να εμφανιστεί το κουμπί 'σύνταξη' και να φορτωθεί ως μέρος της φόρτωσης της αρχικής σελίδας και έτσι, στη συνέχεια, προχωράμε κάνοντας κλικ στην εντολή κλικ στο κουμπί 'σύνταξη'.
Τύποι αναμενόμενων συνθηκών
Η κατηγορία ExpectedConditions παρέχει μια μεγάλη βοήθεια για την αντιμετώπιση σεναρίων όπου πρέπει να βεβαιωθούμε για μια κατάσταση πριν από την εκτέλεση του πραγματικού βήματος δοκιμής.
Η κατηγορία ExpectedConditions συνοδεύεται από ένα ευρύ φάσμα αναμενόμενων συνθηκών στις οποίες μπορείτε να έχετε πρόσβαση με τη βοήθεια της μεταβλητής αναφοράς WebDriverWait και μέχρι τη μέθοδο ().
Ας συζητήσουμε μερικά από αυτά:
# 1) elementToBeClickable () - Η αναμενόμενη κατάσταση περιμένει ένα στοιχείο με δυνατότητα κλικ, δηλαδή θα πρέπει να υπάρχει / να εμφανίζεται / να είναι ορατό στην οθόνη καθώς και να είναι ενεργοποιημένο.
Δείγμα κώδικα
wait.until (ExpectedConditions.elementToBeClickable (Από.xpath ( '// div (περιέχει (κείμενο (),' ΣΥΝΘΕΣΗ '))' )))
# 2) textToBePresentInElement () - Η αναμενόμενη συνθήκη περιμένει ένα στοιχείο που έχει ένα συγκεκριμένο μοτίβο συμβολοσειράς.
Δείγμα κώδικα
wait.until (ExpectedConditions.textToBePresentInElement (Από.xpath ( '// div (@ id = 'forgetPass''), 'κείμενο που θα βρεθεί' ))
πώς να χρησιμοποιήσετε ένα αρχείο βάζου
# 3) alertIsPresent () - Η αναμενόμενη συνθήκη περιμένει να εμφανιστεί ένα πλαίσιο ειδοποίησης.
Δείγμα κώδικα
wait.until (ExpectedConditions.alertIsPresent ())! = null);
# 4) τίτλοςIs () - Η αναμενόμενη συνθήκη περιμένει μια σελίδα με συγκεκριμένο τίτλο.
Δείγμα κώδικα
wait.until (ExpectedConditions.titleIs () 'Gmail' ))
# 5) frameToBeAvailableAndSwitchToIt () - Η αναμενόμενη κατάσταση περιμένει ένα πλαίσιο και στη συνέχεια, μόλις το πλαίσιο είναι διαθέσιμο, το χειριστήριο μεταβαίνει σε αυτό αυτόματα.
Δείγμα κώδικα
wait.until (ExpectedConditions.frameToBeAvailableAndSwitchToIt (Από το.id νέο πλαίσιο ')));
Υπάρχει μια πολύ συνηθισμένη ενέργεια χρήστη όπου ο χρήστης κάνει κλικ στα κουμπιά πίσω και εμπρός του προγράμματος περιήγησης ιστού για να περιηγηθεί στις διάφορες ιστοσελίδες που επισκέφτηκαν κατά την τρέχουσα περίοδο σύνδεσης στο ιστορικό του προγράμματος περιήγησης. Έτσι, για την προσομοίωση τέτοιων ενεργειών που εκτελούνται από τους χρήστες, το WebDriver εισάγει εντολές Navigate.
Ας εξετάσουμε λεπτομερώς αυτές τις εντολές:
# 1) πλοήγηση (). Πίσω ()
Αυτή η εντολή επιτρέπει στο χρήστη να πλοηγηθεί στην προηγούμενη ιστοσελίδα.
Δείγμα κώδικα:
driver.navigate (). πίσω ();
Η παραπάνω εντολή δεν απαιτεί παραμέτρους και επαναφέρει τον χρήστη στην προηγούμενη ιστοσελίδα στο ιστορικό του προγράμματος περιήγησης ιστού.
# 2) πλοήγηση () προς τα εμπρός ()
Αυτή η εντολή επιτρέπει στο χρήστη να πλοηγηθεί στην επόμενη ιστοσελίδα με αναφορά στο ιστορικό του προγράμματος περιήγησης.
Δείγμα κώδικα:
driver.navigate (). μπροστά ();
Η παραπάνω εντολή δεν απαιτεί παραμέτρους και προωθεί τον χρήστη στην επόμενη ιστοσελίδα στο ιστορικό του προγράμματος περιήγησης ιστού.
# 3) πλοήγηση (). Ανανέωση ()
Αυτή η εντολή επιτρέπει στον χρήστη να ανανεώσει την τρέχουσα ιστοσελίδα φορτώνοντας έτσι όλα τα στοιχεία ιστού.
Δείγμα κώδικα:
driver.navigate (). refresh ();
Η παραπάνω εντολή δεν απαιτεί παραμέτρους και φορτώνει ξανά την ιστοσελίδα.
# 4) πλοήγηση (). Έως ()
Αυτή η εντολή επιτρέπει στο χρήστη να ξεκινήσει ένα νέο παράθυρο του προγράμματος περιήγησης ιστού και να πλοηγηθεί στην καθορισμένη διεύθυνση URL.
Δείγμα κώδικα:
driver.navigate (). to ('http://google.com');
Η παραπάνω εντολή απαιτεί μια διεύθυνση URL ιστού ως παράμετρο και στη συνέχεια ανοίγει την καθορισμένη διεύθυνση URL σε ένα πρόγραμμα περιήγησης ιστού που ξεκίνησε πρόσφατα.
συμπέρασμα
Σε αυτό Σιωπηρή και ρητή αναμονή στο σεμινάριο του Selenium WebDriver , προσπαθήσαμε να σας εξοικειώσουμε με τις αναμονές του WebDriver. Συζητήσαμε και ασκήσαμε τόσο τις ρητές όσο και τις σιωπηρές αναμονές. Ταυτόχρονα, συζητήσαμε επίσης τις διάφορες εντολές πλοήγησης.
Ακολουθούν οι βασικές αρχές αυτού του άρθρου:
- Το WebDriver επιτρέπει στο χρήστη να επιλέξει ανάμεσα στις διαθέσιμες αναμονές για να χειριστεί καταστάσεις όπου η ροή εκτέλεσης μπορεί να απαιτεί αναστολή λειτουργίας για λίγα δευτερόλεπτα προκειμένου να φορτώσει τα στοιχεία ιστού ή να ικανοποιήσει μια συγκεκριμένη συνθήκη. Υπάρχουν δύο τύποι αναμονών στο WebDriver.
- Σιωπηρή αναμονή
- Άμεση αναμονή
- Σιωπηρά περιμένει χρησιμοποιούνται για την παροχή ενός προεπιλεγμένου χρόνου αναμονής μεταξύ κάθε διαδοχικού βήματος / εντολής δοκιμής σε ολόκληρο το σενάριο δοκιμής. Έτσι, το επόμενο βήμα δοκιμής θα εκτελεστεί μόνο όταν έχει παρέλθει το καθορισμένο χρονικό διάστημα μετά την εκτέλεση του προηγούμενου βήματος / εντολής δοκιμής.
- Αναμφίβολα περιμένει χρησιμοποιούνται για να σταματήσουν την εκτέλεση έως ότου ικανοποιηθεί μια συγκεκριμένη συνθήκη ή έχει παρέλθει ο μέγιστος χρόνος. Σε αντίθεση με τις σιωπηρές αναμονές, οι ρητές αναμονές εφαρμόζονται μόνο για μια συγκεκριμένη παρουσία.
- Το WebDriver εισάγει μαθήματα όπως το WebDriverWait και το ExpectedConditions για την επιβολή της ρητής αναμονής
- Αναμενόμενες συνθήκες Το μάθημα παρέχει μια μεγάλη βοήθεια για την αντιμετώπιση σεναρίων όπου πρέπει να βεβαιωθούμε για μια κατάσταση πριν από την εκτέλεση του πραγματικού βήματος δοκιμής.
- Η κατηγορία ExpectedConditions συνοδεύεται από ένα ευρύ φάσμα αναμενόμενων συνθηκών στις οποίες μπορείτε να έχετε πρόσβαση με τη βοήθεια της μεταβλητής αναφοράς WebDriverWait και μέχρι τη μέθοδο ().
- Περιηγηθείτε στις μεθόδους () / εντολές χρησιμοποιούνται για την προσομοίωση της συμπεριφοράς του χρήστη κατά την πλοήγηση μεταξύ διαφόρων ιστοσελίδων εμπρός και πίσω.
Επόμενο σεμινάριο # 16 : Ερχόμενοι στον επόμενο οδηγό στη λίστα, θα κάνουμε τους χρήστες εξοικειωμένους με διάφορους τύπους ειδοποιήσεων που ενδέχεται να εμφανίζονται κατά την πρόσβαση σε ιστότοπους και τις προσεγγίσεις χειρισμού τους στο WebDriver. Οι τύποι ειδοποιήσεων στους οποίους θα επικεντρωθούμε είναι κυρίως - αναδυόμενα παράθυρα ειδοποιήσεων βάσει παραθύρων και αναδυόμενα παράθυρα ειδοποίησης βάσει ιστού. Όπως γνωρίζουμε ότι ο χειρισμός αναδυόμενων παραθύρων που βασίζεται σε παράθυρα είναι πέρα από τις δυνατότητες του WebDriver, έτσι θα ασκήσουμε επίσης κάποια βοηθητικά προγράμματα τρίτων για τη διαχείριση των αναδυόμενων παραθύρων.
Σημείωση για τους αναγνώστες : Μέχρι τότε, οι αναγνώστες μπορούν να αυτοματοποιήσουν τα σενάρια με διάφορες φορτώσεις σελίδων και δυναμικά στοιχεία που εμφανίζονται στην οθόνη χρησιμοποιώντας τις διάφορες αναμενόμενες συνθήκες και εντολές πλοήγησης.
Συνιστώμενη ανάγνωση
- Cucumber Selenium Tutorial: Αγγούρι Java Selenium WebDriver Integration
- Εισαγωγή στο Selenium WebDriver - Selenium Tutorial # 8
- Υλοποίηση του πρώτου μας σεναρίου WebDriver - Selenium WebDriver Tutorial # 10
- Συχνές ερωτήσεις για το σελήνιο
- Τρόπος χειρισμού ειδοποιήσεων / αναδυόμενων παραθύρων στο Selenium WebDriver - Selenium Tutorial # 16
- Οδηγός για τη δημιουργία εκτεταμένων αναφορών στο Selenium WebDriver
- Πώς να εκτελέσετε το Selenium WebDriver σε διαφορετικά δημοφιλή προγράμματα περιήγησης
- WebDriver Ολόκληρη εγκατάσταση και εγκατάσταση με Eclipse - Selenium Tutorial # 9