Ανανέωση σελίδας χρησιμοποιώντας Selenium Πρόγραμμα οδήγησης Web

⚡ Έξυπνη Σύνοψη

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

  • 🔘 Προεπιλεγμένη επιλογή: Η driver.navigate().refresh() είναι η ενσωματωμένη επαναφόρτωση και δεν δέχεται ορίσματα και δεν επιστρέφει τιμή.
  • ☑️ Αναδρομικές παραλλαγές: Η εισαγωγή της getCurrentUrl() στην get() ή την navigate().to() επαναφορτώνει την ίδια διεύθυνση.
  • Διαδρομή πληκτρολογίου: Το sendKeys δέχεται Keys.F5 ή την τιμή Unicode \uE035, αλλά πρέπει να στοχεύει σε ένα πραγματικό στοιχείο.
  • 🧪 Διαδρομή σεναρίου: JavascriptΟ εκτελεστής που εκτελεί την εντολή location.reload() λειτουργεί όταν η εντολή WebDriver είναι αποκλεισμένη.
  • Μετά την επαναφόρτωση: Κάθε αναφορά στοιχείου που καταγράφηκε νωρίτερα καθίσταται παλιά και πρέπει να εντοπιστεί ξανά.
  • 📊 Σύγχρονη εγκατάσταση: Selenium Το Manager έφτασε στην έκδοση 4.6, επομένως η διαδρομή του προγράμματος οδήγησης δεν χρειάζεται πλέον να ορίζεται χειροκίνητα.

Ανανέωση σελίδας χρησιμοποιώντας Selenium Εντολές WebDriver

Κατά τη διάρκεια της αυτοματοποίησης δοκιμών μιας διαδικτυακής εφαρμογής, προκύπτει η ανάγκη η σελίδα να ανανεωθεί πολλές φορές για να φορτωθούν πλήρως όλα τα στοιχεία ιστού. Κατά την αρχική φόρτωση της σελίδας ενδέχεται να φορτωθούν ορισμένα στοιχεία ιστού, ενώ χρειάζεται μια δεύτερη ανανέωση σελίδας για να εμφανιστούν όλα. Αυτό μπορεί να γίνει χρησιμοποιώντας την εντολή ανανέωσης που παρέχεται από Selenium WebDriver.

Πώς να ανανεώσετε τη σελίδα Selenium

Η λειτουργία ανανέωσης προγράμματος περιήγησης μπορεί να πραγματοποιηθεί χρησιμοποιώντας τους ακόλουθους τρόπους Selenium. Θα συζητήσουμε λεπτομερώς τους παρακάτω τρόπους που αναφέρονται σε όλο το άρθρο.

  1. εντολή driver.navigate().refresh()
  2. Λήψη μεθόδου
  3. Εντολή αποστολής κλειδιών
  4. Μέθοδος πλοήγησης
  5. εντολή driver.navigate().to()

1) Εντολή driver.navigate().refresh()

Αυτή είναι η ενσωματωμένη μέθοδος για την εκτέλεση μιας λειτουργίας ανανέωσης σελίδας που παρέχεται από Selenium WebDriver. Αυτή η εντολή είναι η πιο συχνά χρησιμοποιούμενη εντολή σε όλο τον αυτοματισμό δοκιμών για την εκτέλεση μιας λειτουργίας ανανέωσης σελίδας. Η εντολή ανανέωσης μπορεί να χρησιμοποιηθεί με έναν απλό τρόπο όπως αναφέρεται παρακάτω.

driver.get("https://demo.guru99.com/selenium/guru99home/");
driver.navigate().refresh();

Η πλοήγηση είναι μια διεπαφή που χρησιμοποιείται για την εκτέλεση διαφόρων λειτουργιών του προγράμματος περιήγησης, όπως πλοήγηση στην προηγούμενη σελίδα, πλοήγηση στην επόμενη σελίδα, ανανέωση σελίδας και κλείσιμο προγράμματος περιήγησης. Η πρόσβαση στις μεθόδους διεπαφής πλοήγησης είναι δυνατή χρησιμοποιώντας την εντολή driver.navigate(). Η μέθοδος ανανέωσης της διεπαφής πλοήγησης δεν δέχεται ορίσματα και δεν επιστρέφει καμία τιμή.

Παράδειγμα:

Σενάριο δοκιμής:

  1. Ανοίξτε το πρόγραμμα περιήγησης Chrome με την ιστοσελίδα https://demo.guru99.com/selenium/guru99home/
  2. Μόλις η σελίδα φορτωθεί με επιτυχία, ανανεώστε την ιστοσελίδα χρησιμοποιώντας τη μέθοδο driver.navigate().refresh()
  3. Κλείστε το πρόγραμμα περιήγησης χρησιμοποιώντας τη μέθοδο 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 Παραγωγή:

Στην αρχική σελίδα, φορτώστε την αρχική σελίδα επίδειξης που εμφανίζεται όπως φαίνεται παρακάτω.

Guru99 αρχική σελίδα επίδειξης κατά την αρχική φόρτωση πριν από την εκτέλεση της εντολής ανανέωσης

Μετά την ανανέωση της σελίδας, το βίντεο στη σελίδα έχει αλλάξει, γεγονός που επιβεβαιώνει ότι η επαναφόρτωση όντως πραγματοποιήθηκε.

Guru99 αρχική σελίδα επίδειξης μετά το driver.navigate().refresh() που εμφανίζει ένα διαφορετικό βίντεο

Πολλοί άλλοι τρόποι ανανέωσης μιας σελίδας

Η μέθοδος ανανέωσης δεν είναι η μόνη οδός για επαναφόρτωση. Οι τέσσερις τεχνικές που ακολουθούν παράγουν το ίδιο αποτέλεσμα και αξίζει να τις γνωρίζετε, επειδή μια κλειδωμένη εφαρμογή ή ένα επίμονο πρόγραμμα περιήγησης περιστασιακά μπλοκάρει μία από αυτές.

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();");

Αξίζει να θυμηθούμε δύο παραλλαγές:

  1. τοποθεσία.reload() εκτελεί μια κανονική επαναφόρτωση και ενδέχεται να εμφανίσει τη σελίδα από την προσωρινή μνήμη.
  2. ιστορία.go(0) είναι ένα παλαιότερο ισοδύναμο που εξακολουθούν να χρησιμοποιούν ορισμένες παλαιότερες σουίτες.

Η διαδρομή του executor εκτελείται μέσα στη σελίδα, επομένως δεν περιμένει το νέο έγγραφο από μόνη της. Ακολουθήστε την με μια σαφή αναμονή ακριβώς όπως θα κάνατε μετά την driver.navigate().refresh() και να θυμάστε ότι μια επαναφόρτωση που βασίζεται σε σενάριο δεν θα καθαρίσει ένα παράθυρο διαλόγου σε επίπεδο προγράμματος περιήγησης. Εάν η εφαρμογή υπό δοκιμή φορτώσει το περιεχόμενό της ασύγχρονα, ισχύει η ίδια προσοχή όπως όταν χειρισμός κλήσεων AJAX σε Selenium Πρόγραμμα οδήγησης Web.

Πώς να αποφύγετε το StaleElementReferenceException μετά από μια ανανέωση

Μια ανανέωση καταστρέφει το τρέχον DOM και δημιουργεί ένα νέο. Κάθε WebElement που καταγράφεται πριν από την επαναφόρτωση δείχνει πλέον σε έναν κόμβο που δεν υπάρχει πλέον, επομένως η επόμενη κλήση εναντίον του εμφανίζει την ένδειξη StaleElementReferenceException. Αυτή είναι η πιο συνηθισμένη αποτυχία που ακολουθεί μια ανανέωση σελίδας.

Τρεις συνήθειες εξαλείφουν σχεδόν όλες αυτές τις αποτυχίες:

  1. Εντοπίστε το μετά, ποτέ το πριν. Αποθηκεύστε τον εντοπιστή By αντί για το WebElement και καλέστε ξανά το findElement μόλις ολοκληρωθεί η επαναφόρτωση.
  2. Περιμένετε ένα πραγματικό σήμα. Μια ρητή αναμονή για την ορατότητα ενός στοιχείου που υπάρχει μόνο μετά την επαναφόρτωση είναι πολύ πιο αξιόπιστη από μια σταθερή αναστολή λειτουργίας.
  3. Ανανεώστε και μετά ξαναδιαβάστε. Ποτέ μην μεταφέρετε μια τιμή κειμένου ή ένα χαρακτηριστικό που καταγράφηκε πριν από την επαναφόρτωση σε μια διεκδίκηση που γίνεται μετά από αυτήν.

Το παρακάτω μοτίβο ισχύει και για τα τρία:

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 και αντιμετωπίζεται η διαδρομή σεναρίου ως εφεδρική.

Συχνές Ερωτήσεις

Μπορεί. Εάν η τρέχουσα σελίδα δημιουργήθηκε από μια POST, το πρόγραμμα περιήγησης μπορεί να ζητήσει να στείλει ξανά τα δεδομένα και η επαναφόρτωση σταματά πίσω από αυτό το παράθυρο διαλόγου. Πλοήγηση στο URL και πάλι με την get() αποφεύγεται εντελώς η προτροπή.

Τα ονόματα των συνδέσμων διαφέρουν, αλλά η εντολή είναι η ίδια: driver.refresh() in Python, driver.Navigate().Refresh() σε C# και driver.navigate().refresh() σε JavaΚαι τα τρία εκδίδουν την ίδια εντολή WebDriver.

Όχι. Η επαναφόρτωση διατηρεί τα cookies, τον χώρο αποθήκευσης περιόδου σύνδεσης και τον τοπικό χώρο αποθήκευσης για την ίδια προέλευση, γι' αυτό και η ανανέωση δεν είναι ένας καλός τρόπος για να επαναφέρετε την κατάσταση. Διαγράψτε ρητά τα cookies ή ξεκινήστε μια νέα περίοδο σύνδεσης προγράμματος περιήγησης.

Οι μηχανές αυτοΐασης επιλύουν ξανά έναν εντοπιστή από διάφορα χαρακτηριστικά όταν το επαναφορτωμένο DOM δεν ταιριάζει πλέον, και τα μοντέλα ανάλυσης αστοχιών ομαδοποιούν τις νιφάδες χρονισμού επαναφόρτωσης, έτσι ώστε η ομάδα να διορθώνει μία δοκιμή αναμονής αντί για πενήντα.

Ναι, και η κλήση ανανέωσης μίας γραμμής είναι μια πρόταση που το κάνει σωστά με συνέπεια. Η αναμονή που πρέπει να ακολουθήσει είναι το σημείο όπου οι προτάσεις πάνε στραβά, οπότε ελέγξτε τυχόν χρονικό όριο που δημιουργήθηκε σε σχέση με τον τρόπο που φορτώνει στην πραγματικότητα η εφαρμογή.

Δεν υπάρχει ειδική εντολή. Οι ομάδες προσεγγίζουν μία στέλνοντας Ctrl και F5 μαζί μέσω της κλάσης Actions ή απενεργοποιώντας την προσωρινή μνήμη μέσω των επιλογών του προγράμματος περιήγησης, η οποία είναι η πιο αξιόπιστη διαδρομή.

Όχι με την εντολή ανανέωσης, η οποία πάντα επαναφορτώνει το πρώτο έγγραφο. Μεταβείτε στο πλαίσιο και επαναφορτώστε το με ένα σενάριο ή επαναφέρετε την ιδιότητα πηγής του και, στη συνέχεια, επιστρέψτε στο προεπιλεγμένο περιεχόμενο.

Μην κάνετε εικασίες με σταθερή κατάσταση αναστολής λειτουργίας. Χρησιμοποιήστε μια ρητή αναμονή δέκα έως τριάντα δευτερολέπτων σε μια συνθήκη που ισχύει μόνο μετά την επαναφόρτωση, έτσι ώστε η δοκιμή να συνεχίζεται τη στιγμή που η σελίδα είναι έτοιμη.

Συνοψίστε αυτήν την ανάρτηση με: