Kinnitage elemendi olemasolu ja oodake käsku Selenium

⚡ Nutikas kokkuvõte

Kontrollige elemendi olemasolu ja oodake käske Selenium IDE kinnitab, et leht sisaldab testi poolt oodatavaid elemente ja teksti ning peatab taasesituse, kuni dünaamiline tingimus saab tõeks enne järgmise sammu käivitamist.

  • 🔘 Elementide kontrollid: verifyElementPresent tagastab väärtuse TRUE, kui lokaator sobib millegagi lehel, ja verifyElementNotPresent on selle täpne vastand.
  • ☑️ Tekstikontrollid: verifyTextPresent otsib kogu lehelt ja on tõstutundlik, seega „Atlanta” ei leia kunagi vastet „atlanta”.
  • Positsioonikontrollid: verifyElementPositionLeft ja verifyElementPositionTop võrdlevad elemendi pikslite nihet lehe servast.
  • 🧪 Lehe laadimised: Käsklused andWait, näiteks clickAndWait, peatavad skripti, kuni uus leht on laadinud.
  • 🛠️ Dünaamiline sisu: waitFor käsud ootavad lehe laadimise asemel tingimust, mis sobib AJAX-ekraanidele, mis ei lae kunagi uuesti.
  • 📊 Praegune IDE: Brauserilaiend nimetab need sammud ümber ja annab igale ootamiskäsule oma millisekundilise ajalõpu.

Kontrollige elemendi olemasolu ja sisestage käsk waitFor Selenium IDE

Salvestatud Selenium IDE skript klõpsab ja tipib, kuid iseenesest ei otsusta see kunagi, kas rakendus käitus õigesti. Selleks toimivad kaks käskude perekonda: kontrollima käsud, mis kontrollivad lehe olekut ja ootama käsud, mis hoiavad täitmist seni, kuni leht on kontrollimiseks valmis.

⚠️ Märkus versioonide kohta: allolevad ekraanipildid pärinevad originaalist Firefox-plugin Selenium IDE, mida enam ei levitata ja mille camelCase'i seleenikeelsed nimed on kasutusel. Praegune IDE on Chrome'i oma, Firefox ja Edge brauseri laiendusSiin kirjeldatud käitumine kehtib endiselt, kuid mitmed käskude nimed on muutunud – kaartping Tabel kuvatakse selle artikli hilisemas osas ning iga algne käsk ja ekraanipilt säilitatakse täpselt avaldatud kujul.

Kontrollige elemendi olemasolu

Elemendi olemasolu kontrollimiseks saame kasutada kahte järgmist käsku:

  • verifyElementPresent – tagastab TRUE, kui lehelt leiti määratud element FOUND; VALE, kui muidu
  • verifyElementNotPresent – tagastab TRUE, kui määratud elementi EI LEIDUD lehel kuskilt; VÄÄR, kui see on olemas.

Mõlemad käsud võtavad elemendi lokaator aasta Target väli — ID, nimi, CSS-selektor, lingitekst või XPath avaldis — ja kumbki ei vaja väärtust.

Allolev testskript kinnitab, et tekstikast Kasutajanimi on failis olemas Mercury Ekskursioonide avaleht, samas kui tekstikasti Eesnimi pole. Eesnimi tekstikast on tegelikult element, mis on registreerimislehel Mercury Ekskursioonid, mitte avalehel.

Selenium IDE skript, mis kasutab kasutajanime väljal verifyElementPresent ja eesnime väljal verifyElementNotPresent

Sest need on kontrollima käskude asemel väita käskude korral kirjutatakse logisse tõrge ja ülejäänud sammud jätkuvad. Seda erinevust käsitletakse üksikasjalikumalt allpool.

Kinnitage teatud teksti olemasolu käsus Selenium

Elemendi olemasolu kontrollimisest ei piisa alati – test peab sageli kinnitama kasutajale kuvatavaid sõnu. Selle juhtumi katavad kaks tekstikäsku.

  • verifyTextPresent – tagastab TRUE, kui määratud tekstistring leiti kuskilt lehelt; VALE, kui muidu
  • verifyTextNotPresent – tagastab TRUE, kui määratud tekstistringi EI LEIDUD lehel kuskilt; VÄÄR, kui see leiti

