Ignorando temporariamente as esperas implícitas com o WebDriver
Ao usar esperas implícitas,como recomendado aqui, Eu aindaas vezes quer afirmar oimediato invisibilidade ou inexistência de elementos.
Em outras palavras, euconhecer alguns elementos devem ser escondidos, e quero que meus testes façam essa afirmaçãovelozes, sem gastar vários segundos por causa da espera (de outra forma útil) implícita.
Uma coisa que eu tentei foi um método auxiliar assim:
// NB: doesn't seem to do what I want
private boolean isElementHiddenNow(String id) {
WebDriverWait zeroWait = new WebDriverWait(driver, 0);
ExpectedCondition<Boolean> c = invisibilityOfElementLocated(By.id(id));
try {
zeroWait.until(c);
return true;
} catch (TimeoutException e) {
return false;
}
}
Mas no código acima, a chamada parauntil()
só retornaapós o tempo de espera implícito ter passado, isto é, não faz o que eu queria.
Esta é a única maneira que encontrei até agora que funciona:
@Test
public void checkThatSomethingIsNotVisible() {
turnOffImplicitWaits();
// ... the actual test
turnOnImplicitWaits();
}
... onde, por ex.turnOffImplicitWaits()
é um ajudante em comum superclasse de selênio:
protected void turnOffImplicitWaits() {
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
}
Mas isso não é muito elegante, eu acho.Existe alguma maneira mais limpa de contornar a espera implícita ocasionalmente?