Zapisy otwarte! Dołącz do kursu Selenium w Javie lub Selenium w C#. Tylko do 23.09.2021 do godz. 21:00. Zapisz się tutaj.

Selenium 38. Czekanie na warunki: ExpectedConditions

W tej lekcji pokażę Ci jak wykorzystać dostępną w Selenium klasę, by wybrać warunek na który będziemy czekać.

Selenium dostarcza klasę ExpectedConditions, którą możesz traktować jako klasę pomocniczą do WebDriverWait. Zawiera ona zestaw gotowych metod, które są warunkami oczekiwanymi. Jest to o tyle wygodne, że bez tego musielibyśmy te warunki pisać samodzielnie. To w niektórych przypadkach mogłoby być kłopotliwe i czasochłonne. Zwłaszcza jeżeli jesteś na początku drogi z automatyzacją.

Ponieważ dokumentacja na temat dostępnych w tej klasie metod jest obszerna i także mało przyjemna, możesz skorzystać ze ściągi przygotowanej przeze mnie i dostępnej tutaj: Selenium Expected Conditions. Przewodnik z przykładami w Javie.

Oficjalną dokumentację na temat ExpectedConditions znajdziesz tutaj: Class ExpectedConditions

Kod z lekcji

Ukryta treść

Nie masz dostępu do tego kursu. Wykup dostęp albo zaloguj się, by móc zobaczyć pełną lekcję.

 

 

Wsparcie merytoryczne

Nie masz dostępu do wsparcia merytorycznego dla tego kursu. Wykup dostęp albo zaloguj się, by móc zadawać pytania.

  1. Mam pytanie.
    Zdaje sobie sprawę, że może nie być najwyższych lotów dlatego wnoszę o wyrozumiałość 🙂

    Jeśli dobrze zrozumiałem, to metodami klasy Expected Conditions obsługujemy Explicit Waity.
    Jeśli jednak działamy tylko na nich to jak to się ma do metod tworzonych poprzez FluentWaita ?

    Czyli jeśli mogę po prostu napisać wait.until(ExpectedConditions.elementToBeClickable(locator)
    Dlaczego FluentWait zaleca co by tworzyć całą metodę ? :

    Wait wait = new FluentWait(driver)
    .withTimeout(30, SECONDS)
    .pollingEvery(5, SECONDS)
    .ignoring(NoSuchElementException.class);

    WebElement foo = wait.until(new Function() {
    public WebElement apply(WebDriver driver) {
    return driver.findElement(By.id("foo"));
    }
    });

    Przepraszam jeśli zamotałem 😀

    Odpowiedz
  2. Co do "Na nich" to miałem na myśli: na poleceniach z wait.until(ExpectedConditions.różneTakie()) ;:-)
    Pytałem z racji dotychczasowej nauki, w której uczono mnie używać Fluenta.
    Widząc Twój kod od razu rzuciło mi się w oczy:
    "Chwila, skoro mogę pisać jedną linijkę to po co pisać ich kilka w ramach Fluenta ?"
    Co do kodu to jest on wzięty żywcem z biblioteki Selenium.
    Tak czy inaczej mocno mnie Uspokoiłaś 😀
    Im mniej kodu i prostszy, tym łatwiejsza nauka i łatwiejsza do pojęcia 🙂

    Odpowiedz
  3. Na ten sam pomysł wpadłem, jeśli chodzi o łapanie elementu żeby dorwać jego atrybut. Jeśli dwie osoby nie zależnie znalazły ten sam sposób, to znaczy że musi być najlepszy 😀

    Odpowiedz