Selenium 73. Zadanie z POM: przepisanie testu addOneProductTenTimesTest()

Interesuje Cię ten kurs?

Dołącz do listy mailingowej, a poinformuję Cię o otwarciu zapisów.

Przed Tobą pierwsze zadanie w ramach lekcji z Page Object Model. To zadanie z POM polega na przepisaniu kolejnego testu z naszego projektu testowego. Będzie to test, w którym dodawaliśmy 10 sztuk tego samego produktu do koszyka.

Na początku filmu tłumaczę polecenie, a następnie rozwiązanie. Będzie moment żeby zatrzymać film na czas wykonania zadania – dam znać w filmie kiedy.

Uwaga: plik z projektem testowym, na którym pracujemy w lekcjach dotyczących POM wymaga uzyskania dostępu. Dostaniesz go tutaj.

Przydatne linki

Krótkie wprowadzenie do Page Object Design Pattern na seleniumhq.org.

Projekt testowy na podstawie którego tworzymy framework.

Poprzednia lekcja w ramach POM: kolejna klasa Page Object.

Twoje klasy po tym zadaniu powinny wyglądać jak poniżej

Lepiej nie podglądać przed rozwiązaniem zadania ⚠️

Klasa testowa: CartTests

Ukryta treść

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

Klasa Page Object: CartPage

Ukryta treść

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

Klasa Page Object: ProductPage

Ukryta treść

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

Klasa Page Object: CategoryPage

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 aktywnego członkostwa. Wykup dostęp albo Zaloguj się, by móc zadawać pytania.

  1. Hej,
    Mogłabyś mi pomóc, bo dostaję taki komunikat a skopiowałam już nawet Twój kod w obawie przed literówką: org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {“method”:”css selector”,”selector”:”div.quantity>input”}

    Odpowiedz
    • Halko! Sprawdziłam u siebie i hula ale wystarczy, że masz wolniejszy internet i takie same testy u Ciebie mogą się wysypać. Selenium samo Ci mówi co się stało: nie znalazło elementu w momencie, w którym chciało się do niego dostać. Co oznacza, że albo go tam wcale nie ma albo go tam jeszcze nie ma. Zakładając, że masz taki kod jak ja będzie to drugi przypadek. To, co możesz zrobić to sprawdzić czy po zwiększeniu (albo dodaniu jeżeli go nie ma) waita/timeoutu przy wyszukiwaniu tego elementu problem się nadal pojawia. Z tego co widzę nie mamy tam waita ani timeoutu więc z dużym prawdopodobieństwem wystarczy jego dodanie. Jeżeli zdecydujesz się na timeout to pamiętaj, że w momencie kiedy zaczniemy używać obiektu klasy Wait, musimy się pozbyć timeouta (implicitlyWait), bo używanie jednego i drugiego jest niewskazane, możesz dostać niespodziewane efekty. Wspominałam o tym w lekcjach dotyczących klasy Wait.

      Odpowiedz
      • Dzięki, przerobiłam kod i zadziałało 🙂
        private By productId = By.cssSelector(“div.quantity>input”);
        public int getProductQuantity() {
        WebDriverWait wait = new WebDriverWait(driver, 7);
        wait.until(ExpectedConditions.presenceOfElementLocated(productId));
        String quantityString = driver.findElement(productId).getAttribute(“value”);
        return Integer.parseInt(quantityString);
        }

        Odpowiedz
  2. Cześć,
    używając
    By cardNumberFrame = By.cssSelector(“[name=’__privateStripeFrame8′]”);
    otrzymuję błąd
    Expected condition failed: waiting for frame to be available: By.cssSelector: [name=’__privateStripeFrame8′]
    czy coś uległo zmianie na stronie?

    Odpowiedz
    • Może tak być: żeby się przekonać wystarczy, że sprawdzisz w konsoli developerskiej jaką wartość ma atrybut name tej ramki i jak będzie trzeba to zamienisz albo zbudujesz inny lokator.

      Odpowiedz