Solución:
Necesitas llamar ignoring
con excepción de ignorar mientras el WebDriver
esperará.
FluentWait<WebDriver> fluentWait = new FluentWait<>(driver)
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(200, TimeUnit.MILLISECONDS)
.ignoring(NoSuchElementException.class);
Consulte la documentación de FluentWait para obtener más información. Pero tenga en cuenta que esta condición ya está implementada en ExpectedConditions, por lo que debe usar
WebElement element = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
* Actualización para versiones más nuevas de Selenium:
withTimeout(long, TimeUnit) has become withTimeout(Duration)
pollingEvery(long, TimeUnit) has become pollingEvery(Duration)
Entonces el código se verá así:
FluentWait<WebDriver> fluentWait = new FluentWait<>(driver)
.withTimeout(Duration.ofSeconds(30)
.pollingEvery(Duration.ofMillis(200)
.ignoring(NoSuchElementException.class);
El tutorial básico para esperar se puede encontrar aquí.
WebDriverWait wait = new WebDriverWait(driver,5)
wait.until(ExpectedConditions.visibilityOf(element));
puede usar esto como un tiempo antes de que se ejecute la carga de código de página completa y se produzca un error. el tiempo es en segundo
Permítame recomendarle que use la biblioteca Selenide. Permite escribir pruebas mucho más concisas y legibles. Puede esperar la presencia de elementos con una sintaxis mucho más corta:
$("#elementId").shouldBe(visible);
Aquí hay un proyecto de muestra para probar la búsqueda de Google: https://github.com/selenide-examples/google