如果在应用程序中没有实现JQuery,如何在Selenium中等待API?

时间:2018-01-11 07:08:39

标签: selenium selenium-webdriver

在我的应用程序中,我们不再使用JQuery而是使用标准j并使用xmlhttprequest Web API。

如果应用程序在使用JQuery实现等待ajax时,我们通常使用selenium片段:

wait = Selenium::WebDriver::Wait.new(:timeout => 20)
wait.until { @driver.execute_script("return jQuery.active").to_i == 0 }

如果应用程序不支持JQuery,如何处理wait_for_ajax / wait for API response call

3 个答案:

答案 0 :(得分:0)

我通常处理这种情况的方法是等待页面加载,等待特定元素(或元素组)在页面上可见。一旦满足该条件,就会加载页面。

如果在页面加载后你在触发页面部分重新加载的页面上执行某些操作,那么你会在页面的动态部分找到一个元素来等待,这表明动态加载已经完成

我使用页面对象模型,因此我在页面对象构造函数中处理页面加载以及我在触发操作的方法中处理的任何动态问题,例如clickButton()不仅会单击该按钮,还会等待等待动态加载完成。

答案 1 :(得分:0)

正如您在问题if the application doesn't support JQuery中提到的那样,简单的替代方法是使用 WebDriverWait 来取回下一个目标元素的可用性,如下所示:

  • <强> WebDriverWait

    WebElement myElement = new WebDriverWait(driver, 10).until(driver => driver.FindElement(By.Id("next_intended_element_id")));
    

答案 2 :(得分:0)

在我的Java代码中,我喜欢这样:

//Wait for JQuery Load
public static void waitForJQueryLoad() {
    //Wait for jQuery to load
    ExpectedCondition<Boolean> jQueryLoad = driver -> ((Long) ((JavascriptExecutor) jsWaitDriver)
            .executeScript("return jQuery.active") == 0);

    //Get JQuery is Ready
    boolean jqueryReady = (Boolean) jsExec.executeScript("return jQuery.active==0");

    //Wait JQuery until it is Ready!
    if(!jqueryReady) {
        System.out.println("JQuery is NOT Ready!");
        //Wait for jQuery to load
        jsWait.until(jQueryLoad);
    } else {
        System.out.println("JQuery is Ready!");
    }
}