【发布时间】:2018-08-20 04:19:40
【问题描述】:
我被困在我希望我的脚本等到 ajax 请求完成的地方。
我试过了: 1.在慢速网络模式下运行应用,点击创建按钮,勾选JQuery.active返回1.只有ajax调用发生。
问题是整个页面没有刷新。它只是页面上的一些数据,每次都会更新。
我使用显式等待来等待加载器/进度条消失,但我被要求专门等待 ajax 完成,因为 UI 可能很快就会改变。
我尝试实现:
public boolean waitForJSandJQueryToLoad() {
WebDriverWait wait = new WebDriverWait(driver, 30);
// wait for jQuery to load
ExpectedCondition<Boolean> jQueryLoad = new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
try {
return ((Long)((JavascriptExecutor)getDriver()).executeScript("return jQuery.active") == 0);
}
catch (Exception e) {
// no jQuery present
return true;
}
}
};
// wait for Javascript to load
ExpectedCondition<Boolean> jsLoad = new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
return ((JavascriptExecutor)getDriver()).executeScript("return document.readyState")
.toString().equals("complete");
}
};
return wait.until(jQueryLoad) && wait.until(jsLoad);
}
但它不起作用。我的测试失败了,因为在 ajax 完成和数据更新之前调用了断言。
谁能给我工作解决方案: 1. 检查 AJAX 是否正在运行。 2.等到ajax完成。 3. 等到数据更新/刷新,而不是整个页面。
谢谢!!
【问题讨论】:
-
您谈到的 用例,例如检查 AJAX 是否正在运行、等到 ajax 完成和等到数据更新/刷新,而不是整个页面都是微不足道的。您的实际 usecase 应该是明确的,并且必须与页面上的 WebElements 交互相关。你能用你的确切用例、相关的HTML和代码试验更新问题吗?
-
这里是确切的用例: