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ę.
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”}
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.
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);
}
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?
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.