Opdater siden ved hjælp af Selenium Webdriver
⚡ Smart opsummering
Opdatering af en side i Selenium WebDriver genindlæser den aktuelle URL således at hvert element gengives, før assertions køres, og frameworket tilbyder fem forskellige kommandoer, der opnår den samme genindlæsning på forskellige måder.
Under testautomatisering af en webbaseret applikation er der behov for at opdatere siden flere gange for at alle webelementer kan indlæses fuldstændigt. Ved den første sideindlæsning kan nogle webelementer blive indlæst, mens det kræver en anden sideopdatering, før de alle vises. Dette kan gøres ved hjælp af refresh-kommandoen fra Selenium WebDriver.
Sådan opdaterer du siden Selenium
Browseropdatering kan udføres på følgende måder Selenium. Vi vil diskutere nedenstående måder i detaljer gennem artiklen.
- driver.navigate().refresh() kommando
- Get-metoden
- Send nøgler kommando
- Navigeringsmetode
- driver.navigate().to() kommando
1) driver.navigate().refresh() Kommando
Dette er den indbyggede metode til at udføre en sideopdateringsoperation leveret af Selenium WebDriver. Denne kommando er den mest almindeligt anvendte kommando i testautomatisering til at udføre en sideopdateringshandling. Opdateringskommandoen kan bruges på en simpel måde som nævnt nedenfor.
driver.get("https://demo.guru99.com/selenium/guru99home/");
driver.navigate().refresh();
Navigation er en grænseflade, der bruges til at udføre forskellige browserhandlinger, såsom at navigere til forrige side, navigere til næste side, opdatere siden og lukke browseren. Navigationsgrænseflademetoder kan tilgås ved hjælp af kommandoen driver.navigate(). Navigationsgrænsefladen opdaterer ingen argumenter og returnerer ingen værdi.
Eksempel:
Testscenarie:
- Åbn Chrome-browseren med websiden https://demo.guru99.com/selenium/guru99home/
- Når siden er indlæst korrekt, skal du opdatere websiden ved hjælp af driver.navigate().refresh()-metoden.
- Luk browseren ved hjælp af driver.close()-metoden
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(); } }
⚠️ Versionsnotat: Selenium Leder sendt med Selenium 4.6 og downloader automatisk den matchende browserdriver, så System.setProperty-linjen ovenfor ikke længere er nødvendig på en nuværende version — new ChromeDriver() er nok. Den oprindelige linje bevares, fordi den stadig er korrekt for Selenium 3 stilopsætninger, som eksemplet blev skrevet i forhold til.
Code Output:
På den første side, der indlæses, vises demo-hjemmesiden som vist nedenfor.
Efter sidens opdatering er videoen på siden ændret, hvilket bekræfter, at genindlæsningen rent faktisk fandt sted.
Flere andre måder at opdatere en side på
Opdateringsmetoden er ikke den eneste vej til en genindlæsning. De fire teknikker nedenfor giver det samme resultat og er værd at kende, fordi en låst applikation eller en stædig browser lejlighedsvis blokerer en af dem.
2) Get-metoden
Get-metoden kan bruges rekursivt til at opdatere en side. For at opnå dette skal vi sende en anden metode som et argument til get-metoden.
Eksempel:
driver.get("https://www.guru99.com");
driver.get(driver.getCurrentUrl());
3) Navigeringsmetode
Denne metode bruger det samme rekursionskoncept som nævnt ovenfor. Metoden getCurrentUrl() sendes som et argument til metoden driver.navigate().to().
Eksempel:
driver.get("https://www.guru99.com");
driver.navigate().to(driver.getCurrentUrl());
4) Send nøglemetode ved hjælp af F5-tasten
Dette er den næstmest anvendte metode til at opdatere en side på SeleniumDen bruger opdateringstasten (F5) som et argument til sendKeys-metoden. Da sendKeys kun fungerer på webelementer i stedet for i browseren, skal vi først identificere et gyldigt webelement på websiden og derefter bruge sendKeys-metoden. Dette kan gøres som vist nedenfor.
Eksempel:
driver.get("https://www.guru99.com"); driver.findElement(By.id("username")).sendKeys(Keys.F5);
Da tastetrykket leveres til et element i stedet for til browserens Chrome, afhænger denne rute af det element, der holder fokus. Hvis locator matcher et felt, der ikke kan tage fokus, sluges nøglen, og siden genindlæses aldrig.
5) Send nøglemetode ved hjælp af ASCII Code
Denne metode bruger det samme koncept som ovenfor, men i stedet for at sende F5-tasten som et argument, sender vi kodepunktet for opdateringstasten som et argument. Dette kan gøres som vist nedenfor.
driver.get("https://www.guru99.com"); driver.findElement(By.id("username")).sendKeys("\uE035");
Værdien \uE035 er WebDriver Unicode-kodepunktet, som protokollen knytter til F5, så dette kodestykke og det forrige er ækvivalente.
Sådan opdaterer du en side ved hjælp af JavaScriptExecutor
Hver browser eksponerer en genindlæsningsfunktion til sidescripts, og Selenium kan ringe til det via JavascriptExecutor-grænseflade. Dette er den sædvanlige alternative funktion, når WebDriver-opdateringskommandoen opfanges af applikationen eller af en browserudvidelse.
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("location.reload();");
To variationer er værd at huske:
- placering.genindlæs() udfører en normal genindlæsning og kan muligvis vise siden fra cachen.
- historie.go(0) er en ældre ækvivalent, som nogle ældre suiter stadig bruger.
Executor-ruten kører inde i siden, så den venter ikke på det nye dokument alene. Følg den op med en eksplicit ventetid præcis som du ville gøre efter driver.navigate().refresh(), og husk at en scriptdrevet genindlæsning ikke vil rydde en dialogboks på browserniveau. Hvis programmet under test indlæser sit indhold asynkront, gælder samme forsigtighed som når håndtering af AJAX-kald Selenium webdriver.
Sådan undgår du StaleElementReferenceException efter en opdatering
En opdatering ødelægger den nuværende DOM og bygger en ny. Hvert WebElement, der registreres før genindlæsningen, peger nu på en node, der ikke længere eksisterer, så det næste kald mod den udløser StaleElementReferenceException. Dette er den mest almindelige fejl, der følger en sideopdatering.
Tre vaner fjerner næsten alle disse fejl:
- Find efter, aldrig før. Gem By-locatoren i stedet for WebElement, og kald findElement igen, når genindlæsningen er færdig.
- Vent på et rigtigt signal. En eksplicit venten på synligheden af et element, der først eksisterer efter genindlæsningen, er langt mere pålidelig end en fast dvaletilstand.
- Opdater, og læs derefter igen. Medbring aldrig en tekstværdi eller en attribut, der er registreret før genindlæsningen, i en påstand, der er foretaget efter den.
Mønsteret nedenfor gælder for alle tre:
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); driver.navigate().refresh(); WebElement search = wait.until( ExpectedConditions.visibilityOfElementLocated(By.id("username"))); search.sendKeys("guru99");
WebDriverWait tager en varighed i Selenium 4, hvilket er en ændring fra heltals-sekunder-konstruktøren, der bruges i Selenium 3. Bredere teknikker til disse fejl er dækket i vores guide til undtagelseshåndtering i Selenium.
Sammenligning af Selenium Metoder til sideopdatering
Alle seks kommandoer genindlæser siden, men de adskiller sig i, hvad de afhænger af, og hvordan de fejler.
| Metode | Afhænger af | Genoplader via | Når det er det rigtige valg |
|---|---|---|---|
| driver.navigate().refresh() | Intet ekstra | Browserens genindlæsningskommando | Næsten altid — standardindstillingen |
| driver.get(driver.getCurrentUrl()) | En læsbar strøm URL | En frisk navigation | Når du også vil slette historikposten |
| driver.navigate().to(driver.getCurrentUrl()) | En læsbar strøm URL | En frisk navigation | Samme som ovenfor, skrevet via navigationsgrænsefladen |
| sendKeys(Keys.F5) | Et fokuserbart element | Et tastetryk | Når du bevidst tester tastaturstien |
| sendKeys(“\uE035”) | Et fokuserbart element | Et tastetryk | Identisk med F5, skrevet som et kodepunkt |
| JavascriptExecutor location.reload() | Scripting aktiveret | Et sidescript | Når WebDriver-kommandoen er blokeret |
Start med opdateringskommandoen, og find kun en anden række, når den fejler af en grund, du forstår. Den samme prioriterede rækkefølge gælder, når du maksimer eller tilpas størrelsen på browservinduet: foretrækker det native WebDriver-kald og behandler scriptruten som fallback.


