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.
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.
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.
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.
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.
č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.
Můžeme použít kombinaci „click“ a „waitForTextPresent“ k ověření přítomnosti textu „Uvádíme vaše narozeniny“.
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.






