Solución:
También puedes usar –
new WebDriverWait(driver, 10).until(ExpectedConditions.invisibilityOfElementLocated(locator));
Si revisa la fuente de la misma, puede ver que tanto NoSuchElementException
y staleElementReferenceException
son manejados.
/**
* An expectation for checking that an element is either invisible or not
* present on the DOM.
*
* @param locator used to find the element
*/
public static ExpectedCondition<Boolean> invisibilityOfElementLocated(
final By locator) {
return new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
try {
return !(findElement(locator, driver).isDisplayed());
} catch (NoSuchElementException e) {
// Returns true because the element is not present in DOM. The
// try block checks if the element is present but is invisible.
return true;
} catch (StaleElementReferenceException e) {
// Returns true because stale element reference implies that element
// is no longer visible.
return true;
}
}
La solución aún dependería del manejo de excepciones. Y esto está bastante bien, incluso las condiciones esperadas estándar se basan en excepciones lanzadas por findElement()
.
La idea es crear un Condición esperada personalizada:
public static ExpectedCondition<Boolean> absenceOfElementLocated(
final By locator) {
return new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
try {
driver.findElement(locator);
return false;
} catch (NoSuchElementException e) {
return true;
} catch (StaleElementReferenceException e) {
return true;
}
}
@Override
public String toString() {
return "element to not being present: " + locator;
}
};
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)