Pidage meeles, et need käsud on tõstutundlikud.

Allolev logi näitab sama lehekülge, mida on kaks korda kontrollitud sama fraasi kahe kirjapildiga.

Selenium IDE logi, mis näitab verifyTextPresenti edastamist Atlantast Las Vegasesse ja ebaõnnestumist Atlanta ja Las Vegase vahel.

Ülaltoodud stsenaariumis käsitleti käsku „Atlanta to Las Vegas” erinevalt kui käsku „atlanta to Las Vegas”, kuna sõna „Atlanta” täht „A” oli esimesel juhul suurtähega, teisel aga väiketähega. Kui mõlemal juhul kasutati käsku verifyTextPresent, siis üks neist õnnestus, teine ​​aga ebaõnnestus.

Kontrollige elemendi konkreetset asukohta

Paigutusvead harva rikuvad lokaatorit, seega kohalolekukontrollid ei märka neid. Positsioneerimiskäsud täidavad selle tühimiku.

Selenium IDE näitab elemendi asukohta, mõõtes (pikslites), kui kaugel see asub brauseriakna vasakust või ülemisest servast.

  • verifyElementPositionLeft – kontrollib, kas määratud pikslite arv ühtib elemendi kaugusega lehe vasakust servast. See tagastab FALSE, kui määratud väärtus ei ühti kaugusega vasakust servast.
  • verifyElementPositionTop – kontrollib, kas määratud pikslite arv ühtib elemendi kaugusega lehe ülaservast. See tagastab FALSE, kui määratud väärtus ei ühti kaugusega ülemisest servast.

Allolev skript salvestab eeldatavad pikslite nihked veergu „Väärtus“.

Selenium IDE sammud, mis kasutavad verifyElementPositionLeft ja verifyElementPositionTop funktsioone pikslite väärtustega veerus Value

Suhtu nendesse kahte käsku ettevaatlikult. Piksli nihe muutub vastavalt akna suurusele, suumitasemele ja installitud fontidele, seega võib ühes masinas edastatud püsikodeeritud number teises nurjuda.

Oodake käsud sisse Selenium

Kontrollimiskäsk saab kontrollida ainult seda, mis on juba ekraanil, seega liiga vara käivitatud kontroll ebaõnnestub isegi siis, kui rakendus töötab. Wait-käsud lahendavad selle ajastusprobleemi.

Järgmised on ootekäskude tüübid Selenium

ja oodake käske

Need on käsud, mis ootavad enne järgmise käsu juurde liikumist uue lehe laadimist.

näideteks on

  • klõpsake JaOota
  • tüüpJa oodake
  • valiJaOota

Igaüks neist on tavaline toimingukäsk, millele on lisatud AndWait-järelliide, nagu allpool salvestatud samm näitab.

Salvestatud clickAndWaiti samm all hoides Selenium IDE skripti kuni järgmise lehe laadimise lõpuni

ootama käske

Need on käsud, mis ootavad, kuni määratud tingimus muutub tõeseks, enne kui jätkate järgmise käsuga (olenemata uue lehe laadimisest). Neid käske on sobivam kasutada AJAX-põhistel dünaamilistel veebisaitidel, mis muudavad väärtusi ja elemente kogu lehte uuesti laadimata. Näited:

  • oota Pealkirja
  • oodakeTextPresenti
  • oota Alert

Mõelge allpool toodud Facebooki stsenaariumile.

Facebooki registreerimisvorm, mis näitab küsimust „Miks ma pean enne klõpsamist oma sünnipäevalingi esitama?”

Saame kasutada kombinatsiooni "klõps" ja "waitForTextPresent", et kontrollida, kas tekst on "Teie sünnipäeva esitamine".

Selenium IDE sammud paaristavad klõpsates funktsiooniga waitForTextPresent, et oodata oma sünnipäevateksti esitamist.

Me ei saa kasutada clickAndWait, kuna lingil „Miks ma pean oma sünnipäeva esitama?” klõpsamisel ei laaditud ühtegi lehte. link. Kui me seda teeme, siis test ebaõnnestub

Sama reegel kehtib ka skripti, mitte navigatsiooni abil sisestatud sisu kohta, mistõttu AJAX-põhised ekraanid peaaegu alati on vaja pigem waitFor kui andWait.

Käskude Assert vs Verify vs waitFor kasutamine Selenium IDE

Algajad valivad sageli vale perekonna ja imestavad seejärel, miks komplekt esimese defekti peale peatub või miks see teatab kahekümnest rikkest, kuigi kõik trace tagasi ühe juurde. Kolm eesliidet vastavad kolmele erinevale küsimusele.

eesliide Mida see teeb Ebaõnnestumise korral Parim kasutada
väita Kontrollib koheselt seisukorda Logib vea ja peatab testijuhtumi Eeltingimused – sisselogimine, mis peab õnnestuma enne, kui miski muu mõttekas on
kontrollima Kontrollib koheselt seisukorda Logib vea ja jätkab järgmise käsuga Sõltumatud kontrollid, näiteks mitu silti ühel kinnituslehel
ootama Küsitlused kuni tingimus saab tõeseks Logib tõrke pärast ajalõpu möödumist ja jätkab seejärel Kõik, mis ilmub hilinenult – AJAX-vastused, spinnerid, dialoogid

Praktiline muster ühendab kõik kolm: kinnita leht, millele sa jõudsid, oota asünkroonselt saabunud elementi ja seejärel kontrolli iga üksikut välja. Selles järjekorras tehes peatab üks vigane navigatsioon testi enneaegselt, samal ajal kui käputäis kosmeetilisi mittevastavusi teatatakse kõik ühe korraga. Sama distsipliin kehtib ka... Selenium koodis kirjutatud testid, mille vasteteks on kõvad väited, pehmed väited ja otsesed ootamised.

Kontrolli ja oota käske praeguses Selenium IDE

. FirefoxÜlaltoodud ekraanipilte tootnud plugin IDE eemaldati ja käskude komplekt loodi praeguse brauserilaienduse jaoks uuesti. Mitmed seleenikeelsed nimed jäid alles, mõned nimetati ümber ja mõned jäeti välja. Allolev tabel seob selles artiklis kasutatud käske nende praeguste vastetega, mis on võetud ametlikust käsurea lähtekoodist. Selenium IDE käskude juhend.

Selenese pärandkäsk Käsk praeguses IDE-s
verifyElementPresent kontrollige elemendi olemasolu
verifyElementNotPresent kontrollige, kas elementi pole olemas
verifyTextPresent teksti kontrollimine (ulatus elemendiotsija, mitte kogu lehe ulatuses)
verifyTextNotPresent kontrolli, kas tekst pole õige (ulatus elemendi lokaatorile)
kontrolliPealkirja kinnita pealkiri
verifyElementPositionLeft / verifyElementPositionTop Vastavväärtus puudub — positsiooniväited tühistati
klõpsa ja oota, kirjuta ja oota, vali ja oota AndWaiti järelliidet pole – käsk „open“ juba ootab lehe laadimist.
ootaElementPresent oota elemendi olemasolu, ooteajaga millisekundites
oota Alert kinnitada hoiatus või kinnitada hoiatuse tekst pärast dialoogiboksi ilmumist

Igapäevatöös on kõige olulisemad kaks erinevust. Esiteks võtavad praegused ootekäsud – „oota, kuni element on olemas“, „oota, kuni element on nähtav“, „oota, kuni element on muudetav“ ja nende negatiivsed kaksikud – igaüks selgesõnalise ooteaja millisekundites, seega ei pea aeglane samm enam jagama ühte globaalset ajalõppu. Teiseks on kadunud leheülene tekstiotsing: kontrollitekst vajab lokaatorit, mis tavaliselt annab niikuinii teravama kontrolli.

Levinumad vead käskudega Verify ja waitFor

