Playwright: tracciare una timeline di stati per trovare il primo errore nelle email
Testo scritto con l’intelligenza artificiale a partire da una fonte citata, senza revisione umana prima della pubblicazione.
Registrare ogni transizione (stato, timestamp, dettagli) trasforma 'email non trovata' in un punto preciso da diagnosticare.
Il test fallisce con “email non trovata”. La domanda utile è: qual è stato il primo stato diventato impossibile1?
Un test di verifica email attraversa più sistemi: il browser invia il form, l’applicazione accoda il messaggio, un servizio lo processa, l’API dell’inbox lo espone, il test apre il link o il codice. Ogni tratto ha ritardi diversi. Un timeout fisso può nascondere il buco di tempo, poi crolla sotto carico in CI. L’inbox è un evento ritardato, non una query. Trattarlo come una query produce retry sbagliati e debug lenti1.
Serve una timeline di stati osservabili. Nomina le transizioni attese: form_submitted, account_created, message_requested, message_received, verification_link_opened, account_verified. Registra solo ciò che il test può vedere: il browser osserva il submit e la pagina di verifica, il client inbox la ricezione, i log applicativi la creazione dell’account. Un record minimo basta: state, timestamp ISO, dettagli opzionali. Una funzione mark aggiunge l’evento subito dopo l’azione. Stampa la timeline con nome del test e run ID quando il test fallisce1.
Identità univoca per ogni esecuzione. Genera un indirizzo distinto per test o per worker, per evitare collisioni tra run paralleli. Esempio: pw-{workerIndex}-{Date.now()}@example.test. Compila il form con quell’indirizzo, invia, marca form_submitted. Attendi in UI “Check your email”, poi marca account_created. Interroga l’inbox con waitForMessage filtrando per destinatario e subject “Verify your account”, con timeout di 30_000 millisecondi. Quando arriva, marca message_received con il message.id. Estrai un link che contenga “/verify/”, visita l’URL e marca verification_link_opened. Attendi l’heading “Account verified” e chiudi con account_verified1.
Conta il contratto dell’inbox. waitForMessage deve filtrare per recipient e subject, restituire un message ID e, in errore, elencare i candidati osservati. Un messaggio tipo “Timed out after 30 seconds” aiuta poco. Meglio: “ricevuti messaggi per altro destinatario, nessun subject corrispondente in questo run”. Oppure: “visti n messaggi, nessuno con recipient e subject richiesti, candidati: <recipient, subject>”. Queste frasi legano il timeout alle evidenze raccolte, così si indaga il confine giusto1. Se l’API dell’inbox lo permette, aggiungi al messaggio un token legato al run. Evita che un’email vecchia soddisfi un test nuovo1.
Isola e rendi osservabili le letture dell’inbox. Tre confini: identità unica, match su recipient, subject e marker di run, cleanup che scade o cancella l’inbox ma conserva un piccolo record di fallimento. Evita retry generici che coprono tutto. Riprova solo quando il messaggio può non essere ancora disponibile. Errori di autenticazione, risposte malformate o destinatari sbagliati devono emergere subito. Per esecuzioni agent-driven o via riga di comando, documenta cosa significa “attendere”: cosa ritorna, quanto attende, quali prove conserva. Controlla anche gli orologi. Browser, applicazione e provider possono non essere allineati. Usa un numero di sequenza locale per ordinare gli eventi, e i timestamp come supporto1.
Quando il test cade, segui una checklist: indirizzo unico, stato post-submit visibile, richiesta di invio registrata, messaggi ricevuti con subject e recipient candidati nel report, appartenenza al run verificata, link estratto con il pattern giusto, pagina di verifica e trace finali preservati. Anche un refuso come “temp mail com” non deve diventare una dipendenza nascosta in repository1.
Passi operativi: definisci il contratto di waitForMessage con filtri, timeout e output diagnostico, aggiungi un marker di run nei messaggi, stampa la timeline al fallimento. Così la flakiness diventa diagnosi azionabile1.
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,4/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.