1

I am checking in my selenium script if ajax calls are completed, in which I first check if document is ready then check if jQuery is defined and then check active status

public class WaitForAjaxToLoad {
public static void waitForAjaxToLoad(WebDriver driver) {

        final JavascriptExecutor js= (JavascriptExecutor) driver;
        WebDriverWait wait = new WebDriverWait(driver, 15);
        ExpectedCondition<Boolean> e = new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver driver) {

               if(js.executeScript("return document.readyState").equals("complete"))
               {
                    if((boolean) js.executeScript("return window.jQuery != undefined")) {
                      Boolean status= (Boolean) js.executeScript("return jQuery.active==0");
                      System.out.println("Jquery is defined active status:"+status+"for thread:"+Thread.currentThread().getId());
                        if (status) {
                            return true;
                        } else {
                            return false;
                        }
                    }
                    else {
                        System.out.println("jQuery is undefined for thread "+Thread.currentThread().getId());
                        return false;
                    }
               }
               else {
                   System.out.println("Document is not ready for thread "+Thread.currentThread().getId());
                   return false;
               }


            }
        };  
         wait.until(e);

 }
}

When I execute my script , document is ready but jQuery is undefined. This happens when test method is executed in parallel. Why do i get jQuery is undefined once document is ready?

Grishma Oswal
  • 303
  • 1
  • 7
  • 22

1 Answers1

1

Adapting this answer for Java, your test could be greatly simplified - without, in my view, losing anything valuable:

WebDriverWait wait = new WebDriverWait(driver, 15);
wait.until(new Function<WebDriver, WebElement>() {
    public Boolean apply(WebDriver driver) {
        return js.executeScript("return jQuery.active == 0");
    }
});
Community
  • 1
  • 1
Andrew Regan
  • 5,087
  • 6
  • 37
  • 73