Enamik nende käskudega seotud probleemidest ei ole IDE vead. Allolev loend hõlmab kõige sagedamini esinevaid tõrkeid ja iga tõrke lahendusi.

  • Element on olemas, aga kontroll ikkagi ebaõnnestub. Kohalolek ja nähtavus on erinevad olekud. CSS-reegli taha peidetud element on DOM-is endiselt olemas, seega ühenda kohaloleku kontroll elemendi „wait for visibility” olemisega, kui test sõltub sellest, kas kasutaja seda tegelikult näeb.
  • Tekstikontroll ebaõnnestub identse sõnastuse korral. Kujundusdokumendist kopeeritud tühikud, lõpus olevad tühikud ja lokkis apostroofid ei anna täpset vastet. Tippige oodatud string käsitsi uuesti, mitte kleepige see.
  • Ootuskäsu ajalõpp ilmneb lehel, mis on selgelt laadinud. Element asub tavaliselt iframe'i sees. Käivita esmalt `select frame`, vastasel juhul hinnatakse lokaatorit vale dokumendi suhtes.
  • clickAndWait hangub ühelehelise rakenduse korral. Navigeerimist ei toimu, seega pole midagi oodata. Asendage see klõpsuga ja sobiva waitFor-käsuga.
  • Positsioonikontroll läbib lokaalselt, kuid ebaõnnestub ehitusserveris. Ekraani suurus ja fondi renderdamine erinevad. Eelista kohaloleku- või tekstikontrolli või määra testi alguses selgesõnaline akna suurus.
  • Kogu sviit peatub esimese mittevastavuse juures. VERIFIC-käsu asemele salvestati käsk „assert“. Vaheta eesliidet ja käsk annab teada igast veast, mitte ainult esimesest.

Kui skript on need lõksud üle elanud, on järgmine samm tavaliselt salvesta käitusaja väärtused muutujates Seega võrdlevad kontrollid andmeid tegelike andmete, mitte kõvakodeeritud stringidega.

KKK

Vanem IDE jagas iga waitFor-sammu peale ühte globaalset ajalõpu, mida muudeti käsuga setTimeout. Praegune laiendus võtab iga wait-käsu peale selgesõnalise ooteaja millisekundites, seega üks aeglane ekraan ei sunni enam kõiki teisi samme sama kaua ootama.

Ei. Pause jääb alati täismagamisrežiimi, seega raiskab see aega, kui leht on kiire, ja ebaõnnestub ka siis, kui leht on aeglane. Kasutage seda ainult demo ajal mõne sammu demonstreerimiseks, mitte kunagi komplektis, mida kavatsete korduvalt käivitada.

See ei ole nii. Kohalolek tähendab, et sõlm eksisteerib DOM-is, mis jääb kehtima CSS-i poolt peidetud või ekraanilt väljas asuvate elementide puhul. Kui test sõltub sellest, kas kasutaja midagi näeb, lisage kohalolekukontrolli kõrvale `wait for element visible`.

Jah, ja praegune IDE nõuab seda. Selle käsk „verify text” võtab elemendi lokaatori ja oodatava stringi, mis on rangem kui vana leheülene otsing ja takistab mitteseotud menüüelemendil täita kontrolli, mida see ei pidanudki täitma.

Code Eksport muudab iga käsu sihtkeeles samaväärseks lauseks, seega muutub ootamisetapp selgesõnaliseks WebDriveri ootamiseks. Enne loodud faili usaldamist lugege see läbi, sest ajalõpud ja pehmete ja kõvade vigade käitumine ei jää tõlkes alati puutumata.

Masinõppe mudelid loevad ajaloolisi käitusandmeid ja märgistavad etapid, mis ebaõnnestuvad vahelduva eduga, mitte pidevalt, mis on märk puuduvast ooteajast. Tehisintellekti abil teostatav lokalisaatori parandus tegeleb teise levinud põhjusega, pakkudes märgistuse muutumisel välja uue valija.

See saab mehaanilise osaga hästi hakkama — muutes ooteastme oodatava tingimusega WebDriverWaitiks. RevVaadake valitud ajalõpu ja tingimuse, kuna genereeritud kohaloleku tingimus peab sageli olema nähtavuse tingimus.

Lokaatorid hinnatakse valitud dokumendi suhtes ja iframe on eraldi. Käivita esmalt käsk „select frame“, seejärel käsk „check“ ja naase seejärel ülemise dokumendi juurde, et järgmisi samme ei otsitaks vales kontekstis.

Võta see postitus kokku järgmiselt: