Verificați elementul prezent și așteptați comanda Selenium

⚡ Rezumat inteligent

Verificați prezența elementului și comenzile waitFor în Selenium IDE confirmă că o pagină conține elementele și textul așteptate de un test și întrerupe redarea până când o condiție dinamică devine adevărată înainte de a rula următorul pas.

  • 🔘 Verificări ale elementelor: verifyElementPresent returnează TRUE când locatorul se potrivește cu ceva de pe pagină, iar verifyElementNotPresent este inversul său exact.
  • ☑️ Verificări prin text: verifyTextPresent caută pe întreaga pagină și ține cont de majuscule/minuscule, așadar „Atlanta” nu se potrivește niciodată cu „atlanta”.
  • ✅ Verificări ale poziției: verifyElementPositionLeft și verifyElementPositionTop compară decalajul în pixeli al unui element față de marginea paginii.
  • 🧪 Încărcarea paginii: Comenzile andWait, cum ar fi clickAndWait, pun scriptul în pauză până când o pagină nouă se termină de încărcat.
  • 🛠️ Conținut dinamic: Comenzile waitFor așteaptă o condiție în loc să încarce o pagină, ceea ce se potrivește ecranelor AJAX care nu se reîncarcă niciodată.
  • 📊 IDE-ul curent: Extensia de browser redenumește acești pași și acordă fiecărei comenzi de așteptare propriul timeout de milisecunde.

Verificați prezența elementului și comanda waitFor în Selenium IDE

A înregistrat Selenium IDE scriptul face clicuri și tastează, dar nu decide niciodată dacă aplicația s-a comportat corect. Două familii de comenzi funcționează pentru asta: verifica comenzi, care verifică starea paginii și aștepta comenzi, care rețin execuția până când pagina este gata de verificare.

⚠️ O notă despre versiuni: Capturile de ecran de mai jos provin din original Firefox-conecteaza Selenium IDE, care nu mai este distribuit, și folosesc numele sale camelCase Selenese. IDE-ul actual este Chrome, Firefox și Edge extensie de browserComportamentul descris aici este încă valabil, dar mai multe nume de comenzi s-au schimbat — o hartăping tabelul apare mai târziu în acest articol, iar fiecare comandă și captură de ecran originală este păstrată exact așa cum a fost publicată.

Verificați prezența unui element

Putem folosi următoarele două comenzi pentru a verifica prezența unui element:

  • verifyElementPresent – returnează TRUE dacă elementul specificat a fost GĂSIT în pagină; FALSE dacă altfel
  • verifyElementNotPresent – returnează TRUE dacă elementul specificat NU a fost GĂSIT nicăieri în pagină; FALSE dacă este prezent.

Ambele comenzi iau un element Locator în Target câmp — un id, un nume, un selector CSS, un text de link sau un XPath expresie — și niciuna nu are nevoie de o valoare.

Scriptul de testare de mai jos verifică dacă caseta de text UserName este prezentă în Mercury Pagina de pornire a tururilor în timp ce caseta de text Prenume nu este. Caseta de text Prenume este de fapt un element prezent în pagina de înregistrare a Mercury Tururi, nu pe pagina de start.

Selenium Script IDE folosind verifyElementPresent în caseta userName și verifyElementNotPresent în caseta FirstName

Pentru că acestea sunt verifica comenzi în loc de afirma comenzi, o eroare este scrisă în jurnal, iar pașii rămași sunt în continuare executați. Această distincție este prezentată în detaliu mai jos.

Verificați prezența unui anumit text în comanda în Selenium

Verificarea existenței unui element nu este întotdeauna suficientă — un test trebuie adesea să confirme cuvintele afișate utilizatorului. Două comenzi text acoperă acest caz.

  • verifyTextPresent – returnează TRUE dacă șirul de text specificat a fost GĂSIT undeva în pagină; FALSE dacă altfel
  • verifyTextNotPresent – returnează TRUE dacă șirul de text specificat NU a fost GĂSIT nicăieri în pagină; FALSE dacă a fost găsit

Amintiți-vă că aceste comenzi sunt sensibile la majuscule.

Jurnalul de mai jos arată aceeași pagină verificată de două ori cu două ortografii ale aceleiași expresii.

Selenium Jurnal IDE care arată că verifyTextPresent trece de la Atlanta la Las Vegas și eșuează de la Atlanta la Las Vegas

În scenariul de mai sus, „Atlanta către Las Vegas” a fost tratat diferit față de „Atlanta către Las Vegas”, deoarece litera „A” din „Atlanta” era scrisă cu majusculă în primul scenariu, în timp ce cu minusculă în celălalt. Când comanda verifyTextPresent a fost utilizată pe fiecare dintre ele, unul a trecut, în timp ce celălalt a eșuat.

Verificați poziția specifică a unui element

Defectele de aspect rareori afectează un localizator, așa că verificările de prezență le ratează. Comenzile de poziționare acoperă acest gol.

Selenium IDE indică poziția unui element prin măsurarea (în pixeli) cât de departe este de marginea din stânga sau de sus a ferestrei browserului.

  • verifyElementPositionLeft – verifică dacă numărul specificat de pixeli se potrivește cu distanța elementului față de marginea din stânga a paginii. Aceasta va returna FALSE dacă valoarea specificată nu se potrivește cu distanța de la marginea din stânga.
  • verifyElementPositionTop – verifică dacă numărul specificat de pixeli se potrivește cu distanța elementului de marginea de sus a paginii. Aceasta va returna FALSE dacă valoarea specificată nu se potrivește cu distanța de la marginea superioară.

Scriptul de mai jos înregistrează decalajele așteptate ale pixelilor în coloana Valoare.

Selenium Pași IDE folosind verifyElementPositionLeft și verifyElementPositionTop cu valori ale pixelilor în coloana Valoare

Tratați aceste două comenzi cu grijă. O decalaj de pixeli se modifică în funcție de dimensiunea ferestrei, nivelul de zoom și fonturile instalate, astfel încât un număr codificat hard-coded care este transmis pe o mașină poate eșua pe alta.

Așteptați comenzile Selenium

O comandă de verificare poate inspecta doar ceea ce este deja pe ecran, așadar o verificare care rulează prea devreme eșuează chiar dacă aplicația funcționează. Comenzile de așteptare rezolvă această problemă de sincronizare.

Următoarele sunt tipurile de comenzi wait în Selenium

și Așteptați comenzi

Acestea sunt comenzi care vor aștepta încărcarea unei noi pagini înainte de a trece la următoarea comandă.

Exemple sunt

  • faceți clic și așteptați
  • tipAndWait
  • selectAndWait

Fiecare dintre ele este o comandă de acțiune obișnuită cu sufixul AndWait atașat, așa cum arată pasul înregistrat de mai jos.

Pasul clickAndWait înregistrat care ține butonul Selenium Script IDE până când următoarea pagină se termină de încărcat

așteptați comenzi

Acestea sunt comenzi care așteaptă ca o condiție specificată să devină adevărată înainte de a trece la următoarea comandă (indiferent de încărcarea unei pagini noi). Aceste comenzi sunt mai potrivite pentru a fi utilizate pe site-urile web dinamice bazate pe AJAX care schimbă valori și elemente fără a reîncărca întreaga pagină. Exemplele includ:

  • waitForTitle
  • waitForTextPresent
  • waitForAlert

Luați în considerare scenariul Facebook de mai jos.

Formular de înscriere pe Facebook care arată de ce trebuie să furnizez linkul cu data nașterii înainte de a fi accesat.

Putem folosi o combinație de „click” și „waitForTextPresent” pentru a verifica prezența textului „Providing your birthday.”

Selenium Pașii IDE care împerechează clic cu waitForTextPresent pentru a aștepta trimiterea textului de ziua ta

Nu putem folosi clickAndWait deoarece nu s-a încărcat nicio pagină la clic pe „De ce trebuie să-mi ofer ziua de naștere?” legătură. Dacă o facem, testul va eșua

Aceeași regulă se aplică oricărui conținut injectat prin script, nu prin navigare, motiv pentru care Ecrane bazate pe AJAX aproape întotdeauna este nevoie de waitFor în loc de și Wait.

Comenzi Assert vs Verify vs waitFor în Selenium IDE

Începătorii aleg frecvent familia greșită și apoi se întreabă de ce o suită se oprește la primul defect sau de ce raportează douăzeci de eșecuri pe care toate le-au... trace înapoi la unu. Cele trei prefixe răspund la trei întrebări diferite.

Prefix Ce face În caz de eșec Cel mai bine folosit pentru
afirma Verifică imediat o condiție Înregistrează eroarea și oprește cazul de testare Precondiții — o autentificare care trebuie să aibă succes înainte ca orice altceva să aibă sens
verifica Verifică imediat o condiție Înregistrează eroarea și continuă cu următoarea comandă Verificări independente, cum ar fi mai multe etichete pe o pagină de confirmare
așteptați Sondaje până când condiția devine adevărată Înregistrează eroarea după expirarea timeout-ului, apoi continuă Orice apare târziu — răspunsuri AJAX, instrumente rotative, dialoguri

Un model practic combină toate trei: afirmă pagina pe care ai ajuns, waitFor elementul care sosește asincron, apoi verifică fiecare câmp individual. Dacă faci asta în această ordine, o navigare defectă oprește testul mai devreme, în timp ce o serie de neconcordanțe cosmetice sunt raportate într-o singură rulare. Aceeași disciplină se aplică și la Selenium teste scrise în cod, unde echivalentele sunt aserțiuni dure, aserțiuni soft și așteptări explicite.

Comenzile de verificare și așteptare în curent Selenium IDE

FirefoxIDE-ul plugin care a produs capturile de ecran de mai sus a fost retras, iar setul de comenzi a fost reconstruit pentru extensia actuală de browser. Mai multe nume Selenese au supraviețuit, unele au fost redenumite, iar câteva au fost eliminate. Tabelul de mai jos mapează comenzile utilizate în acest articol cu ​​echivalentele lor actuale, preluate din versiunea oficială Selenium Referință comenzi IDE.

Comandă seleneză moștenită Comandă în IDE-ul curent
verifyElementPresent verifică prezența elementului
verifyElementNotPresent verificare element absent
verifyTextPresent verificare text (limitat la un localizator de elemente, nu la întreaga pagină)
verifyTextNotPresent verificare nu este text (limitat la un localizator de elemente)
verificareTitlu verificare titlu
verificarePozițieElementStânga / verificarePozițieElementTop Fără echivalent — afirmațiile de poziție au fost abandonate
clickȘiAșteptați, tasteazăȘiAșteptați, selecteazăȘiAșteptați Fără sufix AndWait — comanda de deschidere așteaptă deja încărcarea unei pagini
waitForElementPresent așteptați prezența elementului, cu un timp de așteptare în milisecunde
waitForAlert activarea alertei sau verificarea textului alertei după apariția dialogului

Două diferențe contează cel mai mult în munca de zi cu zi. În primul rând, comenzile actuale de așteptare — așteptați elementul prezent, așteptați elementul vizibil, așteptați elementul editabil și comenzile lor negative — au fiecare un timp de așteptare explicit în milisecunde, astfel încât un pas lent nu mai trebuie să aibă un timeout global. În al doilea rând, căutarea de text la nivel de pagină a dispărut: verificarea textului are nevoie de un localizator, care de obicei produce o verificare mai precisă.

Erori frecvente cu comenzile Verify și waitFor

Majoritatea problemelor raportate cu aceste comenzi nu sunt defecte ale IDE-ului. Lista de mai jos prezintă erorile care apar cel mai des și ce soluții le rezolvă pe fiecare.

  • Elementul există, dar verificarea tot eșuează. Prezența și vizibilitatea sunt stări diferite. Un element ascuns în spatele unei reguli CSS este încă prezent în DOM, așadar asociați verificarea prezenței cu așteptarea pentru elementul vizibil atunci când testul depinde de faptul că utilizatorul îl vede efectiv.
  • O verificare a textului eșuează pentru cuvinte care par identice. Spațiile neseparatoare, spațiile albe la final și apostrofele ondulate copiate dintr-un document de design rup o potrivire exactă. Reintroduceți șirul așteptat manual, în loc să îl lipiți.
  • O comandă wait expiră pe o pagină care s-a încărcat în mod clar. Elementul se află de obicei în interiorul unui iframe. Rulați mai întâi comanda select frame, altfel locatorul este evaluat în raport cu documentul greșit.
  • clickAndWait se blochează într-o aplicație cu o singură pagină. Nu se face nicio navigare, deci nu există nimic de așteptat. Înlocuiți-l cu un clic plus comanda waitFor corespunzătoare.
  • O verificare a poziției trece local și eșuează pe serverul de compilare. Dimensiunea ecranului și randarea fontului diferă. Preferați o verificare a prezenței sau a textului sau setați o dimensiune explicită a ferestrei la începutul testului.
  • Întreaga suită se oprește la prima nepotrivire. O comandă assert a fost înregistrată acolo unde era intenționată o comandă verify. Schimbați prefixul și rularea va raporta fiecare eroare în loc de doar prima.

Odată ce un script supraviețuiește acestor capcane, următorul pas este de obicei să stocarea valorilor de execuție în variabile astfel încât verificările se compară cu date reale, mai degrabă decât cu șiruri codificate hard.

Întrebări frecvente

IDE-ul vechi partaja un timeout global pentru fiecare pas waitFor, modificat cu comanda setTimeout. Extensia actuală necesită un timp de așteptare explicit în milisecunde pentru fiecare comandă wait, astfel încât un singur ecran lent nu mai obligă fiecare pas să aștepte la fel de mult.

Nu. Pauza intră întotdeauna în modul inactiv pe întreaga durată, așa că pierde timp când pagina este rapidă și tot eșuează când pagina este lentă. Folosește-o doar pentru a demonstra un pas în timpul unei demonstrații, niciodată într-o suită pe care intenționezi să o rulezi în mod repetat.

Nu este așa. Prezența înseamnă că nodul există în DOM, ceea ce rămâne valabil pentru elementele ascunse de CSS sau poziționate în afara ecranului. Când testul depinde de faptul că utilizatorul vede ceva, adăugați „așteptați pentru elementul vizibil” alături de verificarea prezenței.

Da, și IDE-ul actual o cere. Comanda sa de verificare a textului preia un localizator de elemente plus șirul așteptat, ceea ce este mai strict decât vechea căutare la nivel de pagină și împiedică un element de meniu fără legătură să îndeplinească o verificare pe care nu a fost niciodată menit să o îndeplinească.

Code `export` transformă fiecare comandă într-o instrucțiune echivalentă în limbajul țintă, astfel încât un pas de așteptare devine o așteptare explicită WebDriver. Citiți fișierul generat înainte de a-l considera încrezător, deoarece timeout-urile și comportamentul de eșec soft-versus-hard nu supraviețuiesc întotdeauna traducerii intacte.

Modelele de învățare automată citesc datele istorice ale rulării și semnalează pașii care eșuează intermitent, mai degrabă decât constant, ceea ce reprezintă semnătura unei așteptări lipsă. Repararea localizatorului asistată de inteligență artificială abordează cealaltă cauză comună prin propunerea unui nou selector atunci când marcajul se modifică.

Gestionează bine partea mecanică — transformând un pas de așteptare într-un WebDriverWait cu o condiție așteptată. Revvizualizați timpul de expirare pe care îl alege și condiția pe care o alege, deoarece o condiție de prezență generată trebuie adesea să fie o condiție de vizibilitate.

Locatorii sunt evaluați în raport cu documentul selectat în prezent, iar un iframe este un iframe separat. Executați mai întâi comanda select frame, apoi verificarea și reveniți la documentul de sus ulterior, astfel încât următorii pași să nu fie căutați în context greșit.

Rezumați această postare cu: