selenium obsługa implicitlyWait

selenium obsługa implicitlyWait
LU
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 7 lat
0

Cześć,
próbuje swoich sił w ramach prostych testów automatycznych jednak napotkałem problem mam nadzieję, że ktoś z Was będzie mi w stanie wytłumaczyć co jest źle z moimi założeniami...
Problem dotyczy banalnego fragmentu otóż sprawdzam czy została załadowana strona z określoną zawartością ("Moja testowa podstrona 1") oraz element ten został załadowany w określonym czasie (implicitlyWait(1000,TimeUnit.NANOSECONDS) jeśli nie to powinien pojawić się alert. Czas przyjęty został na tyle niski aby test zakończył się niepowodzeniem.

/ Weryfikacja czy załadowana się strona z poprawną zawartością
WebElement tekst1 = driver.findElement(By.xpath("html/body/div[1]/div/div/header/h1"));waitFor();
driver.manage().timeouts().implicitlyWait(1000,TimeUnit.NANOSECONDS);
if (!tekst1.getText().contains("Moja testowa podstrona 1"))
throw new SeleniumException("Nie znaleziono tekstu: "Moja testowa podstrona 1");

pytanko jak zrobić poprawne odwołanie do implicitlyWait które odpowie alertem ?
moja propozycja poniżej:
try {
driver.findElement(By.xpath("html/body/div[1]/div/div/header/h1");
fail("wystąpił wyjątek");
} catch (strona działa zbyt wolno)

BY
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 4 lata
  • Postów:65
1

Używaj Explicitów*, do tego służą. Zresztą implicit i tak wali wyjątkiem jeśli się nie załaduje, dostajesz TimeoutException. Chcesz go scatchować i puścić swój? nie mam pojęcia po co.

*Explicit Wait to wait który oczekuje na konkretną akcję w selenium, w Javie wyglądałoby to tak:

Kopiuj
WebElement myDynamicElement = (new WebDriverWait(driver, 10))
  .until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));

Czeka to na akcje (w tym wypadku na pojawienie się elementu w DOM strony) i jeśli element nie pojawi się, TimeoutException jest rzucony. Twój implicit to wait na cały test, czyli każda akcja która jest, otrzymuje taki max czasu. Ogólnie uważa się używanie implicitów za złą praktykę w testach.

Edit bo nie zauważyłem, ta weryfikacja jest do d**y. W weryfikacji nie stosujesz faili tylko asercje. Co to za metoda waitFor() i skąd ona się tu wzieła? I czemu chcesz odwoływać się do implicita w try catchu - powtarzam, on i tak wali wyjątkiem jeśli nie znajdzie elementu. I ostatnia sprawa, te XPATHy wyglądają okropnie, i są bardzo niestabilne. Nie używaj nigdy XPATHów jako ścieżek bezpośrednich, bo jeden element na stronie się zmieni, a Twoje testy lecą do kosza.

Przeczytaj dokumentację koniecznie, bo to się nie nadaje do niczego.

edytowany 1x, ostatnio: big_y
LU
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 7 lat
0

ale jeśli znajdzie element na stronie to chciałbym aby sprawdził czy się załadował w przyjętym czasie jeśli nie to ma wywalić błąd.

będę musiał poczytać... :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.