¿Por qué Thread.sleep(5000) es una mala forma de esperar en tests de UI, y qué es mejor?
Opciones
- Siempre espera todo el tiempo; usa explicit waits (Opción correcta)
- Hace caer el navegador cuando el tiempo es largo
- Selenium lo prohíbe en todos sus drivers
- Es el mejor enfoque para páginas lentas
Respuesta
Siempre espera todo el tiempo (lento) y aun así puede quedarse corto (flaky); usa explicit waits (WebDriverWait con condiciones esperadas) que continúan en cuanto se cumple la condición
Por qué
Las páginas cargan de forma asíncrona, así que los tests deben esperar a los elementos. Un sleep fijo es demasiado largo (frena la suite) o demasiado corto (fallos aleatorios).
Explicit wait: new WebDriverWait(driver, Duration.ofSeconds(10)).until(ExpectedConditions.visibilityOfElementLocated(...)) comprueba hasta que la condición se cumple o se agota el tiempo.
Los implicit waits se aplican globalmente a las búsquedas de elementos; no mezcles implicit y explicit waits, porque el tiempo total se vuelve impredecible.
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
WebElement banner = wait.until(
ExpectedConditions.visibilityOfElementLocated(By.id("success")));Recuerda
Espera a una condición, no un tiempo fijo.