W tej lekcji zaczniemy tworzyć swój własny framework testowy. Pokażę Ci jak zacząć i jak IntelliJ może nam oszczędzić pracy. Przepiszemy jeden test i stworzymy dwie klasy Page Object: CartPage i ProductPage.
Uwaga: plik z projektem testowym, na którym pracujemy w lekcjach dotyczących POM wymaga uzyskania dostępu. Dostaniesz go tutaj.
W poniższych klasach poprawiłam nazwę pakietu z PageObjetcs na PageObjects. Zmień to również u siebie – wystarczy, że klikniesz na nazwę tego pakietu (folderu) na drzewku po lewej stronie, wybierzesz Refactor>Rename.
Klasa Page Object: CartPage
Klasa Page Object: ProductPage
Klasa testowa: CartTests
Trochę inaczej napisałem testy, więc i trochę inne metody wykorzytuję. Poniżej jedna z przykładowych:
@Test
public void shouldAddProductToCartFromCategoryPage(){
String givenCategoryName = "Wspinaczka";
String givenProductName = "Wspinaczka Via Ferraty";
HomePagePOM homePagePOM = new HomePagePOM(driver);
HashSet<String> productsInCart = homePagePOM.goToShopPage().goToCategory(givenCategoryName).addProductToCartFromCategory(givenProductName).goToCart(givenProductName).productsInCart();
Assertions.assertTrue(productsInCart.contains(givenProductName), "Cart not contain selected product!");
}
I pytanie: jak to zapisać jeśli jednak nie chciałbym tego chainować, czyli zapisywać kroki w oddzielnych liniach, coś w stylu:
homePagePOM.goToShopPage(); //zwraca new ShopPage(driver)
shopPage.goToCategory(givenCategoryName); //zwraca new CategoryPage(driver)
categoryPagePOM.addProductToCartFromCategory(givenProductName); //zwraca new CategoryPage(driver) - bo nie zmieniamy strony
itd..
i dopiero na końcu robię
HashSet<String> productsInCart = cartPagePOM.productsInCart();
Najpierw wrzucę kilka uwag, które mi się rzuci [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.
Dzięki za feedback 🙂 Po przemyśleniu zdecydowałem się trzymać jednak takiej notacji:
POM w nazwie jest dla lepszej czytelnoci w IDE, równolegle dłubie sobie też ten sam projekt w page factory i tam mam końcówki PF (wiem że w różnych package'ach mogą być te same nazwy klas ale tak jest mi wygodniej i czytelniej).
goToCart z parametrem wyszukuje button pod konkretnym produktem bo takich buttonów może być kilka jeśli dodałem kilka produktów, a mi chodzi o ten pod konkretnym produktem.
Spoko, to są narzędzia, mają służyć nam, a n [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.
Cześć, takie pytanko mi się nasunęło: czy nie moglibyśmy zrobić metody goTo w ten sposób?
Wiem że to w sumie szczegół, ale jestem ciekaw czy takie rozwiązanie byłoby ok 🙂
Halko! Można, różnica jest tylko taka, że zami [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.