Päivitä sivu käyttämällä Selenium Web-ohjain

⚡ Älykäs yhteenveto

Sivun päivittäminen kohdassa Selenium WebDriver lataa nykyisen uudelleen URL niin että jokainen elementti renderöidään ennen väitteiden suorittamista, ja kehys tarjoaa viisi erillistä komentoa, jotka saavuttavat saman uudelleenlatauksen eri tavoin.

  • 🔘 Oletusvalinta: driver.navigate().refresh() on sisäänrakennettu uudelleenlatausfunktio, joka ei ota vastaan ​​argumentteja eikä palauta arvoa.
  • ☑️ Rekursiiviset variantit: getCurrentUrl()-funktion välittäminen get()- tai navigate().to()-funktiolle lataa saman osoitteen uudelleen.
  • Näppäimistöreitti: sendKeys hyväksyy Keys.F5:n tai Unicode-arvon \uE035, mutta sen on kohdistuttava oikeaan elementtiin.
  • 🧪 Skriptin reitti: JavascriptFunktiota location.reload() suorittava suoritin toimii, kun WebDriver-komento on estetty.
  • 🛠️ Uudelleenlatauksen jälkeen: Jokainen aiemmin kaapattu elementtiviittaus vanhenee ja se on löydettävä uudelleen.
  • 📊 Moderni kokoonpano: Selenium Manager saapui versioon 4.6, joten ajuripolkua ei enää tarvitse asettaa käsin.

Päivitä sivu käyttämällä Selenium WebDriver-komennot

Verkkopohjaisen sovelluksen testiautomaation aikana sivua on päivitettävä useita kertoja, jotta kaikki verkkoelementit latautuvat kokonaan. Ensimmäisellä sivun latauksella jotkin verkkoelementit saattavat latautua, kun taas kaikkien elementtien näkyminen vaatii toisen sivun päivityksen. Tämä voidaan tehdä käyttämällä refresh-komentoa, jonka tarjoaa Selenium WebDriver.

Kuinka päivittää sivu sisään Selenium

Selaimen päivitys voidaan suorittaa seuraavilla tavoilla Selenium. Keskustelemme alla mainituista tavoista yksityiskohtaisesti koko artikkelin ajan.

  1. driver.navigate().refresh()-komento
  2. Hae-metodi
  3. Lähetä avaimet-komento
  4. Navigointimenetelmä
  5. driver.navigate().to()-komento

1) driver.navigate().refresh()-komento

Tämä on sisäänrakennettu menetelmä sivun päivitystoiminnon suorittamiseen, jonka tarjoaa Selenium WebDriver. Tämä komento on yleisimmin käytetty komento testiautomaatiossa sivun päivitystoiminnon suorittamiseen. Päivityskomentoa voidaan käyttää yksinkertaisella tavalla, kuten alla kuvataan.

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

Navigointi on käyttöliittymä, jota käytetään erilaisten selaintoimintojen suorittamiseen, kuten edelliselle sivulle siirtymiseen, seuraavalle sivulle siirtymiseen, sivun päivittämiseen ja selaimen sulkemiseen. Navigointikäyttöliittymän metodeihin pääsee käsiksi komennolla driver.navigate(). Navigointikäyttöliittymän päivitysmetodi ei ota vastaan ​​argumentteja eikä palauta mitään arvoa.

Esimerkiksi:

Testi skenaario:

  1. Avaa Chrome-selain verkkosivulla https://demo.guru99.com/selenium/guru99home/
  2. Kun sivu on ladattu onnistuneesti, päivitä verkkosivu käyttämällä driver.navigate().refresh()-metodia.
  3. Sulje selain käyttämällä driver.close()-metodia

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

⚠️ Versiohuomautus: Selenium Päällikkö toimitettuna Selenium 4.6 ja lataa vastaavan selainohjaimen automaattisesti, joten yllä olevaa System.setProperty-riviä ei enää tarvita nykyisessä versiossa — new ChromeDriver() riittää. Alkuperäinen rivi säilytetään, koska se on edelleen oikein Selenium 3-tyylinen asetus, jota esimerkki on kirjoitettu vasten.

Code lähtö:

Aloitussivun latauksessa demon kotisivu näyttää alla olevan kuvan mukaisesti.

Guru99 demon kotisivu alkulatauksen yhteydessä ennen refresh-komennon suorittamista

Sivun päivityksen jälkeen sivulla oleva video on muuttunut, mikä vahvistaa, että uudelleenlataus todella tapahtui.

