El selenium espera a que se cargue el contenido de Ajax: enfoque universal

¿Hay un enfoque universal para que Selenium espere hasta que todo el contenido de Ajax se haya cargado? (No está vinculado a un sitio web específico, por lo que funciona para todos los sitios web de Ajax)

Debes esperar a que Javascript y jQuery terminen de cargarse. Ejecute Javascript para verificar si jQuery.active es 0 y document.readyState está 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”, utilice JavascriptExecutor para saber si un sitio web que utiliza 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);"); } }; } } 

No creo que haya un enfoque universal desde el primer momento. Normalmente hago un método que hace un .waituntilrowcount(2) o waituntilvisible() que sondea un elemento.

Intereting Posts