Verifica la presenza dell'elemento e attendi il comando in entrata Selenium

โšก Riepilogo intelligente

Verifica la presenza dell'elemento e attendi i comandi in Selenium L'IDE verifica che una pagina contenga gli elementi e il testo previsti dal test e mette in pausa la riproduzione finchรฉ una condizione dinamica non diventa vera prima di eseguire il passaggio successivo.

  • ๐Ÿ”˜ Verifiche degli elementi: La funzione verifyElementPresent restituisce TRUE quando il localizzatore corrisponde a qualcosa sulla pagina, mentre verifyElementNotPresent รจ la sua esatta inversa.
  • โ˜‘๏ธ Verifiche del testo: verifyTextPresent analizza l'intera pagina ed รจ sensibile alle maiuscole e minuscole, quindi "Atlanta" non corrisponde mai a "atlanta".
  • โœ… Verifiche di posizionamento: Le funzioni verifyElementPositionLeft e verifyElementPositionTop confrontano lo spostamento in pixel di un elemento rispetto al bordo della pagina.
  • ๐Ÿงช Caricamento della pagina: I comandi andWait, come clickAndWait, mettono in pausa lo script finchรฉ non รจ terminato il caricamento di una nuova pagina.
  • ๏ธ Contenuto dinamico: I comandi waitFor attendono il verificarsi di una condizione anzichรฉ il caricamento della pagina, il che รจ ideale per le schermate AJAX che non si ricaricano mai.
  • ๐Ÿ“Š IDE attuale: L'estensione del browser rinomina questi passaggi e assegna a ogni comando di attesa un proprio timeout in millisecondi.

Verifica la presenza dell'elemento e attendi il comando in Selenium IDE

Un registrato Selenium IDE Lo script esegue clic e digita, ma da solo non decide mai se l'applicazione si รจ comportata correttamente. Due famiglie di comandi svolgono questo compito: verificare comandi, che controllano lo stato della pagina e aspettare comandi che sospendono l'esecuzione finchรฉ la pagina non รจ pronta per essere controllata.

โš ๏ธ Nota sulle versioni: gli screenshot qui sotto provengono dall'originale Firefox-collegare Selenium IDE, che non viene piรน distribuito, e utilizzano i suoi nomi camelCase Selenese. L'IDE attuale รจ Chrome, Firefox e Bordo estensione del browserIl comportamento qui descritto รจ ancora valido, ma diversi nomi di comando sono cambiati: una mappaping La tabella compare piรน avanti in questo articolo e ogni comando e screenshot originali sono conservati esattamente come pubblicati.

Verifica la presenza di un elemento

Possiamo utilizzare i due comandi seguenti per verificare la presenza di un elemento:

  • verificareElementPresent โ€“ restituisce TRUE se l'elemento specificato รจ stato TROVATO nella pagina; FALSE in caso contrario
  • verificareElementNotPresent โ€“ restituisce VERO se l'elemento specificato NON รจ stato TROVATO in nessun punto della pagina; FALSO se รจ presente.

Entrambi i comandi prendono un elemento locator nella Target campo โ€” un ID, un nome, un selettore CSS, un testo di collegamento o un XPath espressione โ€” e nessuno dei due ha bisogno di un valore.

Lo script di test seguente verifica che la casella di testo UserName sia presente all'interno Mercury Homepage di Tours mentre la casella di testo Nome non lo รจ. La casella di testo Nome รจ in realtร  un elemento presente nella pagina Registrazione di Mercury Tours, non nella home page.

Selenium Script IDE che utilizza verifyElementPresent sul campo userName e verifyElementNotPresent sul campo First Name.

Perchรฉ questi lo sono verificare comandi piuttosto che affermare Se si eseguono comandi, viene registrato un errore nel log e i passaggi rimanenti vengono comunque eseguiti. Questa distinzione รจ trattata in dettaglio piรน avanti.

Verifica la presenza di un determinato testo nel comando in Selenium

Verificare l'esistenza di un elemento non รจ sempre sufficiente: spesso un test deve confermare le parole mostrate all'utente. Due comandi di testo coprono questo caso.

  • verificareTextPresent โ€“ restituisce TRUE se la stringa di testo specificata รจ stata TROVATA da qualche parte nella pagina; FALSE in caso contrario
  • verificareTextNotPresent โ€“ restituisce VERO se la stringa di testo specificata NON รจ stata TROVATA in nessun punto della pagina; FALSO se รจ stato trovato

Ricorda che questi comandi fanno distinzione tra maiuscole e minuscole.

Il registro sottostante mostra la stessa pagina controllata due volte con due diverse ortografie della stessa frase.

Selenium Il log dell'IDE mostra che verifyTextPresent ha esito positivo per la tratta da Atlanta a Las Vegas e non ha esito positivo per la tratta da Atlanta a Las Vegas.

Nello scenario sopra descritto, "Atlanta to Las Vegas" รจ stato trattato in modo diverso da "atlanta to Las Vegas" perchรฉ la lettera "A" di "Atlanta" era maiuscola nel primo caso, mentre nel secondo era minuscola. Quando il comando verifyTextPresent รจ stato applicato a entrambi, uno ha superato il controllo mentre l'altro ha fallito.

Verificare la posizione specifica di un elemento

I difetti di layout raramente compromettono un localizzatore, quindi i controlli di presenza non li rilevano. I comandi di posizione colmano questa lacuna.

Selenium L'IDE indica la posizione di un elemento misurando (in pixel) quanto dista dal bordo sinistro o superiore della finestra del browser.

  • verificareElementPositionLeft โ€“ verifica se il numero di pixel specificato corrisponde alla distanza dell'elemento dal bordo sinistro della pagina. Ciรฒ restituirร  FALSE se il valore specificato non corrisponde alla distanza dal bordo sinistro.
  • verificareElementPositionTop โ€“ verifica se il numero di pixel specificato corrisponde alla distanza dell'elemento dal bordo superiore della pagina. Ciรฒ restituirร  FALSE se il valore specificato non corrisponde alla distanza dal bordo superiore.

Lo script seguente registra gli offset dei pixel previsti nella colonna Valore.

Selenium Passaggi IDE che utilizzano verifyElementPositionLeft e verifyElementPositionTop con valori in pixel nella colonna Valore

Trattate questi due comandi con cautela. L'offset in pixel varia in base alle dimensioni della finestra, al livello di zoom e ai font installati, quindi un valore fisso che funziona su un computer potrebbe non funzionare su un altro.

Attendi i comandi Selenium

Un comando di verifica puรฒ controllare solo ciรฒ che รจ giร  visualizzato sullo schermo, quindi un controllo eseguito troppo presto fallisce anche se l'applicazione รจ in esecuzione. I comandi di attesa risolvono questo problema di temporizzazione.

Di seguito sono riportati i tipi di comandi di attesa in Selenium

eAspetta comandi

Questi sono comandi che attenderanno il caricamento di una nuova pagina prima di passare al comando successivo.

Esempi sono

  • fare clic su E attendere
  • digitareAndAspettare
  • selezionaEAspetta

Ciascuno di essi รจ un normale comando di azione con il suffisso AndWait, come mostra il passaggio registrato qui sotto.

Passaggio clickAndWait registrato tenendo premuto Selenium Script IDE fino al completamento del caricamento della pagina successiva

waitFor comandi

Si tratta di comandi che attendono che una condizione specificata diventi vera prima di procedere al comando successivo (indipendentemente dal caricamento di una nuova pagina). Questi comandi sono piรน appropriati per essere utilizzati su siti Web dinamici basati su AJAX che modificano valori ed elementi senza ricaricare l'intera pagina. Esempi inclusi:

  • waitForTitle
  • waitForTextPresent
  • waitForAlert

Considera lo scenario di Facebook di seguito.

Modulo di iscrizione a Facebook che mostra il link "Perchรฉ devo fornire la mia data di nascita?" prima di essere cliccato

Possiamo utilizzare una combinazione di โ€œclickโ€ e โ€œwaitForTextPresentโ€ per verificare la presenza del testo โ€œFornire il tuo compleannoโ€.

Selenium Passaggi IDE abbinamento clic con waitForTextPresent per attendere il Fornire il tuo testo di compleanno

Non possiamo utilizzare clickAndWait perchรฉ nessuna pagina รจ stata caricata facendo clic su "Perchรฉ devo fornire la mia data di nascita?" collegamento. Se lo facciamo, il test fallirร 

La stessa regola si applica a qualsiasi contenuto iniettato tramite script anzichรฉ tramite navigazione, motivo per cui Schermate basate su AJAX Nella maggior parte dei casi รจ necessario utilizzare waitFor anzichรฉ andWait.

Assert vs Verify vs waitFor Commands in Selenium IDE

I principianti spesso scelgono la famiglia sbagliata e poi si chiedono perchรฉ una suite si ferma al primo difetto, o perchรฉ segnala venti errori che tutti trace torniamo a uno. I tre prefissi rispondono a tre domande diverse.

Prefisso Ciรฒ che fa In caso di fallimento qui utilizzati per
affermare Verifica immediatamente una condizione Registra l'errore e interrompe il caso di test Prerequisiti: un accesso che deve riuscire prima che qualsiasi altra cosa abbia senso.
verificare Verifica immediatamente una condizione Registra l'errore e continua con il comando successivo. Verifiche indipendenti, come ad esempio diverse etichette su un'unica pagina di conferma
attendere Sondaggi fino a quando la condizione non diventa vera Registra l'errore una volta scaduto il timeout, quindi continua Qualsiasi elemento che appare in ritardo: risposte AJAX, indicatori di caricamento, finestre di dialogo

Un modello pratico combina tutti e tre: verifica la pagina su cui sei atterrato, attendi l'elemento che arriva in modo asincrono, quindi verifica ogni singolo campo. Facendolo in quest'ordine, una navigazione interrotta interrompe il test in anticipo, mentre una manciata di discrepanze estetiche vengono segnalate in un'unica esecuzione. La stessa disciplina si applica a Selenium test scritti in codice, dove gli equivalenti sono asserzioni forti, asserzioni deboli e attese esplicite.

Verifica e attendi i comandi nel sistema corrente Selenium IDE

Migliori Firefox- Il plugin IDE che ha prodotto gli screenshot sopra รจ stato ritirato e il set di comandi รจ stato ricostruito per l'estensione del browser corrente. Diversi nomi Selenese sono sopravvissuti, alcuni sono stati rinominati e alcuni sono stati eliminati. La tabella seguente mappa i comandi utilizzati in questo articolo ai loro equivalenti attuali, tratti dalla documentazione ufficiale. Selenium Riferimento ai comandi IDE.

Comando Selenese Ereditario Comando nell'IDE corrente
verificareElementPresent verificare la presenza dell'elemento
verificareElementNotPresent verificare l'elemento non presente
verificareTextPresent verifica del testo (limitato a un localizzatore di elementi, non all'intera pagina)
verificareTextNotPresent verifica non testo (con ambito a localizzatore di elementi)
verificaTitolo verificare il titolo
verificaPosizioneElementoSinistra / verificaPosizioneElementoSuperiore Nessun equivalente: le asserzioni di posizione sono state abbandonate
cliccaEattendi, digitaEattendi, selezionaEattendi Nessun suffisso AndWait: il comando open attende giร  il caricamento della pagina.
waitForElementPresent Attendi la presenza dell'elemento, con un tempo di attesa in millisecondi.
waitForAlert Conferma l'avviso o verifica il testo dell'avviso dopo la visualizzazione della finestra di dialogo

Due differenze sono particolarmente importanti nel lavoro quotidiano. Innanzitutto, i comandi di attesa attuali (attendi la presenza dell'elemento, attendi la visibilitร  dell'elemento, attendi la modifica dell'elemento e le loro controparti negative) richiedono ciascuno un tempo di attesa esplicito in millisecondi, quindi un'operazione lenta non deve piรน condividere un unico timeout globale. In secondo luogo, la ricerca di testo a livello di pagina รจ stata eliminata: ora รจ presente il comando "verifica la necessitร  di un localizzatore per il testo", che di solito produce comunque un controllo piรน preciso.

Errori comuni con i comandi Verify e waitFor

La maggior parte dei problemi segnalati relativi a questi comandi non sono difetti dell'IDE. L'elenco seguente riporta gli errori piรน frequenti e le relative soluzioni.

  • L'elemento esiste, ma il controllo fallisce comunque. Presenza e visibilitร  sono stati diversi. Un elemento nascosto dietro una regola CSS รจ comunque presente nel DOM, quindi รจ opportuno abbinare il controllo di presenza all'attesa della visibilitร  dell'elemento quando il test dipende dal fatto che l'utente lo veda effettivamente.
  • Il controllo del testo fallisce se la formulazione appare identica. Gli spazi unificatori, gli spazi bianchi finali e gli apostrofi ricci copiati da un documento di progettazione non consentono una corrispondenza esatta. Riscrivi manualmente la stringa prevista anzichรฉ incollarla.
  • Un comando di attesa va in timeout su una pagina che รจ stata chiaramente caricata. L'elemento si trova solitamente all'interno di un iframe. Eseguire prima la selezione del frame, altrimenti il โ€‹โ€‹localizzatore verrร  valutato rispetto al documento sbagliato.
  • clickAndWait si blocca su un'applicazione a pagina singola. Non avviene alcuna navigazione, quindi non c'รจ nulla da attendere. Sostituiscila con un clic seguito dal comando waitFor appropriato.
  • Il controllo della posizione ha esito positivo in locale, ma fallisce sul server di compilazione. Le dimensioni dello schermo e la resa dei caratteri variano. Si consiglia di preferire un controllo di presenza o di testo, oppure di impostare esplicitamente le dimensioni della finestra all'inizio del test.
  • L'intera suite si arresta alla prima discrepanza. รˆ stato registrato un comando assert dove era previsto un comando verify. Invertendo il prefisso, l'esecuzione segnalerร  ogni errore anzichรฉ solo il primo.

Una volta che uno script sopravvive a queste trappole, il passo successivo รจ solitamente quello di memorizzare i valori di runtime nelle variabili quindi i controlli vengono confrontati con dati reali anzichรฉ con stringhe predefinite.

DOMANDE FREQUENTI

L'IDE precedente condivideva un timeout globale per ogni passaggio waitFor, modificabile tramite il comando setTimeout. L'estensione attuale, invece, utilizza un tempo di attesa esplicito in millisecondi per ogni comando wait, in modo che una singola schermata lenta non costringa piรน tutti gli altri passaggi ad attendere per lo stesso tempo.

No. La funzione Pausa rimane sempre inattiva per tutta la durata, quindi spreca tempo quando la pagina รจ veloce e fallisce comunque quando รจ lenta. Utilizzala solo per dimostrare un passaggio durante una demo, mai in una suite che intendi eseguire ripetutamente.

No. La presenza significa che il nodo esiste nel DOM, e questo rimane vero anche per gli elementi nascosti tramite CSS o posizionati fuori dallo schermo. Quando il test dipende dalla visualizzazione di un elemento da parte dell'utente, aggiungi un'attesa della visibilitร  dell'elemento insieme al controllo di presenza.

Sรฌ, e l'IDE attuale lo richiede. Il suo comando di verifica del testo accetta un localizzatore di elementi piรน la stringa prevista, che รจ piรน restrittiva della vecchia ricerca a livello di pagina e impedisce a una voce di menu non correlata di soddisfare un controllo che non era destinata a soddisfare.

Code La funzione export converte ogni comando in un'istruzione equivalente nella lingua di destinazione, in modo che un passaggio di attesa diventi un'attesa esplicita di WebDriver. Leggete il file generato prima di considerarlo attendibile, poichรฉ i timeout e il comportamento di errore "soft" o "hard" non sempre vengono mantenuti intatti dopo la traduzione.

I modelli di machine learning leggono i dati storici di esecuzione e segnalano i passaggi che falliscono in modo intermittente anzichรฉ costante, il che รจ la caratteristica distintiva di un'attesa mancante. La riparazione del localizzatore assistita dall'IA affronta l'altra causa comune proponendo un nuovo selettore quando il markup cambia.

Gestisce bene la parte meccanica, trasformando un passaggio di attesa in un WebDriverWait con una condizione prevista. RevControlla il timeout che seleziona e la condizione che sceglie, poichรฉ una condizione di presenza generata spesso deve essere una condizione di visibilitร .

I localizzatori vengono valutati rispetto al documento attualmente selezionato, e un iframe รจ un elemento separato. Eseguire prima il comando di selezione del frame, poi il controllo e infine tornare al documento principale, in modo che i passaggi successivi non vengano eseguiti nel contesto errato.

Riassumi questo post con: