javascript - 由于 AJAX 加载程序,Selenium 脚本失败

标签 javascript java jquery ajax selenium-webdriver

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

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

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

因此,我在包装器方法中将 isElementPresent 用于加载程序。但是,这需要花费大量时间。 isElementPresent 需要 6-8 秒。我尝试了 className,cssSelector 作为加载器。但是,运气不好。

下面是我的代码:

 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();
   }

请帮忙!

最佳答案

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

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

希望这对您有所帮助。

关于javascript - 由于 AJAX 加载程序,Selenium 脚本失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37943965/

相关文章:

javascript - 调用函数位置

java - 如何获取 int 数组中的最低 3 个元素

javascript - 导航菜单在滚动时淡入

jQuery datepicker 从服务器端获取当前日期

javascript - 专题图: mouseover

javascript - 获取链接名称并将其写在 div 中

c# - 两个字符串特殊连接的更好方法

java - 为什么它总是给我一个系统包错误?

java - 当目录名称中存在句点时使用 Java.exe 运行

javascript - 无论我把它放在哪里,Onload 都会触发