Ανανέωση σελίδας χρησιμοποιώντας Selenium Πρόγραμμα οδήγησης Web
⚡ Έξυπνη Σύνοψη
Ανανέωση σελίδας σε Selenium Το WebDriver επαναφορτώνει το τρέχον URL έτσι ώστε κάθε στοιχείο να αποδίδεται πριν από την εκτέλεση των ισχυρισμών και το πλαίσιο προσφέρει πέντε ξεχωριστές εντολές που επιτυγχάνουν την ίδια επαναφόρτωση με διαφορετικούς τρόπους.

Κατά τη διάρκεια της αυτοματοποίησης δοκιμών μιας διαδικτυακής εφαρμογής, προκύπτει η ανάγκη η σελίδα να ανανεωθεί πολλές φορές για να φορτωθούν πλήρως όλα τα στοιχεία ιστού. Κατά την αρχική φόρτωση της σελίδας ενδέχεται να φορτωθούν ορισμένα στοιχεία ιστού, ενώ χρειάζεται μια δεύτερη ανανέωση σελίδας για να εμφανιστούν όλα. Αυτό μπορεί να γίνει χρησιμοποιώντας την εντολή ανανέωσης που παρέχεται από Selenium WebDriver.
Πώς να ανανεώσετε τη σελίδα Selenium
Η λειτουργία ανανέωσης προγράμματος περιήγησης μπορεί να πραγματοποιηθεί χρησιμοποιώντας τους ακόλουθους τρόπους Selenium. Θα συζητήσουμε λεπτομερώς τους παρακάτω τρόπους που αναφέρονται σε όλο το άρθρο.
- εντολή driver.navigate().refresh()
- Λήψη μεθόδου
- Εντολή αποστολής κλειδιών
- Μέθοδος πλοήγησης
- εντολή driver.navigate().to()
1) Εντολή driver.navigate().refresh()
Αυτή είναι η ενσωματωμένη μέθοδος για την εκτέλεση μιας λειτουργίας ανανέωσης σελίδας που παρέχεται από Selenium WebDriver. Αυτή η εντολή είναι η πιο συχνά χρησιμοποιούμενη εντολή σε όλο τον αυτοματισμό δοκιμών για την εκτέλεση μιας λειτουργίας ανανέωσης σελίδας. Η εντολή ανανέωσης μπορεί να χρησιμοποιηθεί με έναν απλό τρόπο όπως αναφέρεται παρακάτω.
driver.get("https://demo.guru99.com/selenium/guru99home/");
driver.navigate().refresh();
Η πλοήγηση είναι μια διεπαφή που χρησιμοποιείται για την εκτέλεση διαφόρων λειτουργιών του προγράμματος περιήγησης, όπως πλοήγηση στην προηγούμενη σελίδα, πλοήγηση στην επόμενη σελίδα, ανανέωση σελίδας και κλείσιμο προγράμματος περιήγησης. Η πρόσβαση στις μεθόδους διεπαφής πλοήγησης είναι δυνατή χρησιμοποιώντας την εντολή driver.navigate(). Η μέθοδος ανανέωσης της διεπαφής πλοήγησης δεν δέχεται ορίσματα και δεν επιστρέφει καμία τιμή.
Παράδειγμα:
Σενάριο δοκιμής:
- Ανοίξτε το πρόγραμμα περιήγησης Chrome με την ιστοσελίδα https://demo.guru99.com/selenium/guru99home/
- Μόλις η σελίδα φορτωθεί με επιτυχία, ανανεώστε την ιστοσελίδα χρησιμοποιώντας τη μέθοδο driver.navigate().refresh()
- Κλείστε το πρόγραμμα περιήγησης χρησιμοποιώντας τη μέθοδο driver.close()
Code
package Guru99Demo; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class RefreshDemo { public static void main(String args[]) throws InterruptedException { System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/selenium/guru99home/"); driver.manage().window().maximize(); driver.navigate().refresh(); driver.close(); } }
⚠️ Σημείωση έκδοσης: Selenium Ο διευθυντής έστειλε Selenium 4.6 και κατεβάζει αυτόματα το αντίστοιχο πρόγραμμα οδήγησης του προγράμματος περιήγησης, επομένως η γραμμή System.setProperty παραπάνω δεν απαιτείται πλέον σε μια τρέχουσα έκδοση — new ChromeDriver() είναι αρκετό. Η αρχική γραμμή διατηρείται επειδή εξακολουθεί να είναι σωστή για το Selenium Ρύθμιση στυλ 3 με βάση την οποία γράφτηκε το παράδειγμα.
Code Παραγωγή:
Στην αρχική σελίδα, φορτώστε την αρχική σελίδα επίδειξης που εμφανίζεται όπως φαίνεται παρακάτω.
Μετά την ανανέωση της σελίδας, το βίντεο στη σελίδα έχει αλλάξει, γεγονός που επιβεβαιώνει ότι η επαναφόρτωση όντως πραγματοποιήθηκε.
Πολλοί άλλοι τρόποι ανανέωσης μιας σελίδας
Η μέθοδος ανανέωσης δεν είναι η μόνη οδός για επαναφόρτωση. Οι τέσσερις τεχνικές που ακολουθούν παράγουν το ίδιο αποτέλεσμα και αξίζει να τις γνωρίζετε, επειδή μια κλειδωμένη εφαρμογή ή ένα επίμονο πρόγραμμα περιήγησης περιστασιακά μπλοκάρει μία από αυτές.
2) Λήψη μεθόδου
Η μέθοδος get μπορεί να χρησιμοποιηθεί με αναδρομικό τρόπο για την ανανέωση μιας σελίδας. Για να το πετύχουμε αυτό, πρέπει να περάσουμε μια άλλη μέθοδο ως όρισμα στη μέθοδο get.
Παράδειγμα:
driver.get("https://www.guru99.com");
driver.get(driver.getCurrentUrl());
3) Μέθοδος πλοήγησης
Αυτή η μέθοδος χρησιμοποιεί την ίδια έννοια αναδρομής όπως αναφέρθηκε παραπάνω. Η μέθοδος getCurrentUrl() διαβιβάζεται ως όρισμα στη μέθοδο driver.navigate().to().
Παράδειγμα:
driver.get("https://www.guru99.com");
driver.navigate().to(driver.getCurrentUrl());
4) Μέθοδος αποστολής κλειδιών χρησιμοποιώντας το πλήκτρο F5
Αυτή είναι η δεύτερη πιο συχνά χρησιμοποιούμενη μέθοδος για την ανανέωση μιας σελίδας SeleniumΔέχεται το κλειδί ανανέωσης (F5) ως όρισμα στη μέθοδο sendKeys. Δεδομένου ότι η sendKeys λειτουργεί μόνο σε στοιχεία ιστού και όχι στο πρόγραμμα περιήγησης, πρέπει πρώτα να εντοπίσουμε ένα έγκυρο στοιχείο ιστού στην ιστοσελίδα και στη συνέχεια να χρησιμοποιήσουμε τη μέθοδο sendKeys. Αυτό μπορεί να επιτευχθεί όπως φαίνεται παρακάτω.
Παράδειγμα:
driver.get("https://www.guru99.com"); driver.findElement(By.id("username")).sendKeys(Keys.F5);
Επειδή το πάτημα πλήκτρου παραδίδεται σε ένα στοιχείο και όχι στο πρόγραμμα περιήγησης Chrome, αυτή η διαδρομή εξαρτάται από το στοιχείο που διατηρεί την εστίαση. Εάν το τοποθετών ταιριάζει με ένα πεδίο που δεν μπορεί να εστιάσει, το κλειδί καταπίνεται και η σελίδα δεν φορτώνει ποτέ ξανά.
5) Μέθοδος αποστολής κλειδιών χρησιμοποιώντας ASCII Code
Αυτή η μέθοδος χρησιμοποιεί την ίδια ιδέα με την παραπάνω, αλλά αντί να μεταβιβάσουμε το πλήκτρο F5 ως όρισμα, στέλνουμε το σημείο κώδικα του κλειδιού ανανέωσης ως όρισμα. Αυτό μπορεί να επιτευχθεί όπως φαίνεται παρακάτω.
driver.get("https://www.guru99.com"); driver.findElement(By.id("username")).sendKeys("\uE035");
Η τιμή \uE035 είναι το σημείο κώδικα Unicode του WebDriver που το πρωτόκολλο αντιστοιχίζει στο F5, επομένως αυτό το τμήμα κώδικα και το προηγούμενο είναι ισοδύναμα.
Πώς να ανανεώσετε μια σελίδα χρησιμοποιώντας JavaScriptExecutor
Κάθε πρόγραμμα περιήγησης εκθέτει μια συνάρτηση επαναφόρτωσης σε σενάρια σελίδας και Selenium μπορεί να το καλέσει μέσω του JavascriptΔιεπαφή Executor. Αυτή είναι η συνηθισμένη εφεδρική λειτουργία όταν η εντολή ανανέωσης WebDriver παρεμποδίζεται από την εφαρμογή ή από μια επέκταση του προγράμματος περιήγησης.
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("location.reload();");
Αξίζει να θυμηθούμε δύο παραλλαγές:
- τοποθεσία.reload() εκτελεί μια κανονική επαναφόρτωση και ενδέχεται να εμφανίσει τη σελίδα από την προσωρινή μνήμη.
- ιστορία.go(0) είναι ένα παλαιότερο ισοδύναμο που εξακολουθούν να χρησιμοποιούν ορισμένες παλαιότερες σουίτες.
Η διαδρομή του executor εκτελείται μέσα στη σελίδα, επομένως δεν περιμένει το νέο έγγραφο από μόνη της. Ακολουθήστε την με μια σαφή αναμονή ακριβώς όπως θα κάνατε μετά την driver.navigate().refresh() και να θυμάστε ότι μια επαναφόρτωση που βασίζεται σε σενάριο δεν θα καθαρίσει ένα παράθυρο διαλόγου σε επίπεδο προγράμματος περιήγησης. Εάν η εφαρμογή υπό δοκιμή φορτώσει το περιεχόμενό της ασύγχρονα, ισχύει η ίδια προσοχή όπως όταν χειρισμός κλήσεων AJAX σε Selenium Πρόγραμμα οδήγησης Web.
Πώς να αποφύγετε το StaleElementReferenceException μετά από μια ανανέωση
Μια ανανέωση καταστρέφει το τρέχον DOM και δημιουργεί ένα νέο. Κάθε WebElement που καταγράφεται πριν από την επαναφόρτωση δείχνει πλέον σε έναν κόμβο που δεν υπάρχει πλέον, επομένως η επόμενη κλήση εναντίον του εμφανίζει την ένδειξη StaleElementReferenceException. Αυτή είναι η πιο συνηθισμένη αποτυχία που ακολουθεί μια ανανέωση σελίδας.
Τρεις συνήθειες εξαλείφουν σχεδόν όλες αυτές τις αποτυχίες:
- Εντοπίστε το μετά, ποτέ το πριν. Αποθηκεύστε τον εντοπιστή By αντί για το WebElement και καλέστε ξανά το findElement μόλις ολοκληρωθεί η επαναφόρτωση.
- Περιμένετε ένα πραγματικό σήμα. Μια ρητή αναμονή για την ορατότητα ενός στοιχείου που υπάρχει μόνο μετά την επαναφόρτωση είναι πολύ πιο αξιόπιστη από μια σταθερή αναστολή λειτουργίας.
- Ανανεώστε και μετά ξαναδιαβάστε. Ποτέ μην μεταφέρετε μια τιμή κειμένου ή ένα χαρακτηριστικό που καταγράφηκε πριν από την επαναφόρτωση σε μια διεκδίκηση που γίνεται μετά από αυτήν.
Το παρακάτω μοτίβο ισχύει και για τα τρία:
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); driver.navigate().refresh(); WebElement search = wait.until( ExpectedConditions.visibilityOfElementLocated(By.id("username"))); search.sendKeys("guru99");
Το WebDriverWait διαρκεί μια χρονική διάρκεια σε Selenium 4, η οποία αποτελεί αλλαγή από τον κατασκευαστή ακεραίων δευτερολέπτων που χρησιμοποιείται στο Selenium 3. Ευρύτερες τεχνικές για αυτές τις βλάβες καλύπτονται στον οδηγό μας για χειρισμός εξαιρέσεων σε Selenium.
Σύγκριση του Selenium Μέθοδοι ανανέωσης σελίδας
Και οι έξι εντολές επαναφορτώνουν τη σελίδα, αλλά διαφέρουν ως προς το από τι εξαρτώνται και ως προς τον τρόπο με τον οποίο αποτυγχάνουν.
| Μέθοδος | Εξαρτάται από | Επαναφορτώσεις μέσω | Όταν είναι η σωστή επιλογή |
|---|---|---|---|
| driver.navigate().refresh() | Τίποτα επιπλέον | Η εντολή επαναφόρτωσης προγράμματος περιήγησης | Σχεδόν πάντα — η προεπιλογή |
| driver.get(driver.getCurrentUrl()) | Ένα ευανάγνωστο ρεύμα URL | Μια νέα πλοήγηση | Όταν θέλετε επίσης να διαγράψετε την καταχώρηση ιστορικού |
| driver.navigate().to(driver.getCurrentUrl()) | Ένα ευανάγνωστο ρεύμα URL | Μια νέα πλοήγηση | Το ίδιο με παραπάνω, γραμμένο μέσω της διεπαφής πλοήγησης |
| sendKeys(Keys.F5) | Ένα στοιχείο με δυνατότητα εστίασης | Ένα πάτημα πλήκτρου | Όταν δοκιμάζετε σκόπιμα τη διαδρομή του πληκτρολογίου |
| sendKeys(“\uE035”) | Ένα στοιχείο με δυνατότητα εστίασης | Ένα πάτημα πλήκτρου | Πανομοιότυπο με το F5, γραμμένο ως σημείο κώδικα |
| JavascriptΕκτελεστής location.reload() | Ενεργοποίηση σεναρίων | Ένα σενάριο σελίδας | Όταν η εντολή WebDriver είναι αποκλεισμένη |
Ξεκινήστε με την εντολή ανανέωσης και χρησιμοποιήστε μια άλλη γραμμή μόνο όταν αποτύχει για έναν λόγο που κατανοείτε. Η ίδια σειρά προτίμησης ισχύει όταν εσείς μεγιστοποίηση ή αλλαγή μεγέθους του παραθύρου του προγράμματος περιήγησης: προτιμάται η εγγενής κλήση WebDriver και αντιμετωπίζεται η διαδρομή σεναρίου ως εφεδρική.


