Bekræft Element Present & waitFor Command in Selenium

⚡ Smart opsummering

Bekræft tilstedeværelsen af ​​elementet og waitFor-kommandoer i Selenium IDE bekræfter, at en side indeholder de elementer og den tekst, som en test forventer, og sætter afspilningen på pause, indtil en dynamisk betingelse bliver sand, før næste trin køres.

  • 🔘 Elementtjek: verifyElementPresent returnerer TRUE, når locatoren matcher noget på siden, og verifyElementNotPresent er dens eksakte inverse.
  • ☑️ Tekstkontroller: verifyTextPresent søger på hele siden og skelner mellem store og små bogstaver, så "Atlanta" matcher aldrig "atlanta".
  • Positionstjek: verifyElementPositionLeft og verifyElementPositionTop sammenligner et elements pixelforskydning fra sidekanten.
  • 🧪 Sideindlæsninger: andWait-kommandoer som f.eks. clickAndWait sætter scriptet på pause, indtil en ny side er færdigindlæst.
  • 🛠️ Dynamisk indhold: waitFor-kommandoer venter på en betingelse i stedet for en sideindlæsning, hvilket passer til AJAX-skærme, der aldrig genindlæses.
  • 📊 Nuværende IDE: Browserudvidelsen omdøber disse trin og giver hver ventekommando sin egen millisekund timeout.

Bekræft tilstedeværelsen af ​​elementet og waitFor-kommandoen i Selenium IDE

A optaget Selenium IDE scriptet klikker og skriver, men afgør aldrig alene, om applikationen opførte sig korrekt. To kommandofamilier udfører det arbejde: verificere kommandoer, som kontrollerer sidens tilstand, og vente kommandoer, som holder kørelsen tilbage, indtil siden er klar til at blive kontrolleret.

⚠️ En bemærkning om versioner: Skærmbillederne nedenfor stammer fra originalen Firefox-plugin Selenium IDE, som ikke længere distribueres, og de bruger dens camelCase Selenese-navne. Den nuværende IDE er en Chrome, Firefox og Edge browser udvidelseDen her beskrevne adfærd gælder stadig, men flere kommandonavne er ændret — et kortping Tabellen vises senere i denne artikel, og alle originale kommandoer og skærmbilleder bevares nøjagtigt som offentliggjort.

Bekræft tilstedeværelsen af ​​et element

Vi kan bruge følgende to kommandoer til at bekræfte tilstedeværelsen af ​​et element:

  • verifyElementPresent – returnerer TRUE, hvis det angivne element blev FUNDET på siden; FALSK hvis andet
  • verifyElementNotPresent – returnerer TRUE, hvis det angivne element IKKE blev FUNDET noget sted på siden; FALSK, hvis den er til stede.

Begge kommandoer tager et element locator i Target felt — et id, et navn, en CSS-vælger, en linktekst eller et XPath udtryk — og ingen af ​​dem behøver en værdi.

Testscriptet nedenfor bekræfter, at tekstboksen Brugernavn er til stede i Mercury Tours hjemmeside, mens tekstfeltet Fornavn ikke er det. Tekstboksen Fornavn er faktisk et element, der findes på registreringssiden for Mercury Rundvisninger, ikke på hjemmesiden.

Selenium IDE-script ved hjælp af verifyElementPresent i userName-feltet og verifyElementNotPresent i First Name-feltet

Fordi disse er verificere kommandoer snarere end hævde kommandoer, skrives en fejl til loggen, og de resterende trin kører stadig. Denne sondring er dækket i detaljer længere nede.

Bekræft tilstedeværelsen af ​​en bestemt tekst i kommando i Selenium

Det er ikke altid nok at kontrollere, om et element eksisterer – en test skal ofte bekræfte de ord, der vises til brugeren. To tekstkommandoer dækker dette tilfælde.

  • verifyTextPresent – returnerer TRUE, hvis den angivne tekststreng blev FUNDET et sted på siden; FALSK hvis andet
  • verifyTextNotPresent – returnerer TRUE, hvis den angivne tekststreng IKKE blev FUNDET noget sted på siden; FALSK hvis den blev fundet

Husk, at disse kommandoer skelner mellem store og små bogstaver.

Loggen nedenfor viser den samme side kontrolleret to gange med to stavemåder af den samme sætning.

Selenium IDE-log, der viser, at verifyTextPresent sendes for Atlanta til Las Vegas, men fejler for Atlanta til Las Vegas

I ovenstående scenarie blev "Atlanta til Las Vegas" behandlet anderledes end "atlanta til Las Vegas", fordi bogstavet "A" i "Atlanta" var stort på den første, mens det var lille på den anden. Da verifyTextPresent-kommandoen blev brugt på hver af dem, bestod den ene, mens den anden mislykkedes.

Bekræft specifik position af et element

Layoutfejl ødelægger sjældent en lokator, så tilstedeværelseskontroller overser dem. Positionskommandoer lukker dette hul.

Selenium IDE angiver positionen af ​​et element ved at måle (i pixels), hvor langt det er fra venstre eller øverste kant af browservinduet.

  • verifyElementPositionLeft – verificerer, om det angivne antal pixels svarer til elementets afstand fra venstre kant af siden. Dette vil returnere FALSK, hvis den angivne værdi ikke svarer til afstanden fra venstre kant.
  • verifyElementPositionTop – verificerer, om det angivne antal pixels svarer til elementets afstand fra sidens øverste kant. Dette vil returnere FALSK, hvis den angivne værdi ikke svarer til afstanden fra den øverste kant.

Scriptet nedenfor registrerer de forventede pixelforskydninger i værdikolonnen.

Selenium IDE-trin ved brug af verifyElementPositionLeft og verifyElementPositionTop med pixelværdier i værdikolonnen

Behandl disse to kommandoer med forsigtighed. En pixelforskydning ændrer sig med vinduesstørrelsen, zoomniveauet og de installerede skrifttyper, så et hardcodet tal, der sendes på én maskine, kan fejle på en anden.

Vent kommandoer ind Selenium

En verify-kommando kan kun inspicere det, der allerede er på skærmen, så en kontrol, der kører for tidligt, mislykkes, selvom applikationen fungerer. Wait-kommandoer løser dette timingproblem.

Følgende er typerne af ventekommandoer i Selenium

og vent-kommandoer

Disse er kommandoer, der vil vente på, at en ny side indlæses, før du går videre til den næste kommando.

eksempler er

  • klik og vent
  • typeAndWait
  • vælgOgVent

Hver af dem er en almindelig handlingskommando med AndWait-suffikset tilknyttet, som det optagede trin nedenfor viser.

Optaget clickAndWait-trin, der holder Selenium IDE-script indtil den næste side er færdigindlæst

vente på kommandoer

Disse er kommandoer, der venter på, at en specificeret betingelse bliver sand, før du fortsætter til den næste kommando (uanset indlæsning af en ny side). Disse kommandoer er mere passende til at blive brugt på AJAX-baserede dynamiske websteder, der ændrer værdier og elementer uden at genindlæse hele siden. Eksempler omfatter:

  • vente på titel
  • venteTekstPresent
  • vente på advarsel

Overvej Facebook-scenariet nedenfor.

Facebook-tilmeldingsformular, der viser linket "Hvorfor skal jeg angive min fødselsdag, før der klikkes på det?"

Vi kan bruge en kombination af "klik" og "waitForTextPresent" for at bekræfte tilstedeværelsen af ​​teksten "Oplyser din fødselsdag".

Selenium IDE-trin parrer klik med waitForTextPresent for at vente på teksten Giver din fødselsdag

Vi kan ikke bruge clickAndWait, fordi ingen side blev indlæst ved at klikke på "Hvorfor skal jeg oplyse min fødselsdag?" link. Hvis vi gør det, vil testen mislykkes

Den samme regel gælder for alt indhold, der indsættes via script i stedet for navigation, hvilket er grunden til AJAX-drevne skærme har næsten altid brug for waitFor i stedet for andWait.

Assert vs. Verify vs. waitFor-kommandoer i Selenium IDE

Begyndere vælger ofte den forkerte familie og undrer sig derefter over, hvorfor en suite stopper ved den første defekt, eller hvorfor den rapporterer tyve fejl, der alle tractilbage til én. De tre præfikser besvarer tre forskellige spørgsmål.

Præfiks Hvad gør den Ved fejl Bedste brugt til
hævde Kontrollerer en tilstand med det samme Logger fejlen og stopper testcasen Forudsætninger — et login, der skal lykkes, før noget andet giver mening
verificere Kontrollerer en tilstand med det samme Logfører fejlen og fortsætter med den næste kommando Uafhængige kontroller, såsom flere etiketter på én bekræftelsesside
ventPå Afstemninger indtil betingelsen bliver sand Logger fejlen, når timeouten udløber, og fortsætter derefter Alt, der dukker op sent — AJAX-svar, spinners, dialoger

Et praktisk mønster kombinerer alle tre: bekræfter den side, du er landet på, vent på det element, der ankommer asynkront, og verificerer derefter hvert enkelt felt. Hvis du gør det i den rækkefølge, stopper én defekt navigation testen tidligt, mens en håndfuld kosmetiske uoverensstemmelser alle rapporteres i en enkelt kørsel. Den samme disciplin overføres til Selenium tests skrevet i kode, hvor ækvivalenterne er hårde påstande, bløde påstande og eksplicitte ventetider.

Bekræft og vent-kommandoer i den aktuelle Selenium IDE

Firefox-plugin IDE'et, der producerede skærmbillederne ovenfor, blev trukket tilbage, og kommandosættet blev genopbygget til den nuværende browserudvidelse. Adskillige selenesiske navne overlevede, nogle blev omdøbt, og et par stykker blev droppet. Tabellen nedenfor viser de kommandoer, der bruges i denne artikel, i forhold til deres nuværende ækvivalenter, taget fra den officielle Selenium IDE-kommandoreference.

Ældre selenisk kommando Kommando i det nuværende IDE
verifyElementPresent verificér tilstedeværende element
verifyElementNotPresent verificeringselementet er ikke til stede
verifyTextPresent bekræft tekst (afgrænset til en elementsøger, ikke hele siden)
verifyTextNotPresent bekræft ikke tekst (beregnet til en elementsøger)
verificérTitel bekræft titel
verificerElementPositionVenstre / verificerElementPositionTop Ingen tilsvarende — positionspåstande blev droppet
klikOgVent, skrivOgVent, vælgOgVent Intet AndWait-suffiks — kommandoen "åbn" venter allerede på, at en side indlæses
waitForElementPresent Vent på element til stede, med en ventetid i millisekunder
vente på advarsel hævd advarsel eller bekræft advarselstekst efter dialogboksen vises

To forskelle er vigtigst i det daglige arbejde. For det første tager de nuværende ventekommandoer - vent på element til stede, vent på element synligt, vent på element redigerbart og deres negative tvillinger - hver en eksplicit ventetid i millisekunder, så et langsomt trin ikke længere behøver at dele én global timeout. For det andet er den sideomfattende tekstsøgning væk: verificer tekst kræver en locator, hvilket normalt giver en skarpere kontrol alligevel.

Almindelige fejl med Verify- og waitFor-kommandoer

De fleste rapporterede problemer med disse kommandoer er ikke defekter i IDE'en. Listen nedenfor dækker de fejl, der opstår oftest, og hvad der løser hver enkelt.

  • Elementet findes, men kontrollen mislykkes stadig. Tilstedeværelse og synlighed er forskellige tilstande. Et element, der er skjult bag en CSS-regel, er stadig til stede i DOM'en, så par tilstedeværelseskontrollen med vent på elementets synlighed, når testen afhænger af, at brugeren rent faktisk ser det.
  • En tekstkontrol mislykkes ved formulering, der ser identisk ud. Hartbrudte mellemrum, efterfølgende mellemrum og krøllede apostroffer kopieret fra et designdokument afbryder alle et præcist match. Indtast den forventede streng i hånden i stedet for at indsætte den.
  • En wait-kommando får timeout på en side, der tydeligvis er indlæst. Elementet er normalt inde i en iframe. Kør select frame først, ellers evalueres locatoren i forhold til det forkerte dokument.
  • clickAndWait hænger i en applikation med én side. Der sker ingen navigation, så der er intet at vente på. Erstat det med et klik plus den relevante waitFor-kommando.
  • En positionskontrol gennemføres lokalt og mislykkes på byggeserveren. Skærmstørrelse og skrifttypegengivelse varierer. Foretræk en tilstedeværelses- eller tekstkontrol, eller angiv en eksplicit vinduesstørrelse i starten af ​​testen.
  • Hele suiten stopper ved den første uoverensstemmelse. En assert-kommando blev optaget, hvor en verify-kommando var tiltænkt. Skift præfikset, og kørslen vil rapportere alle fejl i stedet for kun den første.

Når et script overlever disse fælder, er det næste skridt normalt at gemme runtime-værdier i variabler så kontrollerne sammenlignes med reelle data i stedet for hardcodede strenge.

Ofte Stillede Spørgsmål

Det ældre IDE delte én global timeout på tværs af hvert waitFor-trin, hvilket blev ændret med setTimeout-kommandoen. Den nuværende udvidelse tager en eksplicit ventetid i millisekunder på hver wait-kommando, så en enkelt langsom skærm tvinger ikke længere alle andre trin til at vente lige så længe.

Nej. Pause er altid i dvaletilstand i hele programmets varighed, så den spilder tid, når siden er hurtig, og fejler stadig, når siden er langsom. Brug den kun til at demonstrere et trin under en demo, aldrig i en pakke, du har til hensigt at køre gentagne gange.

Det gør det ikke. Presence betyder, at noden findes i DOM'en, hvilket forbliver sandt for elementer, der er skjult af CSS eller placeret uden for skærmen. Når testen afhænger af, at brugeren ser noget, skal du tilføje `wait for visible element` sammen med presence-kontrollen.

Ja, og det nuværende IDE kræver det. Dens verify text-kommando tager en elementlokator plus den forventede streng, hvilket er strengere end den gamle sideomfattende søgning og forhindrer et urelateret menupunkt i at opfylde en kontrol, det aldrig var meningen skulle opfylde.

Code `export` omdanner hver kommando til en tilsvarende sætning på målsproget, så et `wait`-trin bliver en eksplicit `WebDriver wait`. Læs den genererede fil, før du stoler på den, da `timeouts` og `soft-versus-hard`-fejlads ikke altid overlever oversættelsen intakt.

Maskinlæringsmodeller læser historiske kørselsdata og markerer de trin, der fejler periodisk snarere end konsekvent, hvilket er et tegn på en manglende ventetid. AI-assisteret locator-reparation tackler den anden almindelige årsag ved at foreslå en ny selektor, når markup ændres.

Den håndterer den mekaniske del godt — det omdanner et ventetrin til en WebDriverWait med en forventet betingelse. RevSe den timeout, den vælger, og den betingelse, den vælger, da en genereret tilstedeværelsesbetingelse ofte skal være en synlighedsbetingelse i stedet.

Lokaliseringspunkter evalueres i forhold til det aktuelt valgte dokument, og en iframe er en separat. Kør først kommandoen "select frame", derefter "check", og vend tilbage til det øverste dokument bagefter, så de følgende trin ikke søges i den forkerte kontekst.

Opsummer dette indlæg med: