Attesa esplicita: fermare il test sull’evento giusto rende i test più rapidi e stabili
Testo scritto con l’intelligenza artificiale a partire da una fonte citata, senza revisione umana prima della pubblicazione.
Gli explicit wait fermano uno script fino a una condizione precisa (elemento visibile, abilitato o mutazione DOM), rendendo i test più rapidi e stabili rispetto a sleep fissi e implicit wait.
Clic su Enable, le dita iniziano a scrivere, l’input è ancora disabilitato: il test va in errore. Un’attesa esplicita ferma lo script finché il campo risulta davvero utilizzabile, poi prosegue1.
Attesa esplicita significa dire allo script quando ripartire: al verificarsi di una condizione precisa. Esempi utili: un elemento compare, cambia stato, il DOM subisce una mutazione. Si definiscono la condizione, un timeout e cosa fare se la condizione non arriva entro il tempo stabilito1.
Serve perché molte pagine aggiornano il DOM in background con JavaScript. Il “momento giusto” per interagire non coincide con il caricamento iniziale. Una sleep fissa allunga ogni esecuzione e non evita le fluttuazioni. Le attese esplicite legano l’azione all’evento che conta. Così i test girano più in fretta e cadono meno spesso1.
I protocolli bidirezionali, per esempio WebDriver BiDi, aiutano. Il browser può inviare al test un segnale quando l’evento si verifica. La logica evita il polling periodico e riparte al primo cambiamento rilevante notificato dal browser1.
Attese implicite e attese esplicite hanno ruoli diversi. L’attesa implicita è una regolazione globale: ogni ricerca di elemento ritenta fino a una scadenza. L’attesa esplicita si applica in un punto del flusso e per una sola condizione. È più precisa e più semplice da ragionare. In Selenium, mescolare attese implicite ed esplicite può produrre scadenze imprevedibili. Conviene evitare la combinazione1.
Come si usa nella pratica. Si scrive la condizione da osservare e si sceglie un timeout coerente con l’applicazione. In Selenium si istanzia spesso un oggetto di attesa con “expected conditions”. Con approcci basati su eventi si registra un listener di mutazioni del DOM e si riprende non appena arriva il cambiamento atteso. La sincronizzazione si ottiene con primitive del linguaggio, per esempio latch in Java o await in JavaScript1.
Gli errori tipici nascono dalla fretta. Sostituire le attese con sleep costanti rallenta ogni run e non protegge dai picchi di latenza. Aggiungere attese implicite “per sicurezza” insieme a quelle esplicite complica il quadro temporale e genera timeout difficili da spiegare. Meglio una singola strategia chiara, ancorata all’evento che interessa1.
Esempi. Dopo un click su Enable, attendi che l’input risulti abilitato e solo allora digita. Dopo l’invio di una ricerca, aspetta che la lista contenga almeno un elemento. Per togliere uno sleep di cinque secondi, ascolta una mutazione del DOM e riprendi il test appena arriva il segnale atteso1.
Chiusura operativa. Se lo strumento che usi gestisce l’auto-wait per i casi comuni, sfruttalo. Quando il flusso dipende da una condizione che lo strumento non può indovinare, passa all’attesa esplicita: definisci l’evento rilevante, imposta il timeout, stabilisci cosa fare se non accade1.
Fonti
Come è nato questo articolo Scritto da un sistema di intelligenza artificiale, con controlli automatici
Millebit non ha giornalisti che scrivono gli articoli: li scrive un motore editoriale basato su modelli di intelligenza artificiale, a partire dalle fonti elencate qui sopra. Prima di uscire, ogni testo passa questi controlli:
- Rilettura. Un passaggio toglie i tic della prosa generata da un modello, come i contrasti costruiti e le frasi che annunciano invece di informare, senza toccare fatti e fonti.
- Fedeltà alle fonti. Un passaggio dedicato toglie ogni affermazione che le fonti non sostengono. Valutazione su questo pezzo: 10/10.
- Anti-cliché. Un filtro scarta frasi fatte, enfasi e tic della prosa artificiale: superato.
- Giudizio editoriale. Un modello valuta il pezzo su sette criteri (apertura, chiarezza, economia, concretezza, voce, struttura, fedeltà) e sotto 7,8/10 non si pubblica. Questo articolo ha preso 8,7/10 dopo 2 revisioni.
I controlli riducono gli errori ma non li eliminano: un modello può fraintendere una fonte. Per le decisioni importanti, risali alla fonte originale. Se trovi un errore, segnalacelo.
Per vedere Millebit nelle notizie principali di Google, aggiungilo alle tue fonti preferite. Oppure segui l’edizione di oggi, il feed RSS o La Sintesi.