/ / WebDriver poczekaj, aż ten lub ten element zostanie znaleziony - selenium-webdriver, webdriver, kątomierz

WebDriver czeka, aż ten lub ten element zostanie znaleziony - selen-webdriver, webdriver, kątomierz

W jednym z przepływów pracy aplikacji mam więcej niż 10 stron do nawigacji.

Muszę klikać przycisk „Dalej”ciągle - wywołuje wywołanie AJAX w celu ponownego załadowania nowej treści, a przycisk „Dalej” również zostanie ponownie załadowany. Liczba stron do nawigacji nie zawsze wynosi 10. Może to być od 10 do 100.

Mój test zostanie zakończony, gdy zostanie znaleziony element sieciowy o identyfikatorze „testcomplete”.

Więc obecnie używam 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;
}

Obecnie mój kod działa dobrze. Ale staram się to poprawić. Nienawidzę niepotrzebnego oczekiwania 30 sekund, gdy obecny jest element o identyfikatorze „testcomplete”. Ponieważ czas „NextButton” nie będzie obecny.

Jak mogę to poprawić? isNextPresent funkcjonować? Czyli, aby natychmiast zwrócić false, gdy pojawi się „testcomplete” zamiast czekać 30 sekund?

Uwaga: oznaczyłem również kątomierz, ponieważ mam również podobne wymagania dotyczące kątomierza.

Odpowiedzi:

1 dla odpowiedzi № 1

Możesz łączyć warunki obu elementówi wykonaj działanie w zależności od tego, który z nich jako pierwszy zwraca wartość true dla „visibilityOf (myElement)”. Może coś takiego w pseudo (przepraszam, brak IDE w pobliżu):

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

1 dla odpowiedzi nr 2

Użyj EC.or (), a la:

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

A potem to wróci expect pożądany stan:

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