Lavorare con le attese dinamiche è una questione cruciale nell'ambito dell'automazione UI, soprattutto per le moderne applicazioni web, dove i contenuti appaiono e cambiano frequentemente non istantaneamente.
Storia della questione
Nelle prime versioni dell'automazione venivano utilizzate attese rigide (sleep), che rendevano i test troppo lenti o "flaky", se le applicazioni si caricavano più a lungo del previsto. Questo è diventato rilevante nell'era delle SPA e dei pesanti JS.
Problema L'uso di ritardi statici porta a test instabili e alla perdita di tempo: un test automatico può bloccarsi o "fallire" casualmente. Inoltre, la scalabilità e il supporto dei test ne risentono.
Soluzione
Utilizzare attese dinamiche (esplicite): ad esempio, WebDriverWait in Selenium, funzioni waitFor nei framework Cypress e Playwright.
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver, 10) # attesa massima di 10 secondi wait.until(EC.visibility_of_element_located((By.ID, 'my-element')))
Caratteristiche chiave:
Perché è necessario sleep se ci sono attese dinamiche?
L'uso di time.sleep() è giustificato solo per il debug o in casi estremi. Nei veri test automatici è meglio fare sempre attese esplicite.
Può l'uso di attese escludere completamente i flaky?
No, se le condizioni di attesa sono descritte in modo inadeguato (ad esempio, aspettiamo l'apparizione di un attributo e non il caricamento completo dei dati), i flaky rimarranno.
Si può fare un'unica attesa globale per tutti i test?
No: le condizioni di comparsa degli elementi variano. Le attese devono essere applicate rigorosamente ai passaggi dove sono necessarie.
sleep invece delle atteseTutti i test automatici erano scritti con sleep(2) tra il "clic" e la verifica. Dopo l'aggiornamento della pagina, gli utenti si lamentavano dei ritardi, e i test a volte fallivano a causa della connessione lenta.
Vantaggi:
Svantaggi:
Abbiamo impostato attese esplicite per il caricamento dei blocchi, il clic è diventato possibile dopo l'apparizione degli elementi necessari. Abbiamo rinunciato a sleep, tutti i test passano in modo stabile e veloce.
Vantaggi:
Svantaggi: