这就是你可以做的(在高层次上)。
在客户端上,您可以调用您的 API。当 API 完成时(无论是成功还是失败),您可以设置一个全局变量来说明 API 已经完成。
$.getJSON('/some/endpoint.xhtml', {
someParam: someVar
})
.done(function (data) {
// do work
})
.fail(function (data) {
// do error handling
})
.always(function(data) {
// window.testVars will need to be initialized earlier
// like so : window.testVars = { completedEndoint = 0 };
window.testVars.completedEndpoint++;
});
JavascriptExecutor
然后在 Java Selenium 代码中,您可以通过驱动程序访问这些变量。
private static Map<String, Object> getState(WebDriver driver)
{
Map<String, Object> map = (Map<String,Object>)((JavascriptExecutor)driver).executeScript("return window.testVars");
return map;
}
然后在您的测试中,您可以使用:
Map<String,Object> defState = initializeState(driver);
performUseCaseToCallTheEndpoint();
ExpectedCondition<Boolean> condition = new ExpectedCondition<Boolean>()
{
@Override
public Boolean apply(WebDriver driver)
{
Map<String,Object> curState = getState(driver);
if(curState.get("completedEndpoint") > defState get("completedEndpoint"))
{
return true;
}
else
{
return false;
}
}
};
WebDriverWait wait = new WebDriverWait(driver, 60);
wait.until(condition);
这应该让你开始。