Ellenőrizd az elem jelenlétét és várd be a parancsot Selenium

⚡ Okos összefoglaló

Ellenőrizze az elem jelenlétét, és waitFor parancsokat adjon meg Selenium Az IDE ellenőrzi, hogy egy oldal tartalmazza-e a teszt által várt elemeket és szöveget, és szünetelteti a lejátszást, amíg egy dinamikus feltétel igazzá nem válik, mielőtt a következő lépés lefutna.

  • 🔘 Elemellenőrzések: A verifyElementPresent IGAZ értéket ad vissza, ha a lokátor megegyezik valamivel az oldalon, a verifyElementNotPresent pedig ennek a pontos inverze.
  • ☑️ Szöveges ellenőrzések: A verifyTextPresent a teljes oldalon keres, és megkülönbözteti a kis- és nagybetűket, így az „Atlanta” soha nem találja az „atlanta” kifejezést.
  • Pozícióellenőrzések: A verifyElementPositionLeft és a verifyElementPositionTop függvények összehasonlítják egy elem pixel-eltolását az oldal szélétől.
  • 🧪 Oldalbetöltések: Az olyan andWait parancsok, mint a clickAndWait, szüneteltetik a szkriptet, amíg az új oldal be nem töltődik.
  • 🇧🇷 Dinamikus tartalom: A waitFor parancsok egy feltételre várnak az oldal betöltése helyett, ami az AJAX képernyőknek felel meg, amelyek soha nem töltődnek be újra.
  • 📊 Jelenlegi IDE: A böngészőbővítmény átnevezi ezeket a lépéseket, és minden várakozási parancshoz saját milliszekundumos időtúllépést rendel.

Ellenőrizze az elem jelenlétét, és adja meg a waitFor parancsot. Selenium IDE

Egy felvett Selenium IDE A szkriptek kattintásokat és típusokat generálnak, de önmagában soha nem dönti el, hogy az alkalmazás megfelelően viselkedett-e. Két parancscsalád működik így: ellenőrzése parancsok, amelyek ellenőrzik az oldal állapotát, és várjon parancsok, amelyek végrehajtását mindaddig felfüggesztik, amíg az oldal ellenőrzésre kész nem lesz.

⚠️ Megjegyzés a verziókkal kapcsolatban: az alábbi képernyőképek az eredetiből származnak Firefox-bővítmény Selenium IDE, ami már nem terjed, és a camelCase selenese neveket használják. A jelenlegi IDE egy Chrome, Firefox és Edge böngésző kiterjesztéseAz itt leírt viselkedés továbbra is érvényes, de számos parancs neve megváltozott – egy térképping A táblázat a cikk későbbi részében található, és minden eredeti parancs és képernyőkép pontosan a közzétett formában kerül megőrzésre.

Ellenőrizze az elem jelenlétét

A következő két paranccsal ellenőrizhetjük egy elem jelenlétét:

  • verifyElementPresent – IGAZ értéket ad vissza, ha a megadott elem TALÁLT az oldalon; HAMIS, ha másképp
  • verifyElementNotPresent – IGAZ értéket ad vissza, ha a megadott elem NEM TALÁLHATÓ az oldalon; HAMIS, ha jelen van.

Mindkét parancs egy elemet fogad el. lokátor a Target mező — egy azonosító, egy név, egy CSS-szelektor, egy hivatkozás szövege vagy egy XPath kifejezés – és egyiknek sem kell értéket megadnia.

Az alábbi tesztszkript ellenőrzi, hogy a UserName szövegmező jelen van-e a Mercury Bejárások kezdőlapja, míg a Keresztnév szövegmező nem. A Keresztnév szövegmező valójában egy elem, amely a Regisztráció oldalán található Mercury Túrák, nem a kezdőlapon.

Selenium IDE szkript, amely a verifyElementPresent paramétert használja a userName mezőben és a verifyElementNotPresent paramétert a First Name mezőben

Mert ezek azok ellenőrzése parancsok helyett érvényesíteni parancsok esetén hiba kerül a naplóba, de a fennmaradó lépések továbbra is futnak. Ezt a különbségtételt részletesebben ismertetjük alább.

Bizonyos szövegek jelenlétének ellenőrzése a parancsban Selenium

Nem mindig elég ellenőrizni egy elem létezését – egy tesztnek gyakran meg kell erősítenie a felhasználónak megjelenített szavakat. Két szöveges parancs fedi le ezt az esetet.

  • verifyTextPresent – IGAZ értéket ad vissza, ha a megadott szöveges karakterláncot TALÁLT valahol az oldalon; HAMIS, ha másképp
  • verifyTextNotPresent – IGAZ értéket ad vissza, ha a megadott szöveges sztring NEM TALÁLHATÓ az oldalon; HAMIS, ha megtalálták

Ne feledje, hogy ezek a parancsok megkülönböztetik a kis- és nagybetűket.

Az alábbi napló ugyanazt az oldalt mutatja, kétszer ellenőrizve ugyanazon kifejezés két helyesírási változatával.

Selenium IDE napló, amelyen látható, hogy a verifyTextPresent áthalad Atlanta és Las Vegas között, de nem működik Atlanta és Las Vegas között.

A fenti forgatókönyvben az „Atlanta to Las Vegas” és az „atlanta to Las Vegas” útvonalakat másképp kezelték, mivel az „Atlanta” név „A” betűje az elsőn nagybetűvel, a másikon pedig kisbetűvel volt írva. Amikor a verifyTextPresent parancsot mindkettőn használták, az egyik sikeres volt, míg a másik nem.

Ellenőrizze az elem meghatározott pozícióját

Az elrendezési hibák ritkán érintik a lokátort, így a jelenlét-ellenőrzések ezeket nem veszik figyelembe. A pozícióparancsok ezt a hiányosságot pótolják.

Selenium Az IDE az elem helyzetét úgy jelzi, hogy megméri (pixelben), milyen messze van a böngészőablak bal vagy felső szélétől.

  • verifyElementPositionLeft – ellenőrzi, hogy a megadott számú képpont egyezik-e az elem távolságával az oldal bal szélétől. Ez FALSE-t ad vissza, ha a megadott érték nem egyezik a bal széltől mért távolsággal.
  • verifyElementPositionTop – ellenőrzi, hogy a megadott számú képpont egyezik-e az elem távolságával az oldal felső szélétől. Ez FALSE-t ad vissza, ha a megadott érték nem egyezik a felső éltől való távolsággal.

Az alábbi szkript rögzíti a várható pixel eltolásokat az Érték oszlopban.

Selenium IDE lépések a verifyElementPositionLeft és a verifyElementPositionTop metódusok használatával, pixelértékekkel a Value oszlopban

Óvatosan kezelje ezt a két parancsot. A pixel eltolás az ablakmérettel, a nagyítási szinttel és a telepített betűtípusokkal együtt változik, így egy fixen kódolt szám, amely az egyik gépen átmegy, egy másikon hibát okozhat.

Várja meg a parancsokat Selenium

Egy verify parancs csak azt tudja ellenőrizni, ami már a képernyőn van, így egy túl korán lefutott ellenőrzés akkor is meghiúsul, ha az alkalmazás működik. A wait parancsok megoldják ezt az időzítési problémát.

Az alábbiakban bemutatjuk a várakozási parancsok típusait Selenium

és Várj parancsokat

Ezek olyan parancsok, amelyek megvárják az új oldal betöltését, mielőtt a következő parancsra lépnének.

Példák

  • kattintson és várjon
  • típusÉs Várj
  • válasszon és várjon

Mindegyik egy átlagos műveleti parancs, amelyhez az AndWait utótag tartozik, ahogy az alábbi rögzített lépés is mutatja.

Rögzített clickAndWait lépés a Selenium IDE szkript, amíg a következő oldal be nem töltődik

várjon parancsokra

Ezek olyan parancsok, amelyek megvárják egy meghatározott feltétel igazzá válását, mielőtt a következő parancsra lépnének (függetlenül az új oldal betöltődésétől). Ezek a parancsok inkább AJAX-alapú dinamikus webhelyeken használhatók, amelyek az egész oldal újratöltése nélkül változtatják meg az értékeket és az elemeket. Példák:

  • várd a címet
  • várjon a szövegre
  • várj ForAlert

Fontolja meg az alábbi Facebook-forgatókönyvet.

Facebook regisztrációs űrlap, amelyen látható a „Miért kell megadnom a születésnapi linkemet, mielőtt rákattintatnának” kérdés?

A „click” és a „waitForTextPresent” kombinációjával ellenőrizhetjük a „Születésnapod megadása” szöveg meglétét.

Selenium IDE lépések párosítása kattintással és waitForTextPresent-tel a születésnapi szöveg megadására való várakozáshoz

Nem tudjuk használni a clickAndWait alkalmazást, mert a „Miért kell megadnom a születésnapomat?” gombra kattintáskor egyetlen oldal sem töltődött be. link. Ha megtesszük, a teszt kudarcot vall

Ugyanez a szabály vonatkozik minden olyan tartalomra, amelyet szkriptek, és nem navigáció segítségével injektálnak, ezért AJAX-vezérelt képernyők szinte mindig waitFor szükséges az andWait helyett.

Assert vs Verify vs waitFor parancsok a következőben: Selenium IDE

A kezdők gyakran rossz családot választanak, majd azon tűnődnek, hogy egy csomag miért áll meg az első hibánál, vagy miért jelent húsz hibát, miközben mind tracvissza az egyeshez. A három előtag három különböző kérdésre ad választ.

prefix Mit csinál Hiba esetén A legjobban használható
érvényesíteni Azonnal ellenőrzi a feltételt Naplózza a hibát és leállítja a tesztesetet Előfeltételek – egy sikeres bejelentkezés, mielőtt bármi más értelmet nyerne
ellenőrzése Azonnal ellenőrzi a feltételt Naplózza a hibát, és folytatja a következő paranccsal. Független ellenőrzések, például több címke egy visszaigazoló oldalon
várj Lekérdezések, amíg a feltétel igazzá nem válik Naplózza a hibát az időkorlát lejárta után, majd folytatja Bármi, ami későn jelenik meg – AJAX válaszok, spinnerek, párbeszédek

Egy praktikus minta mindhármat ötvözi: megerősítjük az oldalt, amelyre érkeztünk, várunk az aszinkron módon érkező elemre, majd ellenőrizzük az egyes mezőket. Ebben a sorrendben végrehajtva azt jelenti, hogy egyetlen hibás navigáció is leállítja a tesztet, miközben néhány kozmetikai eltérést egyetlen futtatásban jelent a rendszer. Ugyanez a fegyelem érvényesül a következőben is: Selenium kódban írt tesztek, ahol a megfelelőik a kemény állítások, a lágy állítások és az explicit várakozások.

Ellenőrző és Várakozó parancsok az Aktuálisban Selenium IDE

Az FirefoxA fenti képernyőképeket létrehozó -plugin IDE-t visszavonták, és a parancskészletet újraépítették a jelenlegi böngészőbővítményhez. Számos szelén név megmaradt, néhányat átneveztek, és néhányat elhagytak. Az alábbi táblázat a cikkben használt parancsokat a hivatalos megfelelőikhez rendeli. Selenium IDE parancsreferencia.

Örökölt szelén parancs Parancs az aktuális IDE-ben
verifyElementPresent elem jelenlétének ellenőrzése
verifyElementNotPresent ellenőrizze, hogy nincs-e jelen elem
verifyTextPresent szöveg ellenőrzése (egy elemkeresőre korlátozva, nem az egész oldalra)
verifyTextNotPresent nem szöveg ellenőrzése (egy elemlokátorra korlátozva)
ellenőrizze a címet cím ellenőrzése
verifyElementPositionLeft / verifyElementPositionTop Nincs megfelelője – a pozícióállításokat elvetették
kattintsonÉsVárjon, írja beÉsVárjon, válasszaÉsVárjon Nincs AndWait utótag – az open parancs már vár az oldal betöltésére
waitForElementPresent várjon az elem jelenlétére, ezredmásodpercben megadott várakozási idővel
várj ForAlert riasztás aktiválása vagy a riasztási szöveg ellenőrzése a párbeszédpanel megjelenése után

Két különbség számít a mindennapi munkában a legjobban. Először is, a jelenlegi wait parancsok – wait for element present (várakozás jelenlévő elemre), wait for element visible (várakozás látható elemre), wait for element editable (várakozás szerkeszthető elemre) és negatív ikerpárjaik – mindegyike explicit várakozási időt vesz igénybe milliszekundumban, így egy lassú lépésnek már nem kell egyetlen globális időtúllépést megosztania. Másodszor, az oldalszintű szövegkeresés megszűnt: az ellenőrző szöveghez lokátorra van szükség, ami általában élesebb ellenőrzést eredményez.

Gyakori hibák a Verify és waitFor parancsokkal

A parancsokkal kapcsolatos legtöbb jelentett probléma nem az IDE hibája. Az alábbi lista a leggyakrabban előforduló hibákat és az egyes hibák megoldását ismerteti.

  • Az elem létezik, de az ellenőrzés továbbra is sikertelen. A jelenlét és a láthatóság különböző állapotok. Egy CSS-szabály mögött elrejtett elem továbbra is jelen van a DOM-ban, ezért párosítsd a jelenlét-ellenőrzést a láthatóságra váró elemmel, ha a teszt attól függ, hogy a felhasználó ténylegesen látja-e azt.
  • A szövegellenőrzés sikertelennek tűnik azonosnak tűnő megfogalmazások esetén. A tervdokumentumból másolt nem törhető szóközök, a sor végén lévő szóközök és a göndör aposztrófok mind pontos egyezést eredményeznek. A várt karakterláncot kézzel kell újra beírni a beillesztés helyett.
  • Egy várakozási parancs időtúllépést jelez egy olyan oldalon, amely egyértelműen betöltődött. Az elem általában egy iframe-en belül található. Először futtassa a select frame parancsot, különben a lokátor a rossz dokumentum alapján lesz kiértékelve.
  • A clickAndWait lefagy egy egyoldalas alkalmazásnál. Nincs navigáció, így nincs mire várni. Cserélje le egy kattintással és a megfelelő waitFor paranccsal.
  • A pozícióellenőrzés helyben sikeres, de a build szerveren meghiúsul. A képernyőméret és a betűtípus-megjelenítés eltérő. Inkább jelenlét- vagy szövegellenőrzést végezz, vagy állíts be explicit ablakméretet a teszt elején.
  • Az egész kíséret megáll az első eltérésnél. Egy assert parancs került rögzítésre egy verify parancs helyén. Váltsd meg az előtagot, és a futtatás minden hibát jelenteni fog, nem csak az elsőt.

Miután egy szkript túléli ezeket a csapdákat, a következő lépés általában a következő: futásidejű értékek tárolása változókban így az ellenőrzések valós adatokkal, nem pedig fixen kódolt karakterláncokkal hasonlítódnak össze.

GYIK

A korábbi IDE minden waitFor lépésben egy globális időkorlátot osztott meg, amit a setTimeout parancs módosított. A jelenlegi kiterjesztés minden wait parancsnál explicit várakozási időt vesz igénybe milliszekundumban, így egyetlen lassú képernyő már nem kényszerít minden más lépést ugyanannyi ideig várakozni.

Nem. A Pause mindig a teljes időtartamra alszik, tehát időt pazarol, amikor az oldal gyors, és továbbra is hibát jelez, ha lassú. Csak egy demó során nyúlj hozzá egy lépés bemutatásához, soha ne olyan csomagban, amelyet ismételten futtatni szeretnél.

Nem. A „presense” azt jelenti, hogy a csomópont létezik a DOM-ban, ami igaz marad a CSS által elrejtett vagy a képernyőn kívül elhelyezett elemekre. Amikor a teszt attól függ, hogy a felhasználó lát-e valamit, add hozzá a „wait for element visible” (várj a látható elemre) beállítást a „presense” ellenőrzés mellé.

Igen, és a jelenlegi IDE megköveteli. A verify text parancs egy elemlokátort és a várt karakterláncot veszi igénybe, ami szigorúbb, mint a régi, oldalszintű keresés, és megakadályozza, hogy egy nem kapcsolódó menüpont megfeleljen egy olyan ellenőrzésnek, amelynek soha nem kellett volna megfelelnie.

Code Az export függvény minden parancsot egy azzal egyenértékű utasítássá alakít a célnyelvben, így egy wait lépés explicit WebDriver waittá válik. Olvasd el a létrehozott fájlt, mielőtt megbízol benne, mert az időtúllépések és a soft-versus hard hibák nem mindig élik túl épségben a fordítást.

A gépi tanulási modellek beolvassák a korábbi futási adatokat, és megjelölik azokat a lépéseket, amelyek időszakosan, nem pedig következetesen hibásak, ami a hiányzó várakozás jele. A mesterséges intelligencia által támogatott lokátorjavítás a másik gyakori okot kezeli azáltal, hogy új szelektort javasol, amikor a jelölés megváltozik.

Jól kezeli a mechanikai részt — egy várakozási lépést egy várható feltétellel rendelkező WebDriverWait lépéssé alakít. RevTekintse meg a kiválasztott időtúllépést és a választott feltételt, mivel egy generált jelenléti feltételnek gyakran láthatósági feltételnek kell lennie.

A lokátorok kiértékelése az aktuálisan kiválasztott dokumentumhoz viszonyítva történik, az iframe pedig egy különálló elem. Először a select frame parancsot futtasd, majd a check parancsot, és utána térj vissza a legfelső dokumentumhoz, hogy a következő lépések ne a rossz kontextusban legyenek keresve.

Foglald össze ezt a bejegyzést a következőképpen: