Ověřte přítomnost prvku a počkejte na příkaz Selenium

⚡ Chytré shrnutí

Ověřte přítomnost prvku a příkazy waitFor v Selenium IDE potvrdí, že stránka obsahuje prvky a text, které test očekává, a pozastaví přehrávání, dokud se dynamická podmínka nestane pravdivou, než se spustí další krok.

  • 🔘 Kontroly prvků: Funkce verifyElementPresent vrací hodnotu TRUE, pokud lokátor odpovídá něčemu na stránce, a verifyElementNotPresent vrací hodnotu TRUE.
  • ☑️ Kontroly textu: Funkce verifyTextPresent prohledává celou stránku a rozlišuje velká a malá písmena, takže „Atlanta“ se nikdy neshoduje s „atlanta“.
  • (Tj. Kontroly pozic: Metody verifyElementPositionLeft a verifyElementPositionTop porovnávají posun elementu v pixelech od okraje stránky.
  • 🧪 Načítání stránky: Příkazy andWait, jako například clickAndWait, pozastaví skript, dokud se nedokončí načítání nové stránky.
  • 🛠️ Dynamický obsah: Příkazy waitFor čekají na podmínku místo načtení stránky, což vyhovuje AJAXovým obrazovkám, které se nikdy nenačítají znovu.
  • 📊 Aktuální vývojové prostředí (IDE): Rozšíření prohlížeče tyto kroky přejmenuje a každému příkazu čekání přidělí vlastní milisekundový časový limit.

Ověřte přítomnost prvku a příkaz waitFor v Selenium IDE

Zaznamenaný Selenium IDE Skript kliká a píše, ale sám o sobě nikdy nerozhodne, zda se aplikace chovala správně. To dělají dvě skupiny příkazů: ověřit si příkazy, které kontrolují stav stránky a počkat příkazy, které pozastaví provádění, dokud stránka není připravena ke kontrole.

⚠️ Poznámka k verzím: Níže uvedené snímky obrazovky pocházejí z originálu Firefox-plugin Selenium IDE, které se již nedistribuuje a používají jeho názvy v camelCase Selenese. Aktuální IDE je Chrome, Firefox a Edge rozšíření prohlížečeZde popsané chování stále platí, ale několik názvů příkazů se změnilo – mapaping Tabulka se objeví dále v tomto článku a každý původní příkaz a snímek obrazovky jsou zachovány přesně tak, jak byly publikovány.

Ověřte přítomnost prvku

K ověření přítomnosti prvku můžeme použít následující dva příkazy:

  • ověřitElementPresent – vrátí TRUE, pokud byl zadaný prvek na stránce FOUND; NEPRAVDA, pokud je to jinak
  • ověřitElementNotPresent – vrátí hodnotu TRUE, pokud zadaný prvek NENÍ NALEZEN nikde na stránce; FALSE, pokud je přítomen.

Oba příkazy berou element Vyhledávání v Target pole – ID, název, selektor CSS, text odkazu nebo XPath výraz – a ani jeden nepotřebuje hodnotu.

Testovací skript níže ověřuje, že textové pole UserName je přítomno v Mercury Domovská stránka prohlídky, zatímco textové pole Jméno není. Textové pole Křestní jméno je ve skutečnosti prvkem na stránce Registrace Mercury Prohlídky, nikoli na domovské stránce.

Selenium Skript IDE s použitím verifyElementPresent v poli userName a verifyElementNotPresent v poli First Name

Protože tyto jsou ověřit si příkazy spíše než tvrdí příkazy, chyba se zapíše do protokolu a zbývající kroky se stále provedou. Tento rozdíl je podrobněji popsán dále.

Ověřte přítomnost určitého textu v příkazu v Selenium

Ověření existence prvku nestačí vždy – test často potřebuje potvrdit slova zobrazená uživateli. Pro tento případ postačí dva textové příkazy.

  • ověřit TextPresent – vrátí TRUE, pokud byl zadaný textový řetězec NALEZEN někde na stránce; NEPRAVDA, pokud je to jinak
  • ověřit TextNotPresent – vrátí hodnotu TRUE, pokud zadaný textový řetězec NENAŠEL nikde na stránce; FALSE, pokud byl nalezen

Pamatujte, že tyto příkazy rozlišují velká a malá písmena.

Níže uvedený protokol ukazuje stejnou stránku zkontrolovanou dvakrát se dvěma pravopisy stejné fráze.

Selenium Záznam IDE zobrazující úspěšné provedení verifyTextPresent pro Atlantu do Las Vegas a neúspěšné provedení pro Atlantu do Las Vegas

Ve výše uvedeném scénáři bylo spojení „Atlanta do Las Vegas“ a „atlanta do Las Vegas“ zpracováno odlišně, protože písmeno „A“ v názvu „Atlanta“ bylo u prvního velké a u druhého malé. Když byl u každého z nich použit příkaz verifyTextPresent, jedno proběhlo úspěšně, zatímco druhé selhalo.

Ověřte konkrétní polohu prvku

Vady rozvržení zřídka naruší lokátor, takže kontroly přítomnosti je přehlédnou. Příkazy pro umístění tuto mezeru zaplní.

Selenium IDE udává polohu prvku měřením (v pixelech), jak daleko je od levého nebo horního okraje okna prohlížeče.

  • ověřitElementPositionLeft – ověřuje, zda zadaný počet pixelů odpovídá vzdálenosti prvku od levého okraje stránky. To vrátí FALSE, pokud zadaná hodnota neodpovídá vzdálenosti od levého okraje.
  • ověřitElementPositionTop – ověřuje, zda zadaný počet pixelů odpovídá vzdálenosti prvku od horního okraje stránky. To vrátí FALSE, pokud zadaná hodnota neodpovídá vzdálenosti od horní hrany.

Níže uvedený skript zaznamenává očekávané posuny pixelů do sloupce Hodnota.

Selenium Kroky IDE s použitím verifyElementPositionLeft a verifyElementPositionTop s hodnotami pixelů ve sloupci Value

S těmito dvěma příkazy zacházejte opatrně. Posun v pixelech se mění s velikostí okna, úrovní přiblížení a nainstalovanými fonty, takže pevně zadané číslo, které projde na jednom počítači, může na jiném selhat.

Čekejte na příkazy Selenium

Příkaz verify dokáže zkontrolovat pouze to, co je již na obrazovce, takže kontrola spuštěná příliš brzy selže, i když aplikace funguje. Příkazy wait tento problém s načasováním řeší.

Níže jsou uvedeny typy příkazů čekání Selenium

a čekejte příkazy

Jedná se o příkazy, které počkají na načtení nové stránky, než přejdou na další příkaz.

příklady jsou

  • klikněte AndWait
  • typAndWait
  • vyberte AndWait

Každý z nich je běžný akční příkaz s připojenou příponou AndWait, jak ukazuje níže uvedený zaznamenaný krok.

Zaznamenaný krok clickAndWait s podržením Selenium IDE skript, dokud se nenačte další stránka

čekat na příkazy

Jsou to příkazy, které čekají, až se zadaná podmínka stane pravdivou, než přejdou k dalšímu příkazu (bez ohledu na načtení nové stránky). Tyto příkazy jsou vhodnější pro použití na dynamických webech založených na AJAX, které mění hodnoty a prvky bez opětovného načítání celé stránky. Příklady:

  • waitForTitle
  • waitForTextPresent
  • waitForAlert

Zvažte scénář Facebooku níže.

Registrační formulář na Facebooku zobrazující odkaz „Proč musím před kliknutím zadat datum narození?“

Můžeme použít kombinaci „click“ a „waitForTextPresent“ k ověření přítomnosti textu „Uvádíme vaše narozeniny“.

Selenium Kroky IDE spárování click s waitForTextPresent pro čekání na zadání textu k narozeninám

Nemůžeme použít clickAndWait, protože po kliknutí na „Proč musím uvést své narozeniny?“ nebyla načtena žádná stránka? odkaz. Pokud to uděláme, test selže

Stejné pravidlo platí pro jakýkoli obsah vložený skriptem, nikoli navigací, a proto Obrazovky řízené AJAXem téměř vždy potřebujete waitFor spíše než andWait.

Příkazy Assert vs. Verify vs. waitFor v Selenium IDE

Začátečníci si často vyberou špatnou rodinu a pak se diví, proč se sada zastaví na první závadě nebo proč hlásí dvacet poruch, které všechny... traczpět k jedničce. Tyto tři předpony odpovídají na tři různé otázky.

Předpona Co to dělá Při selhání Nejlépe se používá pro
tvrdí Okamžitě zkontroluje stav Zaznamená selhání a zastaví testovací případ. Předpoklady – přihlášení, které musí být úspěšné, než cokoli jiného bude dávat smysl
ověřit si Okamžitě zkontroluje stav Zaznamená chybu a pokračuje dalším příkazem. Nezávislé kontroly, například několik štítků na jedné potvrzovací stránce
čekat na Ankety, dokud se podmínka nestane pravdivou Zaznamená selhání po uplynutí časového limitu a poté pokračuje Cokoli, co se objeví pozdě – AJAX odpovědi, spinnery, dialogy

Praktický vzorec kombinuje všechny tři: potvrdit stránku, na kterou jste se dostali, čekat na prvek, který dorazí asynchronně, a poté ověřit každé jednotlivé pole. Pokud to provedete v tomto pořadí, znamená to, že jedna nefunkční navigace předčasně zastaví test, zatímco několik kosmetických neshod je nahlášeno v jednom běhu. Stejná disciplína se přenáší i na Selenium testy psané v kódu, kde ekvivalenty jsou tvrdá aserce (hard assertions), měkká aserce (soft assertions) a explicitní čekání (explicit waits).

Příkazy pro ověření a čekání v aktuálním Selenium IDE

Jedno Firefox-plugin IDE, které vytvořilo výše uvedené snímky obrazovky, bylo vyřazeno a sada příkazů byla znovu sestavena pro aktuální rozšíření prohlížeče. Několik názvů v jazyce Selene se zachovalo, některé byly přejmenovány a několik bylo vynecháno. Níže uvedená tabulka mapuje příkazy použité v tomto článku na jejich současné ekvivalenty, převzaté z oficiálního Selenium Referenční příručka k příkazům IDE.

Starší selenský příkaz Příkaz v aktuálním IDE
ověřitElementPresent ověřit přítomnost prvku
ověřitElementNotPresent ověřit, že prvek není přítomen
ověřit TextPresent ověřit text (s rozsahem lokátoru elementů, nikoli celé stránky)
ověřit TextNotPresent ověřit, že se nejedná o text (s rozsahem lokátoru elementů)
ověřitNázev ověřit titul
verifyElementPositionLeft / verifyElementPositionTop Žádný ekvivalent – ​​tvrzení o pozicích byla zrušena
clickAndWait, typeAndWait, selectAndWait Bez přípony AndWait – příkaz open již čeká na načtení stránky.
waitForElementPresent čekání na přítomnost prvku s dobou čekání v milisekundách
waitForAlert potvrdit upozornění nebo ověřit text upozornění po zobrazení dialogového okna

V každodenní práci jsou nejdůležitější dva rozdíly. Zaprvé, současné příkazy wait – wait for element present, wait for element visible, wait for element editable a jejich negativní dvojčata – mají explicitní dobu čekání v milisekundách, takže pomalý krok již nemusí sdílet jeden globální časový limit. Zadruhé, textové vyhledávání na celé stránce je pryč: verify text potřebuje lokátor, což obvykle stejně vede k přesnější kontrole.

Časté chyby s příkazy Verify a waitFor

Většina hlášených problémů s těmito příkazy nejsou vady v IDE. Níže uvedený seznam uvádí nejčastější chyby a jejich opravy.

  • Prvek existuje, ale kontrola stále selhává. Přítomnost a viditelnost jsou různé stavy. Prvek skrytý za pravidlem CSS je stále přítomen v DOMu, takže spárujte kontrolu přítomnosti s kontrolou wait for element visible, když test závisí na tom, zda jej uživatel skutečně uvidí.
  • Kontrola textu selže u formulací, které vypadají identicky. Nerozdělitelné mezery, koncové mezery a složeniny apostrofů zkopírované z návrhového dokumentu narušují přesnou shodu. Očekávaný řetězec přepište ručně, místo abyste jej vkládali.
  • Časový limit příkazu wait na stránce, která se zjevně načetla, vypršel. Element se obvykle nachází uvnitř prvku iframe. Nejprve spusťte příkaz select frame, jinak se lokátor vyhodnotí pro nesprávný dokument.
  • clickAndWait se zasekne v jednostránkové aplikaci. Nedochází k žádné navigaci, takže není na co čekat. Nahraďte to kliknutím a příslušným příkazem waitFor.
  • Kontrola pozice proběhne lokálně a na serveru sestavení selže. Velikost obrazovky a vykreslování písma se liší. Upřednostněte kontrolu přítomnosti nebo textu, případně nastavte explicitní velikost okna na začátku testu.
  • Celá sada se zastaví u prvního nesouladu. Na místě, kde měl být zamýšlen příkaz verify, byl zaznamenán příkaz assert. Změňte prefix a spuštění bude hlásit každou chybu, nikoli jen první.

Jakmile skript přežije tyto pasti, dalším krokem je obvykle ukládat běhové hodnoty do proměnných takže kontroly porovnávají skutečná data, nikoli pevně zakódované řetězce.

Nejčastější dotazy

Starší IDE sdílelo jeden globální časový limit pro každý krok waitFor, což se změnilo příkazem setTimeout. Aktuální rozšíření nastavuje explicitní dobu čekání v milisekundách pro každý příkaz wait, takže jedna pomalá obrazovka již nenutí každý další krok čekat tak dlouho.

Ne. Funkce Pause se vždy po celou dobu uspí, takže se tím ztrácí čas, když je stránka rychlá, a stále selhává, když je stránka pomalá. Použijte ji pouze k demonstraci kroku během dema, nikdy ne v sadě, kterou chcete spouštět opakovaně.

Není tomu tak. Přítomnost znamená, že uzel existuje v DOMu, což platí pro prvky skryté CSS nebo umístěné mimo obrazovku. Pokud test závisí na tom, zda uživatel něco vidí, přidejte vedle kontroly přítomnosti také příkaz wait for element visible.

Ano, a aktuální IDE to vyžaduje. Jeho příkaz verify text bere lokátor elementů plus očekávaný řetězec, což je přísnější než staré vyhledávání na celé stránce a brání nesouvisející položce nabídky v splnění kontroly, kterou nikdy neměla splňovat.

Code Příkaz export přemění každý příkaz na ekvivalentní příkaz v cílovém jazyce, takže krok čekání se stane explicitním čekáním WebDriveru. Před nastavením důvěřivosti si vygenerovaný soubor přečtěte, protože časové limity a chování při chybách typu soft versus hard ne vždy přežijí překlad beze změny.

Modely strojového učení čtou historická data o běhu a označují kroky, které selhávají občas, nikoli konzistentně, což je znakem chybějícího čekání. Oprava lokátoru s pomocí umělé inteligence řeší další běžnou příčinu tím, že při změně kódu navrhne nový selektor.

Mechanickou část zvládá dobře – krok čekání přemění na WebDriverWait s očekávanou podmínkou. Revzobrazit vybraný časový limit a zvolenou podmínku, protože vygenerovaná podmínka přítomnosti často musí být podmínkou viditelnosti.

Lokátory se vyhodnocují vůči aktuálně vybranému dokumentu a iframe je samostatný lokátor. Nejprve spusťte příkaz select frame, poté proveďte kontrolu a poté se vraťte k hornímu dokumentu, aby následující kroky nebyly vyhledávány v nesprávném kontextu.

Shrňte tento příspěvek takto: