Obnovit stránku pomocí Selenium Webdriver
⚡ Chytré shrnutí
Obnovení stránky v Selenium WebDriver znovu načte aktuální URL takže každý prvek se vykreslí před spuštěním assercí a framework nabízí pět různých příkazů, které dosahují stejného opětovného načtení různými způsoby.
Během automatizace testování webové aplikace je nutné stránku několikrát aktualizovat, aby se všechny webové prvky kompletně načetly. Při prvním načtení stránky se mohou některé webové prvky načíst, zatímco pro jejich zobrazení je potřeba druhé obnovení stránky. To lze provést pomocí příkazu refresh, který poskytuje Selenium WebDriver.
Jak obnovit stránku v Selenium
Operaci obnovení prohlížeče lze provést následujícími způsoby Selenium. Níže uvedené způsoby podrobně probereme v celém článku.
- Příkaz driver.navigate().refresh()
- Metoda Get
- Příkaz Odeslat klávesy
- Metoda navigace
- Příkaz driver.navigate().to()
1) Příkaz driver.navigate().refresh()
Toto je vestavěná metoda pro provedení operace obnovení stránky poskytovaná Selenium WebDriver. Tento příkaz je nejčastěji používaným příkazem v automatizaci testování pro provedení operace obnovení stránky. Příkaz refresh lze použít jednoduchým způsobem, jak je uvedeno níže.
driver.get("https://demo.guru99.com/selenium/guru99home/");
driver.navigate().refresh();
Navigace je rozhraní, které se používá k provádění různých operací prohlížeče, jako je přechod na předchozí stránku, přechod na další stránku, obnovení stránky a zavření prohlížeče. Metody navigačního rozhraní lze přistupovat pomocí příkazu driver.navigate(). Metoda refresh navigačního rozhraní nepřijímá žádné argumenty a nevrací žádnou hodnotu.
Příklad:
Scénář testu:
- Otevřete prohlížeč Chrome s webovou stránkou https://demo.guru99.com/selenium/guru99home/
- Jakmile se stránka úspěšně načte, aktualizujte ji pomocí metody driver.navigate().refresh().
- Zavřete prohlížeč pomocí metody 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(); } }
⚠️ Poznámka k verzi: Selenium Správce je dodáván s Selenium 4.6 a automaticky stáhne odpovídající ovladač prohlížeče, takže řádek System.setProperty výše již není v aktuální verzi vyžadován – new ChromeDriver() stačí. Původní řádek je zachován, protože je stále správný pro Selenium 3 styl nastavení, proti kterému byl příklad napsán.
Code Výstup:
Na úvodní stránce se načte ukázková domovská stránka, jak je znázorněno níže.
Po obnovení stránky se video na stránce změnilo, což potvrzuje, že k opětovnému načtení skutečně došlo.
Několik dalších způsobů, jak obnovit stránku
Metoda obnovení není jediný způsob, jak znovu načíst systém. Čtyři níže uvedené techniky vedou ke stejnému výsledku a stojí za to je znát, protože zablokovaná aplikace nebo nefunkční prohlížeč občas některou z nich zablokuje.
2) Získat metodu
Metodu get lze rekurzivně použít k obnovení stránky. Abychom toho dosáhli, musíme metodě get předat jinou metodu jako argument.
Příklad:
driver.get("https://www.guru99.com");
driver.get(driver.getCurrentUrl());
3) Metoda navigace
Tato metoda používá stejný koncept rekurze jako výše. Metoda getCurrentUrl() se předává jako argument metodě driver.navigate().to().
Příklad:
driver.get("https://www.guru99.com");
driver.navigate().to(driver.getCurrentUrl());
4) Metoda odesílání kláves pomocí klávesy F5
Toto je druhý nejčastěji používaný způsob obnovení stránky SeleniumJako argument metody sendKeys bere klávesu pro obnovení (F5). Protože metoda sendKeys funguje pouze na webových prvcích, nikoli v prohlížeči, musíme nejprve identifikovat platný webový prvek na webové stránce a poté použít metodu sendKeys. Toho lze dosáhnout následovně.
Příklad:
driver.get("https://www.guru99.com"); driver.findElement(By.id("username")).sendKeys(Keys.F5);
Protože stisk klávesy je doručen elementu, nikoli do prohlížeče Chrome, závisí tato trasa na elementu, který má fokus. Pokud Vyhledávání Pokud se shoduje s polem, které nemůže převzít fokus, klíč je převzat a stránka se nikdy nenačte znovu.
5) Metoda odeslání klíčů pomocí ASCII Code
Tato metoda používá stejný koncept jako výše, ale místo předávání klávesy F5 jako argumentu posíláme kód klávesy Refresh. Toho lze dosáhnout následovně.
driver.get("https://www.guru99.com"); driver.findElement(By.id("username")).sendKeys("\uE035");
Hodnota \uE035 je kódový bod Unicode WebDriveru, který protokol mapuje na F5, takže tento a předchozí úryvek jsou ekvivalentní.
Jak obnovit stránku pomocí JavaScriptExecutor
Každý prohlížeč zpřístupňuje funkci pro opětovné načtení skriptů stránky a Selenium lze to zavolat prostřednictvím JavascriptRozhraní prováděcího programu. Toto je obvyklá záložní možnost, když je příkaz WebDriver refresh zachycen aplikací nebo rozšířením prohlížeče.
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("location.reload();");
Za zmínku stojí dvě varianty:
- umístění.znovu načíst() provede normální opětovné načtení a může stránku načíst z mezipaměti.
- historie.go(0) je starší ekvivalent, který některé starší sady stále používají.
Trasa exekutoru běží uvnitř stránky, takže sama nečeká na nový dokument. Následujte ji explicitním čekacím kódem, stejně jako po driver.navigate().refresh(), a nezapomeňte, že skriptem řízené opětovné načtení nevymaže dialogové okno na úrovni prohlížeče. Pokud testovaná aplikace načítá svůj obsah asynchronně, platí stejná opatrnost jako při zpracování AJAX volání v Selenium webový ovladač.
Jak se vyhnout výjimce StaleElementReferenceException po aktualizaci
Obnovení zničí aktuální DOM a vytvoří nový. Každý WebElement zachycený před opětovným načtením nyní ukazuje na uzel, který již neexistuje, takže jeho další volání vyvolá výjimku StaleElementReferenceException. Toto je nejčastější chyba, která následuje po obnovení stránky.
Tři návyky odstraňují téměř všechny tyto nedostatky:
- Najdi potom, nikdy předtím. Uložte lokátor By namísto WebElement a po dokončení opětovného načítání zavolejte znovu findElement.
- Počkejte na skutečný signál. Explicitní čekání na viditelnost elementu, který existuje až po opětovném načtení, je mnohem spolehlivější než fixní režim spánku.
- Obnovte si to a pak si to znovu přečtěte. Nikdy nepřenášejte textovou hodnotu nebo atribut zachycený před opětovným načtením do assession provedené po něm.
Níže uvedený vzorec platí pro všechny tři:
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); driver.navigate().refresh(); WebElement search = wait.until( ExpectedConditions.visibilityOfElementLocated(By.id("username"))); search.sendKeys("guru99");
WebDriverWait přijímá hodnotu Duration v Selenium 4, což je změna oproti konstruktoru integer-seconds použitému v Selenium 3. Širší techniky pro řešení těchto selhání jsou popsány v našem průvodci zpracování výjimek v Selenium.
Srovnání Selenium Metody aktualizace stránky
Všech šest příkazů znovu načte stránku, ale liší se v tom, na čem závisí a jak selhávají.
| Metoda | Záleží na | Nabíjení přes | Když je to správná volba |
|---|---|---|---|
| ovladač.navigate().refresh() | Nic extra | Příkaz pro opětovné načtení prohlížeče | Téměř vždy – výchozí nastavení |
| ovladač.get(ovladač.getCurrentUrl()) | Čitelný proud URL | Nová navigace | Pokud chcete také smazat položku historie |
| ovladač.navigate().to(ovladač.getCurrentUrl()) | Čitelný proud URL | Nová navigace | Stejné jako výše, zapsané přes navigační rozhraní |
| poslatKlávesy(Klávesy.F5) | Zaostřitelný prvek | Stisknutí klávesy | Když záměrně testujete dráhu klávesnice |
| sendKeys(“\uE035”) | Zaostřitelný prvek | Stisknutí klávesy | Identické s F5, zapsané jako kódový bod |
| JavascriptUmístění vykonavatele.reload() | Skriptování povoleno | Skript stránky | Pokud je příkaz WebDriver blokován |
Začněte příkazem refresh a pro další řádek sahejte pouze tehdy, když selže z důvodu, kterému rozumíte. Stejné pořadí preferencí platí i při maximalizovat nebo změnit velikost okna prohlížeče: preferovat nativní volání WebDriveru a považovat trasu skriptu za záložní.


