由于AJAX加载器,Selenium脚本失败

时间:2016-06-21 12:05:54

标签: javascript java jquery ajax selenium-webdriver

我正在尝试自动化一个具有AJAX加载器的应用程序。它抛出错误( org.openqa.selenium.WebDriverException:未知错误:元素在点(682,395)处无法点击。其他元素将收到点击),当我尝试点击元素时装载程序当时处于活动状态。该元素无法访问。

我已经为click()创建了一个包装器方法,它确保完成了AJAX并且可以单击元素。

我尝试过jQuery.active === 0.但是,之后,由于加载程序失败了。

所以,我在包装器方法中使用了isElementPresent for loader。但是,它需要花费大量时间。 isElementPresent为6-8秒。我尝试了className,cssSelector for loader。但是,没有运气。

以下是我的代码:

 public void WaitForAjax() throws InterruptedException {

    while (true) {

        Boolean ajaxIsComplete = (Boolean) ((JavascriptExecutor) driver)
                .executeScript("return (document.readyState == 'complete') && (jQuery.active === 0);");
        if (ajaxIsComplete) {
            if (isElementPresent(By.className("z-loading-indicator"))) {
                continue;
            } else {
                break;
            }
        }
        Thread.sleep(100);
    }
}


   public void clickElement(WebElement element) throws InterruptedException {
    WaitForAjax();
    Thread.sleep(500);
    waitForElementVisible(element);
    waitForElementClickable(element);
    element.click();
   }

请帮忙!

1 个答案:

答案 0 :(得分:1)

@Bhargav使用xpath或任何其他seleniumBy方法尝试以下代码。

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath('xpath of the loader...')));

希望这有帮助。