Frissítse az oldalt a használatával Selenium Webdriver

⚡ Okos összefoglaló

Oldal frissítése itt: Selenium A WebDriver újratölti az aktuális fájlt. URL így minden elem megjelenik az assertions futtatása előtt, és a keretrendszer öt különböző parancsot kínál, amelyek ugyanazt az újratöltést különböző módokon érik el.

  • 🔘 Alapértelmezett választás: A driver.navigate().refresh() a beépített újratöltési függvény, amely nem fogad el argumentumokat és nem ad vissza értéket.
  • ☑️ Rekurzív változatok: A getCurrentUrl() metódus átadása a get() vagy navigate().to().to() függvénynek ugyanazt a címet tölti be újra.
  • Billentyűzet útvonal: A sendKeys függvény elfogadja a Keys.F5 paramétert vagy a \uE035 Unicode értéket, de valódi elemet kell céloznia.
  • 🧪 Szkript útvonala: JavascriptA location.reload() függvényt futtató végrehajtó akkor működik, ha a WebDriver parancs blokkolva van.
  • 🇧🇷 Újratöltés után: Minden korábban rögzített elemhivatkozás elavulttá válik, és újra meg kell találni.
  • 📊 Modern beállítás: Selenium A Manager a 4.6-os verzióban érkezett, így a meghajtó elérési útját már nem kell kézzel beállítani.

Oldal frissítése a következővel: Selenium WebDriver parancsok

Egy webalapú alkalmazás tesztautomatizálása során szükség van az oldal többszöri frissítésére ahhoz, hogy az összes webes elem teljesen betöltődjön. Az oldal kezdeti betöltésekor egyes webes elemek betöltődhetnek, míg egy második oldalfrissítésre van szükség ahhoz, hogy az összes elem megjelenjen. Ez a következő parancs segítségével tehető meg: refresh Selenium WebDriver.

Az oldal frissítése Selenium

A böngészőfrissítési művelet a következő módokon hajtható végre Selenium. Az alábbiakban említett módokat a cikkben részletesen tárgyaljuk.

  1. driver.navigate().refresh() parancs
  2. Get metódus
  3. Kulcsok parancs küldése
  4. Navigációs módszer
  5. driver.navigate().to() parancs

1) driver.navigate().refresh() parancs

Ez a beépített metódus az oldalfrissítési művelet végrehajtására, amelyet a következő biztosít: Selenium WebDriver. Ez a parancs a leggyakrabban használt parancs a tesztautomatizálásban az oldalfrissítési művelet végrehajtásához. A refresh parancs az alábbiakban ismertetett egyszerű módon használható.

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

A navigáció egy olyan felület, amely különféle böngészőműveletek végrehajtására szolgál, például az előző oldalra való navigálásra, a következő oldalra való navigálásra, az oldal frissítésére és a böngésző bezárására. A navigációs felület metódusai a driver.navigate() paranccsal érhetők el. A navigációs felület frissítési metódusa nem fogad el argumentumokat, és nem ad vissza értéket.

Példa:

Teszt forgatókönyv:

  1. Nyissa meg a Chrome böngészőt a weboldallal https://demo.guru99.com/selenium/guru99home/
  2. Miután az oldal sikeresen betöltődött, frissítsd a weboldalt a driver.navigate().refresh() metódussal.
  3. Zárd be a böngészőt a driver.close() metódussal

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

⚠️ Verzió megjegyzés: Selenium Menedzser kiszállítása Selenium 4.6 és automatikusan letölti a megfelelő böngészőillesztőt, így a fenti System.setProperty sorra már nincs szükség a jelenlegi verzión — new ChromeDriver() elég. Az eredeti sort megtartottuk, mert az továbbra is helyes a Selenium 3. stílusú beállítás, amellyel szemben a példa íródott.

Code output:

A kezdőoldal betöltésekor a demó kezdőlapja az alábbiak szerint jelenik meg.

Guru99 demó kezdőlap a kezdeti betöltéskor, a frissítési parancs futtatása előtt

Az oldal frissítése után az oldalon található videó megváltozott, ami megerősíti, hogy az újratöltés valóban megtörtént.

Guru99 demó kezdőlap a driver.navigate().refresh() után, egy másik videót mutatva

Több más módszer az oldal frissítésére

A frissítési módszer nem az egyetlen módja az újratöltésnek. Az alábbi négy technika ugyanazt az eredményt hozza, és érdemes ismerni őket, mert egy lezárt alkalmazás vagy egy makacs böngésző időnként blokkolja az egyiket.

2) Get metódus

A get metódus rekurzív módon használható egy oldal frissítésére. Ennek eléréséhez egy másik metódust kell átadnunk argumentumként a get metódusnak.

Példa:

driver.get("https://www.guru99.com");
driver.get(driver.getCurrentUrl());

3) Navigálási módszer

Ez a metódus ugyanazt a rekurziós koncepciót használja, mint amit fentebb említettünk. A getCurrentUrl() metódus argumentumként kerül átadásra a driver.navigate().to() metódusnak.

Példa:

driver.get("https://www.guru99.com");
driver.navigate().to(driver.getCurrentUrl());

4) Kulcsok küldése módszer az F5 billentyű használatával

Ez a második leggyakrabban használt módszer egy oldal frissítésére SeleniumA frissítési kulcsot (F5) kapja argumentumként a sendKeys metódusnak. Mivel a sendKeys csak webes elemeken működik, nem pedig a böngészőben, először azonosítanunk kell egy érvényes webes elemet a weboldalon, majd használnunk kell a sendKeys metódust. Ez az alábbiak szerint valósítható meg.

Példa:

driver.get("https://www.guru99.com");
driver.findElement(By.id("username")).sendKeys(Keys.F5);

Mivel a billentyűleütés egy elemhez, és nem a böngésző krómjához jut el, ez az útvonal attól függ, hogy melyik elem van fókuszban. Ha a lokátor Ha egy olyan mezőre illeszkedik, amely nem tud fókuszt venni, a kulcsot lenyeli a rendszer, és az oldal soha nem töltődik be újra.

5) Kulcsok küldése metódus ASCII használatával Code

Ez a metódus ugyanazt a koncepciót használja, mint a fenti, de az F5 billentyű argumentumként való átadása helyett a frissítő kulcs kódpontját küldjük el argumentumként. Ez az alábbiak szerint valósítható meg.

driver.get("https://www.guru99.com");
driver.findElement(By.id("username")).sendKeys("\uE035");

A \uE035 érték a WebDriver Unicode kódpontja, amelyet a protokoll az F5-höz rendel, tehát ez a kódrészlet és az előző egyenértékűek.

Oldal frissítése a következővel: JavaScriptExecutor

Minden böngésző elérhetővé teszi az oldal szkriptjei számára az újratöltési funkciót, és Selenium hívhatod a JavascriptVégrehajtó felület. Ez a szokásos tartalék megoldás, amikor a WebDriver frissítési parancsát az alkalmazás vagy egy böngészőbővítmény elfogja.

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("location.reload();");

Két variációt érdemes megjegyezni:

  1. hely.újratöltés() normál újratöltést hajt végre, és esetleg a gyorsítótárból jelenítheti meg az oldalt.
  2. előzmények.go(0) egy régebbi megfelelője, amelyet egyes korábbi csomagok még mindig használnak.

A végrehajtó útvonal az oldalon belül fut, így nem vár önállóan az új dokumentumra. Utána egy explicit várakozást kell követni, pontosan úgy, ahogy a driver.navigate().refresh() után tennéd, és ne feledd, hogy egy szkript által vezérelt újratöltés nem fogja törölni a böngésző szintű párbeszédpanelt. Ha a tesztelt alkalmazás aszinkron módon tölti be a tartalmát, ugyanaz a körültekintés vonatkozik rá, mint amikor AJAX hívások kezelése Selenium webdriver.

Hogyan kerüljük el a StaleElementReferenceException kivételt frissítés után?

Egy frissítés megsemmisíti a jelenlegi DOM-ot, és egy újat épít. Minden, az újratöltés előtt rögzített WebElement egy olyan csomópontra mutat, amely már nem létezik, így a következő hívás StaleElementReferenceException kivételt dob. Ez az oldalfrissítést követő leggyakoribb hiba.

Három szokás szinte az összes ilyen kudarcot elhárítja:

  1. Utána keresd meg, soha előtte. A WebElement helyett a By lokátort tárold el, és az újratöltés befejezése után hívd meg újra a findElement függvényt.
  2. Várj egy igazi jelet. Egy olyan elem láthatóságára vonatkozó explicit várakozás, amely csak az újratöltés után létezik, sokkal megbízhatóbb, mint egy fix alvás.
  3. Frissítsd fel, majd olvasd újra. Soha ne vigyél át egy újratöltés előtt rögzített szöveges értéket vagy attribútumot egy utána végrehajtott állításba.

Az alábbi minta mindháromra vonatkozik:

WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
driver.navigate().refresh();
WebElement search = wait.until(
        ExpectedConditions.visibilityOfElementLocated(By.id("username")));
search.sendKeys("guru99");

A WebDriverWait egy Duration értéket vesz igénybe. Selenium 4, ami változás az előzőekben használt egész-másodperc konstruktorhoz képest Selenium 3. Az ilyen hibák szélesebb körű technikáit az útmutatónkban tárgyaljuk. kivételkezelés Selenium.

Összehasonlítása Selenium Oldalfrissítési módszerek

Mind a hat parancs újratölti az oldalt, de abban különböznek, hogy mitől függenek, és hogyan hibáznak.

Módszer Attól függ Újratöltések ezen keresztül Amikor ez a helyes választás
driver.navigate().refresh() Semmi extra A böngésző újratöltési parancsa Szinte mindig – az alapértelmezett
driver.get(driver.getCurrentUrl()) Egy olvasható áram URL Egy friss navigáció Ha az előzménybejegyzést is el szeretnéd hagyni
driver.navigate().to(driver.getCurrentUrl()) Egy olvasható áram URL Egy friss navigáció Ugyanaz, mint fent, a navigációs felületen keresztül írva
sendKeys(Kulcsok.F5) Fókuszálható elem Egy billentyűleütés Amikor szándékosan teszteled a billentyűzet útját
sendKeys(“\uE035”) Fókuszálható elem Egy billentyűleütés Az F5-tel megegyező, kódpontként írva
JavascriptVégrehajtó location.reload() Szkriptelés engedélyezve Egy oldal szkriptje Amikor a WebDriver parancs blokkolva van

Kezdd a refresh paranccsal, és csak akkor nyúlj egy másik sorhoz, ha az valamilyen okból meghiúsul. Ugyanez a sorrend érvényes akkor is, ha te... böngészőablak maximalizálása vagy átméretezése: előnyben részesíti a natív WebDriver hívást, és a szkript útvonalát kezeli tartalék útvonalként.

GYIK

Igen. Ha az aktuális oldalt egy POST művelet hozta létre, a böngésző kérheti az adatok újraküldését, és az újratöltés a párbeszédablak mögött megakad. Navigálás a következőhöz: URL A get() függvény használata esetén a prompt teljesen elkerülhető.

A kötések nevei eltérőek, de a parancs ugyanaz: driver.refresh() a Python, driver.Navigate().Refresh() C#-ban és driver.navigate().refresh() a következőben: JavaMindhárom ugyanazt a WebDriver utasítást adja ki.

Nem. Az újratöltés ugyanahhoz az eredethez tartozó sütiket, munkamenet-tárhelyet és helyi tárhelyet tárol, ezért a frissítés nem jó módja az állapot visszaállításának. Töröld explicit módon a sütiket, vagy indíts új böngésző-munkamenetet.

Az önjavító motorok több attribútum alapján újra feloldják a lokátort, ha az újratöltött DOM már nem egyezik, a hibaelemző modellek pedig az újratöltési időzítési pelyheket csoportosítják, így a csapat egyetlen várakozást javít ki ötven teszt helyett.

Igen, és az egysoros frissítési hívás egy javaslat, amelyet következetesen helyesen teljesít. A következő várakozás az, ahol a javaslatok hibásak lehetnek, ezért a generált időtúllépéseket összehasonlítva az alkalmazás tényleges betöltésével.

Nincs erre dedikált parancs. A csapatok a Ctrl és az F5 billentyűkombináció együttes elküldésével közelítik meg ezt az Actions osztályon keresztül, vagy a gyorsítótár letiltásával a böngésző beállításain keresztül, ami a megbízhatóbb megoldás.

A refresh paranccsal nem, ami mindig a legfelső dokumentumot tölti újra. Válts át a keretbe, és töltsd újra egy szkripttel, vagy állítsd vissza a forrás attribútumát, majd válts vissza az alapértelmezett tartalomra.

Ne találgass fix alvó értékkel. Használj explicit várakozási időt tíz-harminc másodpercig egy olyan feltétellel, amely csak az újratöltés után igaz, így a teszt akkor folytatódik, amikor az oldal elkészült.

Foglald össze ezt a bejegyzést a következőképpen: