Verifiera Element Present & waitFor Command in Selenium

⚡ Smart sammanfattning

Verifiera att elementet finns och waitFor-kommandon i Selenium IDE bekräftar att en sida innehåller de element och den text som ett test förväntar sig, och pausar uppspelningen tills ett dynamiskt villkor uppfylls innan nästa steg körs.

  • 🔘 Elementkontroller: verifyElementPresent returnerar TRUE när lokaliseringsfunktionen matchar något på sidan, och verifyElementNotPresent är dess exakta invers.
  • ☑️ Textkontroller: verifyTextPresent söker igenom hela sidan och är skiftlägeskänsligt, så ”Atlanta” matchar aldrig ”atlanta”.
  • Positionskontroller: verifyElementPositionLeft och verifyElementPositionTop jämför ett elements pixelförskjutning från sidkanten.
  • 🧪 Sidladdningar: andWait-kommandon som clickAndWait pausar skriptet tills en ny sida har laddats klart.
  • 🛠️ Dynamiskt innehåll: waitFor-kommandon väntar på ett villkor istället för en sidinläsning, vilket passar AJAX-skärmar som aldrig laddas om.
  • 📊 Nuvarande IDE: Webbläsartillägget byter namn på dessa steg och ger varje väntekommando en egen millisekunds timeout.

Verifiera att elementet finns och waitFor-kommandot i Selenium IDE

A inspelad Selenium IDE skriptet klickar och skriver, men avgör aldrig på egen hand om programmet betedde sig korrekt. Två kommandofamiljer gör det jobbet: verifiera kommandon, som kontrollerar sidans tillstånd, och vänta kommandon, som håller körningen inne tills sidan är redo att kontrolleras.

⚠️ En anmärkning om versioner: Skärmdumparna nedan kommer från originalet Firefox-plugin Selenium IDE, som inte längre distribueras, och de använder dess camelCase Selenese-namn. Den nuvarande IDE:n är en Chrome, Firefox och Edge webbplatstilläggBeteendet som beskrivs här gäller fortfarande, men flera kommandonamn har ändrats — en kartaping Tabellen visas senare i den här artikeln, och alla ursprungliga kommandon och skärmdumpar bevaras exakt som de publicerades.

Verifiera närvaron av ett element

Vi kan använda följande två kommandon för att verifiera närvaron av ett element:

  • verifyElementPresent – returnerar TRUE om det angivna elementet hittades på sidan; FALSK om annat
  • verifyElementNotPresent – returnerar TRUE om det angivna elementet INTE HITTS någonstans på sidan; FALSK om det finns.

Båda kommandona tar ett element locator i Target fält — ett id, ett namn, en CSS-väljare, en länktext eller ett XPath uttryck — och ingetdera behöver ett värde.

Testskriptet nedan verifierar att textrutan Användarnamn finns i Mercury Tours hemsida medan textrutan Förnamn inte är det. Textrutan Förnamn är faktiskt ett element som finns på registreringssidan för Mercury Turer, inte på hemsidan.

Selenium IDE-skript med verifyElementPresent i rutan användarnamn och verifyElementNotPresent i rutan Förnamn

För det är dessa verifiera kommandon snarare än hävda kommandon, skrivs ett fel till loggen och de återstående stegen körs fortfarande. Den skillnaden behandlas i detalj längre ner.

Verifiera närvaron av en viss text i kommandot i Selenium

Att kontrollera att ett element existerar är inte alltid tillräckligt – ett test behöver ofta bekräfta de ord som visas för användaren. Två textkommandon täcker det fallet.

  • verifieraTextPresent – returnerar TRUE om den angivna textsträngen hittades någonstans på sidan; FALSK om annat
  • verifyTextNotPresent – returnerar TRUE om den angivna textsträngen INTE HITTS någonstans på sidan; FALSK om den hittades

Kom ihåg att dessa kommandon är skiftlägeskänsliga.

Loggen nedan visar samma sida kontrollerad två gånger med två stavningar av samma fras.

Selenium IDE-logg som visar att verifyTextPresent skickas för Atlanta till Las Vegas och misslyckas för Atlanta till Las Vegas

I scenariot ovan behandlades "Atlanta till Las Vegas" annorlunda än "atlanta till Las Vegas" eftersom bokstaven "A" i "Atlanta" var stor i den första och liten i den andra. När kommandot verifyTextPresent användes på var och en av dem, godkändes den ena medan den andra misslyckades.

Verifiera specifik position för ett element

Layoutfel bryter sällan en lokalisering, så närvarokontroller missar dem. Positionskommandon täcker det gapet.

Selenium IDE anger positionen för ett element genom att mäta (i pixlar) hur långt det är från vänstra eller övre kanten av webbläsarfönstret.

  • verifyElementPositionLeft – verifierar om det angivna antalet pixlar matchar elementets avstånd från sidans vänstra kant. Detta kommer att returnera FALSE om det angivna värdet inte matchar avståndet från den vänstra kanten.
  • verifyElementPositionTop – verifierar om det angivna antalet pixlar matchar elementets avstånd från sidans överkant. Detta returnerar FALSE om det angivna värdet inte matchar avståndet från den övre kanten.

Skriptet nedan registrerar de förväntade pixelförskjutningarna i kolumnen Värde.

Selenium IDE-steg med verifyElementPositionLeft och verifyElementPositionTop med pixelvärden i kolumnen Value

Hantera dessa två kommandon med försiktighet. En pixelförskjutning ändras med fönsterstorleken, zoomnivån och de installerade teckensnitten, så ett hårdkodat tal som skickas på en maskin kan misslyckas på en annan.

Vänta kommandon in Selenium

Ett verify-kommando kan bara inspektera det som redan finns på skärmen, så en kontroll som körs för tidigt misslyckas trots att applikationen fungerar. Wait-kommandon löser det tidsproblemet.

Följande är typerna av väntekommandon i Selenium

och Vänta kommandon

Dessa är kommandon som väntar på att en ny sida laddas innan du går vidare till nästa kommando.

Exempel är

  • klicka och vänta
  • typAndWait
  • välj och vänta

Var och en av dem är ett vanligt åtgärdskommando med suffixet AndWait bifogat, vilket det inspelade steget nedan visar.

Inspelat clickAndWait-steg som håller in Selenium IDE-skript tills nästa sida är klar med laddningen

vänta på kommandon

Dessa är kommandon som väntar på att ett specificerat villkor blir sant innan du fortsätter till nästa kommando (oavsett om en ny sida laddas). Dessa kommandon är mer lämpliga att använda på AJAX-baserade dynamiska webbplatser som ändrar värden och element utan att ladda om hela sidan. Exempel inkluderar:

  • waitForTitle
  • waitForTextPresent
  • vänta på varning

Tänk på Facebook-scenariot nedan.

Facebook-registreringsformulär som visar länken Varför måste jag ange min födelsedag innan någon klickar på den

Vi kan använda en kombination av "klick" och "waitForTextPresent" för att verifiera närvaron av texten "Ange din födelsedag".

Selenium IDE-steg för att para ihop klicka med waitForTextPresent för att vänta på texten "Providing your birthday"

Vi kan inte använda clickAndWait eftersom ingen sida laddades när du klickade på "Varför behöver jag ange min födelsedag?" länk. Om vi ​​gör det kommer testet att misslyckas

Samma regel gäller för allt innehåll som injiceras via skript snarare än via navigering, vilket är anledningen till AJAX-drivna skärmar behöver nästan alltid waitFor snarare än andWait.

Assert vs Verify vs waitFor-kommandon i Selenium IDE

Nybörjare väljer ofta fel familj och undrar sedan varför en svit stannar vid den första defekten, eller varför den rapporterar tjugo fel som alla trace tillbaka till ett. De tre prefixen svarar på tre olika frågor.

Prefix Vad den gör Vid fel Används bäst till
hävda Kontrollerar ett tillstånd omedelbart Loggar felet och stoppar testfallet Förutsättningar — en inloggning som måste lyckas innan något annat blir meningsfullt
verifiera Kontrollerar ett tillstånd omedelbart Loggar felet och fortsätter med nästa kommando Oberoende kontroller, till exempel flera etiketter på en bekräftelsesida
väntaPå Opinionsundersökningar tills villkoret blir sant Loggar felet när timeout-tiden löper ut och fortsätter sedan Allt som dyker upp sent — AJAX-svar, spinnare, dialogrutor

Ett praktiskt mönster kombinerar alla tre: bekräfta sidan du landade på, vänta på elementet som anländer asynkront och verifiera sedan varje enskilt fält. Att göra det i den ordningen innebär att en trasig navigering stoppar testet tidigt, medan en handfull kosmetiska avvikelser rapporteras i en enda körning. Samma disciplin gäller även för Selenium tester skrivna i kod, där motsvarigheterna är hårda påståenden, mjuka påståenden och explicita väntningar.

Verifiera och vänta-kommandon i den aktuella Selenium IDE

Ocuco-landskapet Firefox-plugin IDE som producerade skärmdumparna ovan togs ur bruk och kommandouppsättningen byggdes om för det aktuella webbläsartillägget. Flera seleniska namn överlevde, vissa döptes om och några togs bort. Tabellen nedan mappar kommandona som används i den här artikeln till deras nuvarande motsvarigheter, hämtade från den officiella Selenium IDE-kommandoreferens.

Äldre selenesiskt kommando Kommando i den aktuella IDE:n
verifyElementPresent verifiera att elementet finns
verifyElementNotPresent verifieringselementet finns inte
verifieraTextPresent verifiera text (avgränsad till en elementsökare, inte hela sidan)
verifyTextNotPresent verifiera att det inte är text (omfattat till en elementsökare)
verifieraTitel verifiera titel
verifieraElementPositionVänster / verifieraElementPositionTopp Ingen motsvarighet — positionspåståenden togs bort
klickaOchVänta, skrivOchVänta, väljOchVänta Inget AndWait-suffix — kommandot open väntar redan på att en sida ska laddas
waitForElementPresent vänta på att elementet ska finnas, med en väntetid i millisekunder
vänta på varning bekräfta varning eller verifiera varningstext efter att dialogrutan visas

Två skillnader är viktigast i det dagliga arbetet. För det första tar de nuvarande väntekommandona – vänta på att elementet finns, vänta på att elementet är synligt, vänta på att elementet är redigerbart och deras negativa tvillingar – var och en en explicit väntetid i millisekunder, så ett långsamt steg behöver inte längre dela en global timeout. För det andra är den sidomfattande textsökningen borta: verifiera text behöver en lokaliseringsfunktion, vilket vanligtvis ger en skarpare kontroll ändå.

Vanliga fel med Verify- och waitFor-kommandon

De flesta rapporterade problemen med dessa kommandon är inte defekter i IDE:n. Listan nedan täcker de fel som uppstår oftast och vad som åtgärdar vart och ett.

  • Elementet finns men kontrollen misslyckas fortfarande. Närvaro och synlighet är olika tillstånd. Ett element som är dolt bakom en CSS-regel finns fortfarande kvar i DOM:en, så para ihop närvarokontrollen med vänta på att elementet ska vara synligt när testet är beroende av att användaren faktiskt ser det.
  • En textkontroll misslyckas på formuleringar som ser identiska ut. Hårda mellanslag, efterföljande blanksteg och lockiga apostrofer kopierade från ett designdokument bryter alla en exakt matchning. Skriv om den förväntade strängen för hand istället för att klistra in den.
  • Ett wait-kommando får timeout på en sida som tydligt laddades. Elementet finns vanligtvis inuti en iframe. Kör select frame först, annars utvärderas locatorn mot fel dokument.
  • clickAndWait hänger sig i en applikation med en enda sida. Ingen navigering sker, så det finns inget att vänta på. Ersätt det med ett klick plus lämpligt waitFor-kommando.
  • En positionskontroll godkänns lokalt och misslyckas på byggservern. Skärmstorlek och teckensnittsrendering skiljer sig åt. Föredra en närvaro- eller textkontroll, eller ange en explicit fönsterstorlek i början av testet.
  • Hela sviten stannar vid första missmatchningen. Ett assert-kommando registrerades där ett verify-kommando var avsett. Byt prefix så rapporterar körningen varje fel istället för bara det första.

När ett skript överlever dessa fällor är nästa steg vanligtvis att lagra runtime-värden i variabler så jämförs kontrollerna mot verklig data snarare än hårdkodade strängar.

Vanliga frågor

Den äldre IDE:n delade en global timeout för varje waitFor-steg, vilket ändrades med kommandot setTimeout. Det aktuella tillägget tar en explicit väntetid i millisekunder för varje wait-kommando, så en enda långsam skärm tvingar inte längre alla andra steg att vänta lika länge.

Nej. Pausen är alltid inaktiv under hela tiden, så den slösar bort tid när sidan är snabb och misslyckas fortfarande när sidan är långsam. Använd den bara för att demonstrera ett steg under en demo, aldrig i en svit som du tänker köra upprepade gånger.

Det gör det inte. Presence innebär att noden finns i DOM:n, vilket förblir sant för element som är dolda av CSS eller placerade utanför skärmen. När testet är beroende av att användaren ser något, lägg till wait for element visible bredvid närvarokontrollen.

Ja, och den nuvarande IDE:n kräver det. Dess verify text-kommando tar en elementlokaliserare plus den förväntade strängen, vilket är striktare än den gamla sidövergripande sökningen och hindrar ett orelaterat menyalternativ från att uppfylla en kontroll som det aldrig var tänkt att uppfylla.

Code export omvandlar varje kommando till en ekvivalent sats i målspråket, så ett wait-steg blir en explicit WebDriver-väntning. Läs den genererade filen innan du litar på den, eftersom timeouts och mjuk- kontra-hård-felbeteende inte alltid överlever översättningen intakt.

Maskininlärningsmodeller läser historisk kördata och flaggar de steg som misslyckas intermittent snarare än konsekvent, vilket är tecken på en saknad väntetid. AI-assisterad lokaliseringsreparation tar itu med den andra vanliga orsaken genom att föreslå en ny väljare när markup ändras.

Den hanterar den mekaniska delen bra – och omvandlar ett väntesteg till en WebDriverWait med ett förväntat villkor. Revvisa vilken timeout den väljer och vilket villkor den väljer, eftersom ett genererat närvarovillkor ofta behöver vara ett synlighetsvillkor istället.

Lokaliseringsverktyg utvärderas mot det valda dokumentet, och en iframe är en separat sådan. Kör kommandot select frame först, sedan check, och återgå till det översta dokumentet efteråt så att följande steg inte söks i fel kontext.

Sammanfatta detta inlägg med: