Seite aktualisieren mit Selenium Webtreiber
โก Intelligente Zusammenfassung
Eine Seite neu laden in Selenium WebDriver lรคdt den aktuellen URL sodass jedes Element gerendert wird, bevor die Assertions ausgefรผhrt werden, und das Framework bietet fรผnf verschiedene Befehle, die auf unterschiedliche Weise das gleiche Neuladen erreichen.
Bei der Testautomatisierung einer webbasierten Anwendung ist es oft erforderlich, die Seite mehrmals zu aktualisieren, damit alle Webelemente vollstรคndig geladen werden. Beim ersten Seitenaufruf werden mรถglicherweise bereits einige Webelemente geladen, wรคhrend ein zweiter Seitenaufruf nรถtig ist, um alle anzuzeigen. Dies kann mithilfe des bereitgestellten Aktualisierungsbefehls erfolgen. Selenium WebDriver.
So aktualisieren Sie die Seite in Selenium
Der Browser-Aktualisierungsvorgang kann auf folgende Weise durchgefรผhrt werden: Selenium. Wir werden die unten genannten Mรถglichkeiten im Laufe des Artikels ausfรผhrlich besprechen.
- Befehl driver.navigate().refresh()
- Methode abrufen
- Befehl โTasten sendenโ.
- Navigate-Methode
- driver.navigate().to() Befehl
1) Befehl driver.navigate().refresh()
Dies ist die integrierte Methode zum Durchfรผhren einer Seitenaktualisierung, die von Selenium WebDriver. Dieser Befehl ist der am hรคufigsten verwendete Befehl in der Testautomatisierung, um eine Seitenaktualisierung durchzufรผhren. Die Aktualisierung kann, wie unten beschrieben, auf einfache Weise erfolgen.
driver.get("https://demo.guru99.com/selenium/guru99home/");
driver.navigate().refresh();
Die Navigation ist eine Schnittstelle, รผber die verschiedene Browseroperationen ausgefรผhrt werden kรถnnen, wie z. B. das Navigieren zur vorherigen oder nรคchsten Seite, das Aktualisieren der Seite und das Schlieรen des Browsers. Die Methoden der Navigationsschnittstelle kรถnnen mit dem Befehl `driver.navigate()` aufgerufen werden. Die `refresh`-Methode der Navigationsschnittstelle benรถtigt keine Argumente und gibt keinen Wert zurรผck.
Ejemplo:
Testszenario:
- รffnen Sie den Chrome-Browser mit der Webseite https://demo.guru99.com/selenium/guru99home/
- Sobald die Seite erfolgreich geladen wurde, aktualisieren Sie die Webseite mit der Methode driver.navigate().refresh().
- Schlieรen Sie den Browser mit der Methode 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(); } }
โ ๏ธ Versionshinweis: Selenium Manager wurde mitgeliefert Selenium 4.6 und lรคdt den passenden Browsertreiber automatisch herunter, sodass die obige Zeile System.setProperty in der aktuellen Version nicht mehr erforderlich ist. new ChromeDriver() ist ausreichend. Die ursprรผngliche Zeile wird beibehalten, da sie fรผr die Selenium Das Beispiel wurde anhand des 3-Stil-Setups geschrieben.
Code Ausgang:
Beim ersten Laden der Seite wird die Demo-Startseite wie unten dargestellt gerendert.
Nach dem Neuladen der Seite hat sich das Video auf der Seite geรคndert, was bestรคtigt, dass das Neuladen tatsรคchlich stattgefunden hat.
Es gibt mehrere weitere Mรถglichkeiten, eine Seite zu aktualisieren.
Die Aktualisierungsmethode ist nicht der einzige Weg, um die Seite neu zu laden. Die vier folgenden Techniken fรผhren zum gleichen Ergebnis und sind bekannt, da eine restriktive Anwendung oder ein widerspenstiger Browser gelegentlich eine davon blockiert.
2) Get-Methode
Die get-Methode kann rekursiv verwendet werden, um eine Seite zu aktualisieren. Dazu muss der get-Methode eine andere Methode als Argument รผbergeben werden.
Ejemplo:
driver.get("https://www.guru99.com");
driver.get(driver.getCurrentUrl());
3) Navigationsmethode
Diese Methode verwendet dasselbe Konzept der Rekursion wie oben beschrieben. Die Methode getCurrentUrl() wird als Argument an die Methode driver.navigate().to() รผbergeben.
Ejemplo:
driver.get("https://www.guru99.com");
driver.navigate().to(driver.getCurrentUrl());
4) Methode zum Senden von Tasten mithilfe der F5-Taste
Dies ist die zweithรคufigste Methode zum Aktualisieren einer Seite SeleniumDie Methode `sendKeys` erwartet die Aktualisierungstaste (F5) als Argument. Da `sendKeys` nur auf Webelementen und nicht auf dem Browser selbst funktioniert, muss zunรคchst ein gรผltiges Webelement auf der Webseite identifiziert werden, bevor die Methode aufgerufen werden kann. Dies kann wie unten gezeigt erfolgen.
Ejemplo:
driver.get("https://www.guru99.com"); driver.findElement(By.id("username")).sendKeys(Keys.F5);
Da der Tastendruck an ein Element und nicht an die Browseroberflรคche รผbermittelt wird, ist dieser Weg davon abhรคngig, dass das Element den Fokus hat. Wenn der Locator Wenn ein Feld gefunden wird, das nicht den Fokus erhalten kann, wird die Taste verschluckt und die Seite wird nicht neu geladen.
5) Methode zum Senden von Tasten mittels ASCII Code
Diese Methode basiert auf demselben Prinzip wie oben, รผbergibt aber anstelle der F5-Taste den Codepunkt der Aktualisierungstaste. Dies lรคsst sich wie folgt realisieren.
driver.get("https://www.guru99.com"); driver.findElement(By.id("username")).sendKeys("\uE035");
Der Wert \uE035 ist der WebDriver-Unicode-Codepunkt, den das Protokoll auf F5 abbildet, daher sind dieser Codeausschnitt und der vorherige รคquivalent.
So aktualisieren Sie eine Seite mit JavaSkriptExecutor
Jeder Browser stellt Seitenskripten eine Reload-Funktion zur Verfรผgung, und Selenium kann es รผber die JavascriptExecutor-Schnittstelle. Dies ist die รผbliche Ausweichlรถsung, wenn der WebDriver-Aktualisierungsbefehl von der Anwendung oder einer Browsererweiterung abgefangen wird.
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("location.reload();");
Zwei Varianten sind es wert, beachtet zu werden:
- location.reload() Fรผhrt ein normales Neuladen durch und liefert die Seite gegebenenfalls aus dem Cache.
- history.go(0) ist ein รคlteres รquivalent, das von einigen Legacy-Suiten noch verwendet wird.
Die Executor-Route lรคuft innerhalb der Seite und wartet daher nicht selbststรคndig auf das neue Dokument. Fรผgen Sie anschlieรend eine explizite Wartezeit ein, genau wie nach `driver.navigate().refresh()`, und beachten Sie, dass ein skriptgesteuertes Neuladen einen Dialog auf Browserebene nicht lรถscht. Lรคdt die zu testende Anwendung ihre Inhalte asynchron, gilt dieselbe Vorgehensweise wie bei โฆ Verarbeitung von AJAX-Aufrufen in Selenium WebTreiber.
Wie man eine StaleElementReferenceException nach einer Aktualisierung vermeidet
Durch das Neuladen der Seite wird das aktuelle DOM zerstรถrt und ein neues erstellt. Alle vor dem Neuladen erfassten WebElemente verweisen nun auf einen Knoten, der nicht mehr existiert. Daher lรถst der nรคchste Aufruf dieser Elemente eine StaleElementReferenceException aus. Dies ist der hรคufigste Fehler nach einem Seitenneuladen.
Drei Gewohnheiten beseitigen fast alle diese Misserfolge:
- Lokalisieren Sie erst danach, niemals vorher. Speichern Sie den By-Locator anstelle des WebElement und rufen Sie findElement erneut auf, sobald das Neuladen abgeschlossen ist.
- Warten Sie auf ein echtes Signal. Ein explizites Warten auf die Sichtbarkeit eines Elements, das erst nach dem Neuladen existiert, ist weitaus zuverlรคssiger als ein festes Warten.
- Aktualisieren Sie die Seite und lesen Sie die Informationen erneut. รbertragen Sie niemals einen Textwert oder ein Attribut, das vor dem Neuladen erfasst wurde, in eine anschlieรend durchgefรผhrte Assertion.
Das folgende Muster trifft auf alle drei zu:
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); driver.navigate().refresh(); WebElement search = wait.until( ExpectedConditions.visibilityOfElementLocated(By.id("username"))); search.sendKeys("guru99");
WebDriverWait benรถtigt eine Dauer in Selenium 4, was eine รnderung gegenรผber dem in der vorherigen Version verwendeten Integer-Sekunden-Konstruktor darstellt. Selenium 3. Weiterfรผhrende Techniken zur Behebung dieser Fehler werden in unserem Leitfaden behandelt. Ausnahmebehandlung in Selenium.
Vergleich von Selenium Methoden zum Aktualisieren der Seite
Alle sechs Befehle laden die Seite neu, unterscheiden sich aber darin, wovon sie abhรคngen und wie sie fehlschlagen.
| Methodik | Kommt drauf an | Neuladen รผber | Wenn es die richtige Wahl ist |
|---|---|---|---|
| driver.navigate().refresh() | Nichts extra | Der Browser-Neuladebefehl | Fast immer โ die Standardeinstellung |
| driver.get(driver.getCurrentUrl()) | Ein lesbarer Strom URL | Eine neue Navigation | Wenn Sie auch den Verlaufseintrag lรถschen mรถchten |
| driver.navigate().to(driver.getCurrentUrl()) | Ein lesbarer Strom URL | Eine neue Navigation | Gleiches gilt wie oben, jedoch รผber die Navigationsschnittstelle geschrieben. |
| sendKeys(Keys.F5) | Ein fokussierbares Element | Ein Tastendruck | Wenn Sie den Tastaturpfad absichtlich testen |
| sendKeys(โ\uE035โ) | Ein fokussierbares Element | Ein Tastendruck | Identisch mit F5, geschrieben als Codepunkt |
| JavascriptExecutor location.reload() | Skripting aktiviert | Ein Seitenskript | Wenn der WebDriver-Befehl blockiert ist |
Beginnen Sie mit dem Aktualisierungsbefehl und wรคhlen Sie eine andere Zeile erst dann aus, wenn dies aus einem Ihnen bekannten Grund fehlschlรคgt. Die gleiche Reihenfolge gilt, wenn Sie Browserfenster maximieren oder verkleinern: Bevorzugen Sie den nativen WebDriver-Aufruf und behandeln Sie die Skriptroute als Fallback.


