No Selenium Webdriver, ExpectedCondition.elementToBeClickable não está esperando até que a barra de progresso desapareça
Esta pergunta é semelhante à abaixo:
ou seja, como esperar até a barra de progresso desaparecer.
Como esperar dinamicamente até que a barra de progresso seja carregada completamente no Selenium Webdriver?
O meu é um pouco diferente. Aqui, quando a barra de progresso aparece, todos os elementos estão desativados. Então, estou usando a espera explícita, mas ainda obtendo a exceção.
Cenário: Na página de inscrição, após fornecer todos os detalhes, o script clica no botão "Criar conta". Nesse instante, uma barra de progresso circular aparece e persiste por 1 ou 2 segundos. Se a senha digitada for inválida (estou validando apenas com senhas inválidas), uma mensagem de erro será exibida na parte superior da página de inscrição. Agora preciso clicar no botão "Cancelar" e repetir o processo.
Quando a barra Progresso aparecer, a página inteira será desativada. Somente após o desaparecimento da barra de progresso, o usuário poderá continuar.
Eu escrevi código para o mesmo usando o WebDriverWait como abaixo:
WebDriverWait myWaitVar = new WebDriverWait(driver,20);
Depois de clicar no botão "Criar conta", a barra de progresso aparece e estou aguardando o botão Cancelar aparecer.
//Click on Create Account btn:
driver.findElement(By.id("createAccount")).click();
//Wait till "Cancel" button is showing up. At cases, it may take some time.
myWaitVar.until(ExpectedConditions.elementToBeClickable (By.id("cancelRegister")));
//click on Cancel btn:
driver.findElement(By.id("cancelRegister")).click();
Quando executo o código acima, toda vez que estou recebendoNoSuchElementException
na última linha.
Eu tentei comExpectedCondition.visibilityOfElement()
mas aqui também estou ficandoNoSuchElementException
.
Então tentei usar o método sleep em vez de esperar.
Thread.sleep(3000);
Agora o script está funcionando bem.
Eu não conseguia entender o porquêWebDriverWait
não esperou até a barra de progresso desaparecer?
Ele analisou com êxito oelementToBeClickable()
mas ainda lançando exceção, quando clicamos nela.