Oppdater siden ved å bruke Selenium Webdriver

⚡ Smart oppsummering

Oppdatere en side i Selenium WebDriver laster inn gjeldende URL slik at hvert element gjengis før påstander kjøres, og rammeverket tilbyr fem forskjellige kommandoer som oppnår samme omlasting på forskjellige måter.

  • 🔘 Standardvalg: driver.navigate().refresh() er den innebygde omlastingen og tar ingen argumenter og returnerer ingen verdi.
  • ☑️ Rekursive varianter: Hvis getCurrentUrl() sendes til get() eller navigate().to(), laster den samme adressen på nytt.
  • Tastaturrute: sendKeys aksepterer Keys.F5 eller Unicode-verdien \uE035, men den må målrette et reelt element.
  • 🧪 Skriptrute: JavascriptUtføreren som kjører location.reload() fungerer når WebDriver-kommandoen er blokkert.
  • 🛠️ Etter omlasting: Alle elementreferanser som er registrert tidligere blir foreldet og må finnes på nytt.
  • 📊 Moderne oppsett: Selenium Manager kom i versjon 4.6, så driverbanen trenger ikke lenger å angis manuelt.

Oppdater siden ved hjelp av Selenium WebDriver-kommandoer

Under testautomatisering av en nettbasert applikasjon må siden oppdateres flere ganger for at alle webelementene skal lastes inn fullstendig. Ved første sideinnlasting kan noen webelementer lastes inn, mens det kreves en andre sideoppdatering før alle vises. Dette kan gjøres ved hjelp av oppdateringskommandoen som leveres av Selenium WebDriver.

Slik oppdaterer du siden Selenium

Nettleseroppdatering kan utføres på følgende måter Selenium. Vi vil diskutere de nedenfor nevnte måtene i detalj gjennom artikkelen.

  1. driver.navigate().refresh()-kommandoen
  2. Get-metoden
  3. Send nøkler kommando
  4. Navigeringsmetode
  5. driver.navigate().to() kommando

1) driver.navigate().refresh() Kommando

Dette er den innebygde metoden for å utføre en sideoppdateringsoperasjon levert av Selenium WebDriver. Denne kommandoen er den mest brukte kommandoen i testautomatisering for å utføre en sideoppdateringsoperasjon. Oppdateringskommandoen kan brukes på en enkel måte som nevnt nedenfor.

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

Navigasjon er et grensesnitt som brukes til å utføre forskjellige nettleseroperasjoner, som å navigere til forrige side, navigere til neste side, oppdatere siden og lukke nettleseren. Metoder i navigasjonsgrensesnittet kan nås ved hjelp av kommandoen driver.navigate(). Oppdateringsmetoden i navigasjonsgrensesnittet tar ingen argumenter og returnerer ingen verdi.

Eksempel:

Testscenario:

  1. Åpne Chrome-nettleseren med nettsiden https://demo.guru99.com/selenium/guru99home/
  2. Når siden er lastet inn, oppdaterer du nettsiden ved hjelp av driver.navigate().refresh()-metoden.
  3. Lukk nettleseren ved hjelp av 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();
}
}

⚠️ Versjonsmerknad: Selenium Leder sendt med Selenium 4.6 og laster ned den samsvarende nettleserdriveren automatisk, slik at System.setProperty-linjen ovenfor ikke lenger er nødvendig på en gjeldende versjon — new ChromeDriver() er nok. Den opprinnelige linjen beholdes fordi den fortsatt er korrekt for Selenium 3-stiloppsett eksemplet ble skrevet mot.

Code Utgang:

På den første siden lastes inn, gjengis demo-hjemmesiden som vist nedenfor.

Guru99 demo-hjemmeside ved første innlasting før oppdateringskommandoen kjøres

Etter at siden ble oppdatert, har videoen på siden endret seg, noe som bekrefter at innlastingen faktisk skjedde.

Guru99 demo-hjemmeside etter at driver.navigate().refresh() viser en annen video

Flere andre måter å oppdatere en side på

Oppdateringsmetoden er ikke den eneste måten å laste inn data på. De fire teknikkene nedenfor gir samme resultat og er verdt å vite, fordi et låst program eller en sta nettleser av og til blokkerer en av dem.

2) Get-metoden

get-metoden kan brukes rekursivt for å oppdatere en side. For å oppnå dette må vi sende en annen metode som et argument til get-metoden.

Eksempel:

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

3) Navigeringsmetoden

Denne metoden bruker samme rekursjonskonsept som nevnt ovenfor. Metoden getCurrentUrl() sendes som et argument til driver.navigate().to()-metoden.

Eksempel:

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

4) Send nøkkelmetode ved bruk av F5-tasten

Dette er den nest mest brukte metoden for å oppdatere en side på SeleniumDen tar oppdateringstasten (F5) som et argument til sendKeys-metoden. Siden sendKeys bare fungerer på webelementer i stedet for i nettleseren, må vi først identifisere et gyldig webelement på nettsiden og deretter bruke sendKeys-metoden. Dette kan gjøres som vist nedenfor.

Eksempel:

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

Fordi tastetrykket leveres til et element i stedet for nettleserens Chrome, avhenger denne ruten av elementet som holder fokus. Hvis locator samsvarer med et felt som ikke kan ta fokus, nøkkelen svelges og siden lastes aldri inn på nytt.

5) Send nøkkelmetode ved bruk av ASCII Code

Denne metoden bruker samme konsept som ovenfor, men i stedet for å sende F5-tasten som et argument, sender vi kodepunktet til oppdateringstasten som et argument. Dette kan gjøres som vist nedenfor.

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

Verdien \uE035 er WebDriver Unicode-kodepunktet som protokollen tilordner til F5, så dette kodestykket og det forrige er likeverdige.

Slik oppdaterer du en side ved hjelp av JavaScriptExecutor

Alle nettlesere eksponerer en innlastingsfunksjon for sideskript, og Selenium kan ringe det gjennom JavascriptUtførergrensesnitt. Dette er den vanlige reserveløsningen når WebDriver-oppdateringskommandoen blir fanget opp av programmet eller en nettleserutvidelse.

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

To varianter er verdt å huske på:

  1. plassering.last inn på nytt() utfører en normal innlasting og kan betjene siden fra hurtigbufferen.
  2. historie.gå(0) er en eldre ekvivalent som noen eldre pakker fortsatt bruker.

Utførelsesruten kjører inne i siden, så den venter ikke på det nye dokumentet alene. Følg den med en eksplisitt venting akkurat som du ville gjort etter driver.navigate().refresh(), og husk at en skriptdrevet innlasting ikke vil tømme en dialogboks på nettlesernivå. Hvis applikasjonen som testes laster inn innholdet asynkront, gjelder samme forsiktighet som når håndtering av AJAX-kall i Selenium webdriver.

Slik unngår du StaleElementReferenceException etter en oppdatering

En oppdatering ødelegger den gjeldende DOM-en og bygger en ny. Hvert WebElement som fanges opp før innlastingen peker nå på en node som ikke lenger eksisterer, så det neste kallet mot den kaster StaleElementReferenceException. Dette er den vanligste feilen som følger en sideoppdatering.

Tre vaner fjerner nesten alle disse feilene:

  1. Finn etter, aldri før. Lagre By-lokatoren i stedet for WebElement, og kall findElement på nytt når innlastingen er fullført.
  2. Vent på et skikkelig signal. En eksplisitt venting på synligheten til et element som bare eksisterer etter omlasting er langt mer pålitelig enn en fast søvn.
  3. Oppdater, og les deretter på nytt. Aldri overfør en tekstverdi eller et attributt som er registrert før innlasting, til en påstand som er gjort etter den.

Mønsteret nedenfor gjelder 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 tar en varighet på Selenium 4, som er en endring fra heltallssekunder-konstruktøren som brukes i Selenium 3. Mer omfattende teknikker for disse feilene er dekket i vår veiledning til unntakshåndtering i Selenium.

Sammenligning av Selenium Metoder for sideoppdatering

Alle seks kommandoene laster siden på nytt, men de er forskjellige i hva de er avhengige av og hvordan de feiler.

Metode Kommer an på Laster på nytt via Når det er det riktige valget
driver.navigate().refresh() Ikke noe ekstra Kommandoen for nettleserinnlasting Nesten alltid – standardinnstillingen
driver.get(driver.getCurrentUrl()) En lesbar strøm URL En frisk navigasjon Når du også vil slette historieoppføringen
driver.navigate().to(driver.getCurrentUrl()) En lesbar strøm URL En frisk navigasjon Samme som ovenfor, skrevet via navigasjonsgrensesnittet
sendKeys(Keys.F5) Et fokuserbart element Et tastetrykk Når du bevisst tester tastaturbanen
sendKeys(“\uE035”) Et fokuserbart element Et tastetrykk Identisk med F5, skrevet som et kodepunkt
JavascriptUtførerlokasjon.reload() Skripting aktivert Et sideskript Når WebDriver-kommandoen er blokkert

Start med oppdater-kommandoen, og bruk bare en ny rad når den mislykkes av en grunn du forstår. Samme prioriterte rekkefølge gjelder når du maksimere eller endre størrelsen på nettleservinduet: foretrekker det innebygde WebDriver-kallet og behandler skriptruten som reserve.

Spørsmål og svar

Det kan det. Hvis den gjeldende siden ble produsert av en POST, kan nettleseren be om å sende dataene på nytt, og innlastingen stopper bak den dialogboksen. Navigering til URL igjen, med get() unngås ledeteksten helt.

Bindingsnavnene er forskjellige, men kommandoen er den samme: driver.refresh() i Python, driver.Navigate().Refresh() i C# og driver.navigate().refresh() i JavaAlle tre utsteder den identiske WebDriver-instruksjonen.

Nei. En ny innlasting holder informasjonskapsler, øktlagring og lokal lagring for samme opprinnelse, og det er derfor oppdatering er en dårlig måte å tilbakestille tilstanden på. Slett informasjonskapsler eksplisitt eller start en ny nettleserøkt i stedet.

Selvreparerende motorer løser opp en lokator på nytt fra flere attributter når den omlastede DOM-en ikke lenger samsvarer, og feilanalysemodeller klynger omlastingstidspunktflaker slik at teamet fikser én ventetid i stedet for femti tester.

Ja, og oppdateringsoppfordringen på én linje er et forslag som det konsekvent får riktig. Ventingen som må følge etter er der forslagene går galt, så sjekk eventuell generert tidsavbrudd mot hvordan applikasjonen faktisk laster.

Det finnes ingen dedikert kommando. Teamene når frem til én ved å sende Ctrl og F5 samtidig gjennom Actions-klassen, eller ved å deaktivere hurtigbufferen via nettleseralternativer, som er den mest pålitelige ruten.

Ikke med refresh-kommandoen, som alltid laster inn det øverste dokumentet på nytt. Bytt til rammen og last den inn på nytt med et skript, eller tilbakestill kildeattributtet, og bytt deretter tilbake til standardinnholdet.

Ikke gjett med en fast søvn. Bruk en eksplisitt ventetid på ti til tretti sekunder på en betingelse som bare er sann etter at den er lastet inn på nytt, slik at testen fortsetter i det øyeblikket siden er klar.

Oppsummer dette innlegget med: