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.

  • 🔘 Výchozí volba: driver.navigate().refresh() je vestavěná funkce pro opětovné načtení, která nepřijímá žádné argumenty a nevrací žádnou hodnotu.
  • ☑️ Rekurzivní varianty: Předáním getCurrentUrl() do get() nebo navigate().to() se znovu načte stejná adresa.
  • (Tj. Trasa klávesnice: Funkce sendKeys akceptuje Keys.F5 nebo hodnotu Unicode \uE035, ale musí cílit na skutečný element.
  • 🧪 Trasa skriptu: JavascriptSpouštěč spouštějící location.reload() funguje, když je příkaz WebDriver blokován.
  • 🛠️ Po opětovném načtení: Každý dříve zaznamenaný odkaz na prvek se stane zastaralým a je nutné jej znovu vyhledat.
  • 📊 Moderní nastavení: Selenium Manager dorazil ve verzi 4.6, takže cestu k ovladači již není nutné nastavovat ručně.

Obnovit stránku pomocí Selenium Příkazy WebDriveru

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.

  1. Příkaz driver.navigate().refresh()
  2. Metoda Get
  3. Příkaz Odeslat klávesy
  4. Metoda navigace
  5. 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:

  1. Otevřete prohlížeč Chrome s webovou stránkou https://demo.guru99.com/selenium/guru99home/
  2. Jakmile se stránka úspěšně načte, aktualizujte ji pomocí metody driver.navigate().refresh().
  3. 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.

Guru99 demo domovská stránka při počátečním načtení před spuštěním příkazu refresh

Po obnovení stránky se video na stránce změnilo, což potvrzuje, že k opětovnému načtení skutečně došlo.

Guru99 demo domovská stránka po zobrazení jiného videa pomocí driver.navigate().refresh()

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:

  1. umístění.znovu načíst() provede normální opětovné načtení a může stránku načíst z mezipaměti.
  2. 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:

  1. 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.
  2. 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.
  3. 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í.

Nejčastější dotazy

Může. Pokud byla aktuální stránka vytvořena pomocí POST dotazu, prohlížeč může požádat o opětovné odeslání dat a opětovné načtení se za tímto dialogovým oknem zasekne. Navigace na URL opět s get() se výzva zcela vyhne.

Názvy vazeb se liší, ale příkaz je stejný: driver.refresh() v Python, driver.Navigate().Refresh() v C# a driver.navigate().refresh() v JavaVšechny tři vydávají identickou instrukci WebDriver.

Ne. Obnovení uchovává soubory cookie, úložiště relace a lokální úložiště pro stejný zdroj, a proto je obnovení špatným způsobem, jak obnovit stav. Smažte soubory cookie explicitně nebo spusťte novou relaci prohlížeče.

Samoopravné enginy znovu rozlišují lokátor z několika atributů, když se znovu načtený DOM již neshoduje, a analýza selhání modeluje shluky odchylek při opětovném načítání, takže tým opraví jedno čekání místo padesáti testů.

Ano, a volání obnovení na jeden řádek je návrh, který se konzistentně správně načte. Čekání, které po něm musí následovat, je místem, kde se návrhy pokazí, takže porovnejte vygenerovaný časový limit s tím, jak se aplikace skutečně načte.

Neexistuje žádný specializovaný příkaz. Týmy se k němu přibližují odesláním kláves Ctrl a F5 společně prostřednictvím třídy Actions nebo vypnutím mezipaměti v možnostech prohlížeče, což je spolehlivější cesta.

Ne s příkazem refresh, který vždy znovu načte horní dokument. Přepněte do rámce a znovu jej načtěte pomocí skriptu nebo resetujte jeho atribut source a poté se přepněte zpět na výchozí obsah.

Nehádejte s pevně daným časem spánku. Použijte explicitní čekání deset až třicet sekund na podmínku, která je pravdivá až po opětovném načtení, aby test pokračoval v okamžiku, kdy je stránka připravena.

Shrňte tento příspěvek takto: