In order to wait for Angular processed elements, you can wait until all Angular requests are finished.
Selenium provides Explicit Waits
to perform such tasks with ExpectedCondition
Example of Expected Condition:
public static ExpectedCondition<Boolean> angularHasFinishedProcessing() {
return new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
return Boolean.valueOf(((JavascriptExecutor) driver).executeScript("return (window.angular !== undefined) && (angular.element(document).injector() !== undefined) && (angular.element(document).injector().get('$http').pendingRequests.length === 0)").toString());
}
};
}
After that, we can just use our code to wait for all AJAX requests to complete
We provide ExpectedCondition
in Explicit Waits
which is implemented with WebDriverWait
WebDriverWait wait = new WebDriverWait(driver, 15, 100);
wait.until(AdditionalConditions. angularHasFinishedProcessing()));
What we did here is, we used JavascriptExecutor
and executed javascript to get pending requests. If there is no pending request we can use this element.