Vahvista elementti läsnä ja odota komentoa sisään Selenium

⚡ Älykäs yhteenveto

Tarkista elementin läsnäolo ja waitFor-komennot Selenium IDE varmistaa, että sivu sisältää testin odottamat elementit ja tekstin, ja keskeyttää toiston, kunnes dynaaminen ehto toteutuu, ennen kuin seuraava vaihe suoritetaan.

  • 🔘 Elementtitarkistukset: verifyElementPresent palauttaa arvon TRUE, kun paikannin vastaa jotakin sivulla olevaa funktiota, ja verifyElementNotPresent on sen täydellinen käänteisarvo.
  • ☑️ Tekstitarkistukset: verifyTextPresent hakee koko sivulta ja on kirjainkokoriippuvainen, joten ”Atlanta” ei koskaan löydy hakusanasta ”atlanta”.
  • Sijaintitarkastukset: verifyElementPositionLeft ja verifyElementPositionTop vertaavat elementin pikselien siirtymää sivun reunasta.
  • 🧪 Sivun lataukset: andWait-komennot, kuten clickAndWait, keskeyttävät skriptin, kunnes uusi sivu on latautunut.
  • 🛠️ Dynaaminen sisältö: waitFor-komennot odottavat ehtoa sivun latautumisen sijaan, mikä sopii AJAX-näyttöihin, jotka eivät koskaan lataudu uudelleen.
  • 📊 Nykyinen IDE: Selainlaajennus nimeää nämä vaiheet uudelleen ja antaa jokaiselle odotuskomennolle oman millisekunnin aikakatkaisun.

Varmista elementin läsnäolo ja waitFor-komento Selenium IDE

Tallennettu Selenium IDE skripti napsauttaa ja kirjoittaa, mutta se ei koskaan yksinään päätä, toimiiko sovellus oikein. Kaksi komentoryhmää tekevät tämän: todentaa komentoja, jotka tarkistavat sivun tilan, ja odottaa komentoja, jotka pidättävät suoritusta, kunnes sivu on valmis tarkistettavaksi.

⚠️ Huomautus versioista: alla olevat kuvakaappaukset ovat alkuperäisestä Firefox-laajennus Selenium IDE, jota ei enää jaeta, ja he käyttävät sen camelCase Selenese -nimiä. Nykyinen IDE on Chrome, Firefox ja Edge selainlaajennusTässä kuvattu toimintatapa pätee edelleen, mutta useiden komentojen nimiä on muutettu — karttaping taulukko näkyy myöhemmin tässä artikkelissa, ja jokainen alkuperäinen komento ja kuvakaappaus säilytetään täsmälleen sellaisena kuin se julkaistiin.

Tarkista elementin läsnäolo

Voimme käyttää seuraavia kahta komentoa elementin olemassaolon tarkistamiseen:

  • verifyElementPresent – palauttaa TRUE, jos määritetty elementti LÖYTYI sivulta; EPÄTOSI, jos toisin
  • verifyElementNotPresent – palauttaa TRUE, jos määritettyä elementtiä EI LÖYTYNYT mistään sivulta; EPÄTOSI, jos se on läsnä.

Molemmat komennot ottavat elementin paikannin vuonna Target kenttä — tunnus, nimi, CSS-valitsin, linkkiteksti tai XPath lauseke — eikä kumpikaan tarvitse arvoa.

Alla oleva testiskripti varmistaa, että Käyttäjänimi-tekstiruutu on sisällä Mercury Tours-kotisivu, kun Etunimi-tekstikenttä ei ole. Etunimi-tekstikenttä on itse asiassa elementti, joka on läsnä rekisteröintisivulla Mercury Retket, ei etusivulla.

Selenium IDE-skripti, joka käyttää verifyElementPresent-elementtiä käyttäjäNimi-kentässä ja verifyElementNotPresent-elementtiä etunimi-kentässä

Koska nämä ovat todentaa komentojen sijaan puolustaa komentoja, lokiin kirjataan virhe ja loput vaiheet suoritetaan edelleen. Tätä eroa käsitellään tarkemmin jäljempänä.

Tarkista tietyn tekstin läsnäolo komennossa Selenium

Elementin olemassaolon tarkistaminen ei aina riitä – testin on usein vahvistettava käyttäjälle näytetyt sanat. Kaksi tekstikomentoa kattavat tämän tapauksen.

  • verifyTextPresent – palauttaa TRUE, jos määritetty tekstimerkkijono LÖYTYI jostain sivulta; EPÄTOSI, jos toisin
  • verifyTextNotPresent – palauttaa TRUE, jos määritettyä tekstimerkkijonoa EI LÖYTYNYT mistään sivulta; EPÄTOSI, jos se löydettiin

Muista, että nämä komennot erottelevat isot ja pienet kirjaimet.

Alla oleva loki näyttää saman sivun tarkistettuna kahdesti ja saman lauseen kahdella kirjoitusasulla.

Selenium IDE-loki, joka näyttää verifyTextPresentin läpäisevän Atlantan ja Las Vegasin välisen yhteyden, mutta epäonnistuvan Atlantan ja Las Vegasin välillä.

Yllä olevassa skenaariossa hakua ”Atlanta to Las Vegas” käsiteltiin eri tavalla kuin hakua ”atlanta to Las Vegas”, koska hakusanan ”Atlanta” kirjain ”A” oli isolla kirjaimella ensimmäisessä ja pienellä kirjaimella toisessa. Kun verifyTextPresent-komentoa käytettiin molemmissa, toinen onnistui ja toinen epäonnistui.

Tarkista elementin tietty sijainti

Asetteluvirheet harvoin rikkovat paikantimen, joten läsnäolotarkistukset eivät niitä havaitse. Paikannuskomennot paikaavat tämän aukon.

Selenium IDE ilmaisee elementin sijainnin mittaamalla (pikseleinä), kuinka kaukana se on selainikkunan vasemmasta tai yläreunasta.

  • verifyElementPositionLeft – tarkistaa, vastaako määritetty pikselien määrä elementin etäisyyttä sivun vasemmasta reunasta. Tämä palauttaa FALSE, jos määritetty arvo ei vastaa etäisyyttä vasemmasta reunasta.
  • verifyElementPositionTop – tarkistaa, vastaako määritetty pikselien määrä elementin etäisyyttä sivun yläreunasta. Tämä palauttaa FALSE, jos määritetty arvo ei vastaa etäisyyttä yläreunasta.

Alla oleva komentosarja tallentaa odotetut pikselien siirtymät Arvo-sarakkeeseen.

Selenium IDE-vaiheet verifyElementPositionLeft- ja verifyElementPositionTop-metodien avulla pikseliarvoilla Value-sarakkeessa

Käsittele näitä kahta komentoa varoen. Pikselioffset muuttuu ikkunan koon, zoomaustason ja asennettujen fonttien mukaan, joten yhdessä koneessa syötetty kiinteästi koodattu numero voi epäonnistua toisessa.

Odota komennot sisään Selenium

Verify-komento voi tarkastaa vain sen, mikä on jo näytöllä, joten liian aikaisin suoritettu tarkistus epäonnistuu, vaikka sovellus toimisikin. Wait-komennot ratkaisevat tämän ajoitusongelman.

Seuraavat ovat odotuskomentojen tyypit Selenium

ja odota-komennot

Nämä ovat komentoja, jotka odottavat uuden sivun latautumista ennen kuin siirrytään seuraavaan komentoon.

esimerkkejä ovat

  • napsautaAndWait
  • kirjoitaJa odota
  • valitseAndOdota

Jokainen niistä on tavallinen toimintokomento, johon on liitetty AndWait-liite, kuten alla oleva tallennettu vaihe osoittaa.

Tallennettu clickAndWait-askel pitämällä Selenium IDE-skripti, kunnes seuraava sivu latautuu

odota komentoja

Nämä ovat komentoja, jotka odottavat tietyn ehdon täyttymistä ennen kuin siirrytään seuraavaan komentoon (riippumatta uuden sivun latauksesta). Nämä komennot sopivat paremmin käytettäviksi AJAX-pohjaisilla dynaamisilla verkkosivustoilla, jotka muuttavat arvoja ja elementtejä lataamatta koko sivua uudelleen. Esimerkkejä:

  • odota otsikkoa
  • odotaTextPresent
  • odota hälytystä

Harkitse alla olevaa Facebook-skenaariota.

Facebookin rekisteröitymislomake, jossa näkyy kysymys "Miksi minun on annettava syntymäpäivälinkkini ennen kuin sitä napsautetaan"

Voimme käyttää "click" ja "waitForTextPresent" yhdistelmää vahvistaaksemme tekstin "Anna syntymäpäiväsi" olemassaolon.

Selenium IDE-vaiheet yhdistävät napsauttamalla waitForTextPresent-toiminnolla odottaakseen syntymäpäivätekstisi antamista

Emme voi käyttää clickAndWait-toimintoa, koska sivua ei ladattu, kun napsautettiin "Miksi minun on ilmoitettava syntymäpäiväni?" linkki. Jos teemme niin, testi epäonnistuu

Sama sääntö koskee kaikkea skriptien lisäämää sisältöä navigoinnin sijaan, minkä vuoksi AJAX-ohjatut näytöt melkein aina tarvitaan waitFor eikä andWait.

Assert vs. Verify vs. waitFor -komennot Selenium IDE

Aloittelijat valitsevat usein väärän tuoteperheen ja ihmettelevät sitten, miksi tuoteperhe pysähtyy ensimmäisen vian kohdalla tai miksi se raportoi kaksikymmentä vikaa, jotka kaikki ovat... tractakaisin yhteen. Kolme etuliitettä vastaavat kolmeen eri kysymykseen.

Etuliite Mitä se tekee Epäonnistumisen yhteydessä Parhaiten käytetty
puolustaa Tarkistaa tilanteen välittömästi Kirjaa virheen ja pysäyttää testitapauksen Edellytykset – kirjautuminen, jonka on onnistuttava ennen kuin mikään muu on järkevää
todentaa Tarkistaa tilanteen välittömästi Kirjaa virheen lokiin ja jatkaa seuraavalla komennolla Itsenäiset tarkastukset, kuten useita tarroja yhdellä vahvistussivulla
odota Kyselee, kunnes ehto täyttyy Kirjaa virheen lokiin aikakatkaisun umpeuduttua ja jatkaa sitten Kaikki myöhässä näkyvä — AJAX-vastaukset, spinnerit, dialogit

Käytännöllinen malli yhdistää kaikki kolme: vahvista sivu, jolle päädyit, odota asynkronisesti saapuvaa elementtiä ja tarkista sitten jokainen yksittäinen kenttä. Jos nämä tehdään tässä järjestyksessä, yksi rikkinäinen navigointi pysäyttää testin ennenaikaisesti, ja kourallinen kosmeettisia epäjohdonmukaisuuksia raportoidaan kaikki yhdellä kertaa. Sama kurinalaisuus jatkuu myös Selenium koodilla kirjoitetut testit, joiden vastineita ovat kovat väitteet, pehmeät väitteet ja eksplisiittiset odotukset.

Tarkista ja odota -komennot nykyisessä Selenium IDE

FirefoxYllä olevat kuvakaappaukset tuottanut -plugin-kehityskehitysympäristö poistettiin käytöstä ja komentokehot rakennettiin uudelleen nykyistä selainlaajennusta varten. Useita selenejä koskevia nimiä säilyi, joitakin nimettiin uudelleen ja muutama poistettiin. Alla oleva taulukko yhdistää tässä artikkelissa käytetyt komennot niiden nykyisiin vastineisiin, jotka on otettu virallisesta Selenium IDE-komentoviite.

Perinteinen Selenese-komento Komento nykyisessä IDE:ssä
verifyElementPresent varmista, että elementti on läsnä
verifyElementNotPresent tarkista, ettei elementtiä ole
verifyTextPresent tarkista teksti (kohdistettu elementin paikantimeen, ei koko sivuun)
verifyTextNotPresent tarkista, ettei kyseessä ole teksti (rajoitettu elementin paikantimeen)
tarkistaTitle vahvista otsikko
verifyElementPositionLeft / verifyElementPositionTop Ei vastinetta — kantaväitteet hylättiin
napsautaJaOdota, kirjoitaJaOdota, valitseJaOdota Ei AndWait-liitettä — open-komento odottaa jo sivun latausta
odotaElementPresent odota elementin läsnäoloa, odotusaika millisekunteina
odota hälytystä vahvista hälytys tai tarkista hälytysteksti valintaikkunan ilmestymisen jälkeen

Kaksi eroa on merkittävimpiä päivittäisessä työssä. Ensinnäkin nykyiset odotuskomennot – odota elementin läsnäoloa, odota elementin näkyvyyttä, odota elementin muokattavuutta ja niiden negatiiviset kaksoset – ottavat kukin eksplisiittisen odotusajan millisekunteina, joten hitaan vaiheen ei enää tarvitse jakaa yhtä globaalia aikakatkaisua. Toiseksi koko sivun kattava tekstihaku on poissa: tekstin tarkistus tarvitsee paikantimen, joka yleensä tuottaa joka tapauksessa terävämmän tarkistuksen.

Yleisiä virheitä Verify- ja waitFor-komentojen kanssa

Useimmat näiden komentojen kanssa raportoidut ongelmat eivät johdu IDE:n vioista. Alla oleva luettelo kattaa useimmin esiintyvät virheet ja niiden korjaustavat.

  • Elementti on olemassa, mutta tarkistus epäonnistuu silti. Läsnäolo ja näkyvyys ovat eri tiloja. CSS-säännön taakse piilotettu elementti on edelleen läsnä DOM:ssa, joten yhdistä läsnäolotarkistus wait for visible -elementtiin, kun testi on riippuvainen käyttäjän tosiasiallisesta näkemisestä.
  • Tekstitarkistus epäonnistuu, jos sanamuoto näyttää identtiseltä. Sitoutuvat välilyönnit, lopussa olevat tyhjät välilyönnit ja suunnitteludokumentista kopioidut kaarevat heittomerkit rikkovat kaikki täydellisen osuman. Kirjoita odotettu merkkijono uudelleen käsin sen sijaan, että liittäisit sen.
  • Odotuskomento aikakatkaisee selvästi latautuneella sivulla. Elementti on yleensä iframe-kehyksen sisällä. Suorita ensin select frame -komento, muuten paikannin arvioidaan väärää dokumenttia vasten.
  • clickAndWait jumiutuu yksisivuiseen sovellukseen. Navigointia ei tapahdu, joten ei ole mitään odotettavaa. Korvaa se napsautuksella ja sopivalla waitFor-komennolla.
  • Paikkatarkistus onnistuu paikallisesti, mutta epäonnistuu koontipalvelimella. Näytön koko ja fontin esitys eroavat toisistaan. Käytä mieluummin läsnäolo- tai tekstitarkistusta tai aseta testin alussa erillinen ikkunan koko.
  • Koko sarja pysähtyy ensimmäiseen epäsuhtaan. assert-komento tallennettiin verify-komennon kohdalle. Vaihda etuliite, niin suoritus raportoi kaikki virheet ensimmäisen sijaan.

Kun skripti selviää näistä ansoista, seuraava vaihe on yleensä tallenna ajonaikaiset arvot muuttujiin joten tarkistukset vertautuvat todellisiin tietoihin kovakoodattujen merkkijonojen sijaan.

UKK

Vanha IDE jakoi yhden globaalin aikakatkaisun jokaiselle waitFor-vaiheelle, ja tätä muutettiin setTimeout-komennolla. Nykyinen laajennus käyttää eksplisiittistä odotusaikaa millisekunteina jokaiselle wait-komennolle, joten yksi hidas näyttö ei enää pakota kaikkia muita vaiheita odottamaan yhtä kauan.

Ei. Pause-toiminto nukkuu aina koko keston ajan, joten se tuhlaa aikaa, kun sivu on nopea, ja epäonnistuu edelleen, kun sivu on hidas. Käytä sitä vain havainnollistaaksesi vaihetta demon aikana, älä koskaan sarjassa, jota aiot suorittaa toistuvasti.

Se ei ole. Läsnäolo tarkoittaa, että solmu on olemassa DOM:ssa, mikä pysyy totena CSS:n piilottamille tai näytön ulkopuolelle sijoitetuille elementeille. Kun testi on riippuvainen käyttäjän näkemästä jotakin, lisää läsnäolotarkistuksen rinnalle wait for element visible.

Kyllä, ja nykyinen IDE vaatii sitä. Sen verify text -komento ottaa elementin paikantimen ja odotetun merkkijonon, mikä on tarkempi kuin vanha sivunlaajuinen haku ja estää asiaankuulumatonta valikkokohtaa täyttämästä tarkistusta, jota sen ei koskaan ollut tarkoituskaan täyttää.

Code export muuttaa jokaisen komennon vastaavaksi lausekkeeksi kohdekielellä, joten wait-vaiheesta tulee eksplisiittinen WebDriver-wait. Lue luotu tiedosto ennen kuin luotat siihen, koska aikakatkaisut ja pehmeät vs. kovat virheet eivät aina selviä käännöksestä ehjinä.

Koneoppimismallit lukevat historiallista suoritusdataa ja merkitsevät vaiheet, jotka epäonnistuvat ajoittain eikä jatkuvasti, mikä on merkki puuttuvasta odotusajasta. Tekoälyavusteinen paikannuskorjaus puuttuu toiseen yleiseen syyhyn ehdottamalla uutta valitsinta, kun merkinnät muuttuvat.

Se hoitaa mekaanisen osan hyvin — muuttamalla odotusvaiheen WebDriverWait-vaiheeksi odotetulla ehdolla. RevKatso sen valitsema aikakatkaisu ja valitsema ehto, koska luodun läsnäoloehdon on usein oltava näkyvyysehto.

Paikanninta verrataan valittuun dokumenttiin, ja iframe on erillinen. Suorita ensin select frame -komento, sitten check ja palaa sen jälkeen ylimpään dokumenttiin, jotta seuraavia vaiheita ei haeta väärästä kontekstista.

Tiivistä tämä viesti seuraavasti: