La guía paso a paso o código que hallarás en este post es la resolución más rápida y efectiva que encontramos a tu duda o problema.
Solución:
Debe esperar a que Javascript y jQuery terminen de cargarse. Ejecute Javascript para comprobar si jQuery.active
es 0
y document.readyState
es complete
lo que significa que la carga de JS y jQuery está completa.
public boolean waitForJSandJQueryToLoad()
WebDriverWait wait = new WebDriverWait(driver, 30);
// wait for jQuery to load
ExpectedCondition jQueryLoad = new ExpectedCondition()
@Override
public Boolean apply(WebDriver driver)
try
return ((Long)((JavascriptExecutor)getDriver()).executeScript("return jQuery.active") == 0);
catch (Exception e)
// no jQuery present
return true;
;
// wait for Javascript to load
ExpectedCondition jsLoad = new ExpectedCondition()
@Override
public Boolean apply(WebDriver driver)
return ((JavascriptExecutor)getDriver()).executeScript("return document.readyState")
.toString().equals("complete");
;
return wait.until(jQueryLoad) && wait.until(jsLoad);
Como Mark Collin describió en su libro “Mastering Selenium Webdriver”, el uso de JavascriptExecutor le permite averiguar si un sitio web que usa jQuery ha terminado de realizar llamadas AJAX.
public class AdditionalConditions
public static ExpectedCondition jQueryAJAXCallsHaveCompleted()
return new ExpectedCondition()
@Override
public Boolean apply(WebDriver driver)
return (Boolean) ((JavascriptExecutor) driver).executeScript("return (window.jQuery != null) && (jQuery.active === 0);");
;
He estado usando este simple do while para iterar hasta que finaliza un AJAX. Funciona constantemente para mí.
public void waitForAjax() throws InterruptedException
while (true)
Boolean ajaxIsComplete = (Boolean) ((JavascriptExecutor)driver).executeScript("return jQuery.active == 0");
if (ajaxIsComplete)
info("Ajax Call completed. ");
break;
Thread.sleep(150);
Recuerda algo, que puedes optar por la opción de aclarar tu experiencia si te ayudó.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)