The most robust way to verify a page reload is to verify that an element went stale and then to verify that a new element has loaded.
Choose an element, elementToBeStale
, which exists on the "old" page. This is the element you expect to go stale when the page reloads.
Now choose an element you expect to appear on the page once it has reloaded, xPathOfElementToLoad
. Note that this can be the same element you expected to go stale.
Note that xPathOfElementToLoad
can't be a WebElement
because the it doesn't yet exist on the page so it can't be represented by one.
WebDriverWait wait = new WebDriverWait(driver, WAIT_TIME, POLL_INTERVAL);
ExpectedCondition<Boolean> cond1 = ExpectedConditions.stalenessOf(elementToBeStale);
ExpectedCondition<WebElement> cond2 = ExpectedConditions.presenceOfElementLocated(By.xpath(xPathOfElementToLoad));
ExpectedCondition<Boolean> cond = ExpectedConditions.and(cond1, cond2);
wait.until(cond);
This is useful for page reloads because on a page reload waiting for a WebElement
to go stale guarantees the element no longer exists and then waiting for a new element to exist guarantees the new page has loaded