Sel*_*ter 0 ajax selenium-webdriver
我被困在我希望我的脚本等待 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);
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用。我的测试失败了,因为在 ajax 完成和数据更新之前调用了断言。
有人可以给我一个可行的解决方案: 1. 检查 AJAX 是否正在运行。2. 等待ajax完成。3. 等待数据更新/刷新,而不是整个页面。
谢谢 !!
这是我用来等待 Ajax 完成的代码:
public static void waitForAjaxToFinish() {
WebDriverWait wait = new WebDriverWait(driver, 5000);
wait.until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver wdriver) {
return ((JavascriptExecutor) driver).executeScript("return jQuery.active == 0").equals(true);
}
});
}
Run Code Online (Sandbox Code Playgroud)
以及我用来等待 JQuery 激活的代码:
public static void waitForJQueryToBeActive() {
Boolean isJqueryUsed = (Boolean) ((JavascriptExecutor) driver)
.executeScript("return (typeof(jQuery) != 'undefined')");
if (isJqueryUsed) {
while (true) {
// JavaScript test to verify jQuery is active or not
Boolean ajaxIsComplete = (Boolean) (((JavascriptExecutor) driver)
.executeScript("return jQuery.active == 0"));
if (ajaxIsComplete)
break;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
6803 次 |
| 最近记录: |