我正在尝试自动化一个具有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();
}
请帮忙!
答案 0 :(得分:1)
@Bhargav使用xpath或任何其他seleniumBy方法尝试以下代码。
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath('xpath of the loader...')));
希望这有帮助。