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.
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.
- driver.navigate().refresh()-komento
- Hae-metodi
- Lähetä avaimet-komento
- Navigointimenetelmä
- 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:
- Avaa Chrome-selain verkkosivulla https://demo.guru99.com/selenium/guru99home/
- Kun sivu on ladattu onnistuneesti, päivitä verkkosivu käyttämällä driver.navigate().refresh()-metodia.
- 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.
Sivun päivityksen jälkeen sivulla oleva video on muuttunut, mikä vahvistaa, että uudelleenlataus todella tapahtui.
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:
- sijainti.reload() suorittaa normaalin uudelleenlatauksen ja saattaa näyttää sivun välimuistista.
- 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:
- Paikanna jälkeenpäin, ei koskaan ennen. Tallenna By-paikannin WebElement-elementin sijaan ja kutsu findElement-elementtiä uudelleen, kun uudelleenlataus on valmis.
- Odota oikeaa signaalia. Eksplisiittinen odotus elementin näkyvyydelle, kun elementti on olemassa vasta uudelleenlatauksen jälkeen, on paljon luotettavampi kuin kiinteä lepotila.
- 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ä.