Guru99 demon kotisivu driver.navigate().refresh()-funktion jälkeen, jossa näkyy eri video

Useita muita tapoja päivittää sivu

Päivitysmenetelmä ei ole ainoa tapa ladata sivu uudelleen. Alla olevat neljä tekniikkaa tuottavat saman tuloksen ja ne kannattaa tietää, koska lukittu sovellus tai itsepäinen selain joskus estää jonkin niistä.

2) Hae-metodi

get-metodia voidaan käyttää rekursiivisesti sivun päivittämiseen. Tätä varten meidän on annettava get-metodille argumenttina toinen metodi.

Esimerkiksi:

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

3) Navigointimenetelmä

Tämä metodi käyttää samaa rekursion käsitettä kuin edellä mainittiin. getCurrentUrl()-metodi annetaan argumenttina driver.navigate().to()-metodille.

Esimerkiksi:

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

4) Lähetä avaimet -menetelmä F5-näppäimellä

Tämä on toiseksi yleisin tapa päivittää sivu SeleniumSe käyttää refresh-näppäintä (F5) argumenttina sendKeys-metodille. Koska sendKeys toimii vain verkkoelementtien kanssa eikä selaimessa, meidän on ensin tunnistettava kelvollinen verkkoelementti verkkosivulta ja sitten käytettävä sendKeys-metodia. Tämä voidaan tehdä alla esitetyllä tavalla.

Esimerkiksi:

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

Koska näppäinpainallus välitetään elementille eikä selaimen Chromelle, tämä reitti riippuu siitä, mikä elementti on fokuksessa. Jos paikannin Jos kenttään ei voida asettaa kohdistusta, avain syötetään eikä sivu lataudu uudelleen.

5) Lähetä avaimet -menetelmä ASCII-merkistöä käyttäen Code

Tämä metodi käyttää samaa konseptia kuin yllä, mutta F5-näppäimen sijaan argumenttina lähetetään päivitysnäppäimen koodipiste. Tämä voidaan toteuttaa alla esitetyllä tavalla.

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

Arvo \uE035 on WebDriver Unicode -koodipiste, jonka protokolla yhdistää F5:een, joten tämä ja edellinen koodinpätkä ovat yhtäpitäviä.

Sivun päivittäminen käyttämällä JavaScriptExecutor

Jokainen selain tarjoaa uudelleenlataustoiminnon sivuskripteille ja Selenium voi soittaa sen kautta JavascriptSuoritusliittymä. Tämä on tavallinen varajärjestelmä, kun sovellus tai selainlaajennus sieppaa WebDriver-päivityskomennon.

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

Kaksi variaatiota on syytä muistaa:

  1. sijainti.reload() suorittaa normaalin uudelleenlatauksen ja saattaa näyttää sivun välimuistista.
  2. historia.go(0) on vanhempi vastine, jota jotkin vanhat ohjelmistot edelleen käyttävät.

Suoritusreitti kulkee sivun sisällä, joten se ei odota uutta dokumenttia erikseen. Sen perään lisätään tarkka odotus, aivan kuten driver.navigate().refresh():n jälkeen, ja muista, että komentosarjaohjattu uudelleenlataus ei tyhjennä selaintason valintaikkunaa. Jos testattava sovellus lataa sisällön asynkronisesti, on noudatettava samaa varovaisuutta kuin silloin, kun AJAX-kutsujen käsittely Selenium web-ajuri.

StaleElementReferenceExceptionin välttäminen päivityksen jälkeen

Päivitys tuhoaa nykyisen DOM:n ja rakentaa uuden. Jokainen ennen uudelleenlatausta tallennettu WebElement osoittaa nyt solmuun, jota ei enää ole olemassa, joten seuraava sitä vastaan ​​tehty kutsu aiheuttaa StaleElementReferenceException-poikkeuksen. Tämä on yleisin sivun päivityksen jälkeinen virhe.

Kolme tapaa poistaa lähes kaikki nämä epäonnistumiset:

  1. Paikanna jälkeenpäin, ei koskaan ennen. Tallenna By-paikannin WebElement-elementin sijaan ja kutsu findElement-elementtiä uudelleen, kun uudelleenlataus on valmis.
  2. Odota oikeaa signaalia. Eksplisiittinen odotus elementin näkyvyydelle, kun elementti on olemassa vasta uudelleenlatauksen jälkeen, on paljon luotettavampi kuin kiinteä lepotila.
  3. Kertaa ja lue sitten uudelleen. Älä koskaan sisällytä ennen uudelleenlatausta tallennettua tekstiarvoa tai attribuuttia sen jälkeen tehtyyn väitteeseen.

Alla oleva kaava pätee kaikkiin kolmeen:

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

WebDriverWait ottaa keston (Duration) Selenium 4, mikä on muutos verrattuna kokonaisluku-sekunti-konstruktoriin, jota käytettiin Selenium 3. Näiden vikojen laajempia tekniikoita käsitellään oppaassamme poikkeusten käsittely Selenium.

Vertailu Selenium Sivun päivitysmenetelmät

Kaikki kuusi komentoa lataavat sivun uudelleen, mutta ne eroavat toisistaan ​​siinä, mihin ne ovat riippuvaisia ​​ja miten ne epäonnistuvat.

Menetelmä Riippuu Lataukset uudelleen kautta Kun se on oikea valinta
driver.navigate().refresh() Ei mitään ylimääräistä Selaimen uudelleenlatauskomento Lähes aina – oletusarvo
ajuri.get(ajuri.getCurrentUrl()) Luettavissa oleva virta URL Uusi navigointi Kun haluat myös poistaa historiamerkinnän
driver.navigate().to(driver.getCurrentUrl()) Luettavissa oleva virta URL Uusi navigointi Sama kuin yllä, kirjoitettuna navigointikäyttöliittymän kautta
sendKeys(Keys.F5) Tarkennettava elementti Näppäinpainallus Kun testaat tarkoituksella näppäimistöpolkua
sendKeys(“\uE035”) Tarkennettava elementti Näppäinpainallus Identtinen F5:n kanssa, kirjoitettuna koodipisteenä
JavascriptSuorittajan sijainti.reload() Skriptaus käytössä Sivun skripti Kun WebDriver-komento on estetty

Aloita refresh-komennolla ja tartu seuraavaan riviin vasta, kun se epäonnistuu ymmärrettävästä syystä. Sama järjestys pätee, kun suurenna tai muuta selainikkunan kokoa: suosi natiivia WebDriver-kutsua ja käsittele komentosarjan reittiä varareittinä.

UKK

Se voi. Jos nykyinen sivu on tuotettu POST-komennolla, selain saattaa pyytää tietojen uudelleenlähettämistä, jolloin uudelleenlataus pysähtyy kyseisen valintaikkunan taakse. Navigointi sivulle URL jälleen get()-funktiolla kehote vältetään kokonaan.

Sidonnan nimet eroavat toisistaan, mutta komento on sama: driver.refresh() kohdassa Python, driver.Navigate().Refresh() C#:ssa ja driver.navigate().refresh() JavaKaikki kolme antavat saman WebDriver-käskyn.

Ei. Uudelleenlataus pitää evästeet, istuntotallennuksen ja paikallisen tallennustilan samassa paikassa, minkä vuoksi päivittäminen on huono tapa palauttaa tilaa. Poista evästeet erikseen tai aloita uusi selainistunto.

Itsekorjautuvat moottorit ratkaisevat paikantimen uudelleen useiden attribuuttien perusteella, kun uudelleenladattu DOM ei enää täsmää, ja vika-analyysimallit ryhmittelevät uudelleenlatauksen ajoituksen hiutaleita, joten tiimi korjaa yhden odotusajan viidenkymmenen testin sijaan.

Kyllä, ja yhden rivin päivityskutsu on ehdotus, joka onnistuu johdonmukaisesti. Sitä seuraava odotus on se kohta, jossa ehdotukset menevät pieleen, joten vertaa generoitua aikakatkaisua siihen, miten sovellus todellisuudessa latautuu.

Ei ole olemassa erillistä komentoa. Tiimit voivat approksimoida sellaisen lähettämällä Ctrl- ja F5-näppäinyhdistelmän Actions-luokan kautta tai poistamalla välimuistin käytöstä selaimen asetuksista, mikä on luotettavampi tapa.

Ei refresh-komennolla, joka lataa aina päällimmäisen dokumentin uudelleen. Vaihda kehykseen ja lataa se uudelleen skriptillä tai nollaa sen lähdeattribuutti ja vaihda sitten takaisin oletussisältöön.

Älä arvaa kiinteällä lepotila-arvolla. Käytä 10–30 sekunnin odotusaikaa ehdolla, joka on tosi vasta uudelleenlatauksen jälkeen, jotta testi jatkuu heti, kun sivu on valmis.

Tiivistä tämä viesti seuraavasti: