/ / WebDriver espera hasta que se encuentre este o aquel elemento - selenium-webdriver, webdriver, transportador

WebDriver espera hasta que se encuentre este o aquel elemento - selenium-webdriver, webdriver, protractor

En uno de los flujos de trabajo de la aplicación tengo más de 10 páginas para navegar.

Tengo que seguir haciendo clic en el botón "Siguiente"continuamente: realiza una llamada AJAX para volver a cargar contenido nuevo y el botón "Siguiente" también se volverá a cargar. El número de páginas para navegar no siempre es 10. Puede ser de 10 a 100.

Mi prueba se completará siempre que se encuentre un elemento web con la identificación "testcomplete".

Así que actualmente uso ExpectedConditions ()

WebDriverWait wait = new WebDriverWait(driver, 30);

//Keep clicking next
while(isNextPresent()){
NextButton.click();
}

//testcomplete reached here
System.out.println("test complete");




private boolean isNextPresent(){
try{
WebElement element = wait.until(ExpectedConditions.visibilityOf(NextButton));
return true;
}catch(Exception e){
//
}
return false;
}

Actualmente mi código funciona bien. Pero estoy tratando de mejorarlo. Odio la espera innecesaria de 30 segundos cuando el elemento con la identificación "testcomplete" está presente. Porque esa vez "NextButton" no estará presente.

¿Cómo puedo mejorar esto? isNextPresent ¿función? Es decir, ¿devolver falso inmediatamente cuando hay "testcomplete" en lugar de esperar 30 segundos?

Nota: También he etiquetado el transportador porque también tengo un requisito similar en transportador.

Respuestas

1 para la respuesta № 1

Puedes combinar las condiciones de ambos elementosy tome una acción dependiendo del hecho de cuál primero devuelve verdadero para "visibilidadOf (myElement)". Tal vez algo así en pseudo (lo siento, no hay IDE alrededor):

loop(i < 30){
// wait NextBtn for 1 sec, if true click and break
// wait TestCopmlete for 1 sec
}

1 para la respuesta № 2

Use EC.or (), a la:

wait.until(ExpectedConditions.or(
ExpectedConditions.visibilityOf(NextButton),
ExpectedConditions.visibilityOf(element(by.id("testcomplete")))
));

Luego, después de que esto regrese, expect el estado deseado:

expect(NextButton.isDisplayed()).toBeTruthy();