Uppdatera sidan med hjälp av Selenium Webdriver
⚡ Smart sammanfattning
Uppdaterar en sida i Selenium WebDriver laddar om den aktuella URL så att varje element renderas innan assertions körs, och ramverket erbjuder fem distinkta kommandon som uppnår samma omladdning på olika sätt.
Under testautomatisering av en webbaserad applikation uppstår ett behov av att sidan uppdateras flera gånger för att alla webbelement ska laddas helt. Vid den första sidans inläsning kan vissa webbelement laddas, medan det krävs en andra sidans uppdatering för att alla ska visas. Detta kan göras med hjälp av kommandot refresh som tillhandahålls av Selenium WebDriver.
Hur man uppdaterar sidan in Selenium
Webbläsarens uppdateringsoperation kan utföras på följande sätt Selenium. Vi kommer att diskutera nedan nämnda sätt i detalj genom hela artikeln.
- kommandot driver.navigate().refresh()
- Get-metoden
- Kommandot Skicka nycklar
- Navigeringsmetod
- kommandot driver.navigate().to()
1) driver.navigate().refresh()-kommandot
Detta är den inbyggda metoden för att utföra en siduppdateringsoperation som tillhandahålls av Selenium WebDriver. Detta kommando är det vanligaste kommandot inom testautomation för att utföra en siduppdateringsoperation. Refresh-kommandot kan användas på ett enkelt sätt som nämns nedan.
driver.get("https://demo.guru99.com/selenium/guru99home/");
driver.navigate().refresh();
Navigering är ett gränssnitt som används för att utföra olika webbläsaråtgärder, såsom att navigera till föregående sida, navigera till nästa sida, uppdatera sidan och stänga webbläsaren. Navigeringsgränssnittsmetoder kan nås med kommandot driver.navigate(). Uppdateringsmetoden i navigeringsgränssnittet tar inga argument och returnerar inget värde.
Exempel:
Testscenario:
- Öppna Chrome-webbläsaren med webbsidan https://demo.guru99.com/selenium/guru99home/
- När sidan har laddats uppdaterar du webbsidan med metoden driver.navigate().refresh().
- Stäng webbläsaren med metoden 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(); } }
⚠️ Versionsnotering: Selenium Chefen skickades med Selenium 4.6 och laddar ner matchande webbläsardrivrutin automatiskt, så raden System.setProperty ovan behövs inte längre på en aktuell version — new ChromeDriver() är tillräckligt. Den ursprungliga raden behålls eftersom den fortfarande är korrekt för Selenium 3 stiluppsättningar som exemplet skrevs mot.
Code Produktion:
På den första sidan laddas demosidan och visas som nedan.
Efter sidans uppdatering har videon på sidan ändrats, vilket bekräftar att omladdningen faktiskt skedde.
Flera andra sätt att uppdatera en sida
Uppdateringsmetoden är inte den enda vägen till en omladdning. De fyra teknikerna nedan ger samma resultat och är värda att känna till, eftersom en låst applikation eller en envis webbläsare ibland blockerar en av dem.
2) Get-metoden
Metoden get kan användas rekursivt för att uppdatera en sida. För att uppnå detta behöver vi skicka en annan metod som argument till get-metoden.
Exempel:
driver.get("https://www.guru99.com");
driver.get(driver.getCurrentUrl());
3) Navigeringsmetod
Den här metoden använder samma rekursionskoncept som nämnts ovan. Metoden getCurrentUrl() skickas som ett argument till metoden driver.navigate().to().
Exempel:
driver.get("https://www.guru99.com");
driver.navigate().to(driver.getCurrentUrl());
4) Skicka nycklar-metoden med F5-tangenten
Detta är den näst vanligaste metoden för att uppdatera en sida på SeleniumDen tar uppdateringstangenten (F5) som ett argument till sendKeys-metoden. Eftersom sendKeys bara fungerar på webbelement snarare än i webbläsaren måste vi först identifiera ett giltigt webbelement på webbsidan och sedan använda sendKeys-metoden. Detta kan åstadkommas enligt nedan.
Exempel:
driver.get("https://www.guru99.com"); driver.findElement(By.id("username")).sendKeys(Keys.F5);
Eftersom tangenttryckningen levereras till ett element snarare än till webbläsarens Chrome, beror denna rutt på vilket element som håller fokus. Om locator matchar ett fält som inte kan ta fokus, nyckeln sväljs och sidan laddas aldrig om.
5) Skicka nycklar-metoden med ASCII Code
Den här metoden använder samma koncept som ovan, men istället för att skicka F5-tangenten som ett argument skickar vi kodpunkten för uppdateringstangenten som ett argument. Detta kan åstadkommas enligt nedan.
driver.get("https://www.guru99.com"); driver.findElement(By.id("username")).sendKeys("\uE035");
Värdet \uE035 är WebDriver Unicode-kodpunkten som protokollet mappar till F5, så det här och det föregående kodavsnittet är likvärdiga.
Hur man uppdaterar en sida med hjälp av JavaScriptExecutor
Varje webbläsare exponerar en omladdningsfunktion för sidskript, och Selenium kan ringa det via JavascriptExecutor-gränssnitt. Detta är den vanliga reservlösningen när WebDriver-uppdateringskommandot stoppas av programmet eller av ett webbläsartillägg.
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("location.reload();");
Två varianter är värda att komma ihåg:
- plats.omladdning() utför en normal omladdning och kan hantera sidan från cachen.
- historia.go(0) är en äldre motsvarighet som vissa äldre programsviter fortfarande använder.
Executor-rutten körs inuti sidan, så den väntar inte på det nya dokumentet på egen hand. Följ den med en explicit väntan precis som du skulle göra efter driver.navigate().refresh(), och kom ihåg att en skriptdriven omladdning inte kommer att rensa en dialogruta på webbläsarnivå. Om programmet som testas laddar sitt innehåll asynkront gäller samma försiktighet som när hantera AJAX-anrop i Selenium webbdrivrutin.
Hur man undviker StaleElementReferenceException efter en uppdatering
En uppdatering förstör den nuvarande DOM:en och skapar en ny. Varje WebElement som registrerats före omladdningen pekar nu på en nod som inte längre finns, så nästa anrop mot den utlöser StaleElementReferenceException. Detta är det enskilt vanligaste felet som följer en siduppdatering.
Tre vanor tar bort nästan alla dessa misslyckanden:
- Lokalisera efter, aldrig före. Lagra By-lokaliseringsverktyget istället för WebElement och anropa findElement igen när omladdningen är klar.
- Vänta på en riktig signal. En uttrycklig väntan på synligheten av ett element som bara existerar efter omladdningen är mycket mer tillförlitlig än en fast sömn.
- Uppdatera och läs sedan om. Använd aldrig ett textvärde eller ett attribut som hämtats före omladdningen i en påstående som görs efter det.
Mönstret nedan gäller alla 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 Duration i Selenium 4, vilket är en ändring från heltalssekunderskonstruktorn som används i Selenium 3. Mer omfattande tekniker för dessa fel behandlas i vår guide till undantagshantering i Selenium.
Jämförelse av Selenium Metoder för siduppdatering
Alla sex kommandon laddar om sidan, men de skiljer sig åt i vad de är beroende av och i hur de misslyckas.
| Metod | Beror på | Laddar om via | När det är rätt val |
|---|---|---|---|
| drivrutin.navigera().uppdatera() | Inget extra | Kommandot för webbläsarens omladdning | Nästan alltid — standardinställningen |
| drivrutin.get(drivrutin.getCurrencyUrl()) | En läsbar ström URL | En ny navigering | När du även vill ta bort historikposten |
| driver.navigate().to(driver.getCurrentUrl()) | En läsbar ström URL | En ny navigering | Samma som ovan, skrivet via navigationsgränssnittet |
| sendKeys(Keys.F5) | Ett fokuserbart element | Ett tangenttryck | När du avsiktligt testar tangentbordssökvägen |
| sendKeys("\uE035") | Ett fokuserbart element | Ett tangenttryck | Identisk med F5, skriven som en kodpunkt |
| JavascriptExekutor location.reload() | Skript aktiverat | Ett sidskript | När WebDriver-kommandot är blockerat |
Börja med kommandot uppdatera och använd en annan rad endast när det misslyckas av en anledning du förstår. Samma ordning gäller när du maximera eller ändra storlek på webbläsarfönstret: föredra det inbyggda WebDriver-anropet och behandla skriptvägen som reserv.


