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.
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.
- driver.navigate().refresh() parancs
- Get metódus
- Kulcsok parancs küldése
- Navigációs módszer
- 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:
- Nyissa meg a Chrome böngészőt a weboldallal https://demo.guru99.com/selenium/guru99home/
- Miután az oldal sikeresen betöltődött, frissítsd a weboldalt a driver.navigate().refresh() metódussal.
- 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.
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.
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:
- 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.
- 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:
- 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.
- 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.
- 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.


