Omówienie projektu testowego zaczniemy od pierwszej grupy testów a będą to testy koszyka. W tej lekcji pokażę Ci między innymi w jaki sposób podzieliłam testy na klasy, jak dodaję 10 różnych produktów iterując się po tablicy oraz jak można sobie poradzić z Firefoxem, który nie chce klikać w elementy, które Selenium na stronie widzi.
Przydatne linki
Przescrollowanie do elementu za pomocą JavaScript było tutaj.
Czekanie na elementy było tutaj, a ExpectedConditions tutaj.
Użycie WebDriverManagera było tutaj.
Czym dokładnie jest pierwsze "By" np. w poniższej linijce:
Rozumiem, że to jakaś funkcja selenium po której lokalizujemy i jak to wszystko działa, ale dlaczego nie jest to, jak w poprzednich lekcjach:
driver.findElement
I potem dalej By.xxxEwentualnie w której lekcji było coś na ten temat, może przegapiłem? (chociaż do tego momentu oglądałem wszystkie)
Halko! By to klasa abstrakcyjna z metodam [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.
Hej, podszedłem do testu w którym mam dodać 10 różnych wycieczek do koszyka w inny sposób (gorszy, pamiętając o Twojej uwadze, że testy nie powinny niebezpiecznie wydłużać się), ale ćwiczeniowo chciałbym dokończyć mój scenariusz tak żeby test przeszedł na zielono. Kroki do wykonania widzę tak:
1. Przejść na stronę danej kategorii.
2. Zaakceptować powiadomienie dot. wersji demonstracyjnej sklepu.
3. Zrobić listę wycieczek jako WebElementów.
4. Dodać każdą wycieczkę używając przycisku "Dodaj do koszyka" korzystając z pętli.
5. Zweryfikować czy do koszyka została dodana prawidłowa ilość produktów (wiem, że na tym etapie powinno być ich 5, a nie 10 tak jak w poleceniu, kolejnych 5 chciałem potem wziąć z kategorii "Yoga i Pilates", ale zaciąłem się w tym miejscu 🙂 ). Chciałem ustawić explicit wait'a w pętli tak żeby po każdym kliknięciu w "Dodaj do koszyka" poczekał aż będzie dostępny button "Zobacz koszyk" pod danym produktem, następnie gdy będzie ich łącznie 5 - dopiero przeszedł do koszyka.
Jak napisać taką pętlę? Podjąłem próbę w metodzie addAllProductsToCart, ale nie działa. Prośba o pomoc 🙂
Mój kod:
Halko! Żebym mogła Ci pomóc, to potrzebuję zob [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.
Przepraszam, edytowałem komentarz poprawiając kod i widzę że nie zapisała się treść ostatecznie. Oto fragment kodu z pętlą:
Halko,
Jak sam słusznie zauważyłeś to rozwiąz [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.
1) Metodą prób i błędów napisałem działającego foreach'a.
Nie do końca rozumiem natomiast, dlaczego muszę ustawić i = 1 zamiast i = 0 żeby pętla poprawnie wykonała się. Gdy ustawię i = 0 to otrzymuje (na przemian) takie wyjątki:
org.openqa.selenium.TimeoutException: Expected condition failed: waiting for number of elements found by By.cssSelector: a[title='Zobacz koszyk'] to be "3". Current number: "4" (tried for 10 second(s) with 500 milliseconds interval)
org.openqa.selenium.TimeoutException: Expected condition failed: waiting for number of elements found by By.cssSelector: a[title='Zobacz koszyk'] to be "2". Current number: "3" (tried for 10 second(s) with 500 milliseconds interval)
Z czego to wynika i dlaczego te wyniki różnią się między sobą?
2) Spróbowałem rownież napisać pętlę for i tutaj już nie mogę dobrać właściwego zakresu żeby wykonała się ona prawidłowo. Gdy ustawię i = 0 spotykam się z wyjątkami takimi jak powyżej (również na przemian), natoamiast gdy analogicznie ustawię jak w pętli foreach i = 1, wtedy nie łapie mi pierwszego elementu (co akurat jest dla mnie już zrozumiałe 🙂 ), ale w przeciwieństwie do poprzedniego przypadku test wykonuje się tylko wywala sie asercja (Expected: 5, Actual: 4).
Uprzejmie proszę o pomoc :).
Super, że podłubałeś! Jest dużo lepiej, wida [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.
Dzięki wielkie za wyjaśnienie! 🙂
W folderze src -> main coś się znajduje?
Nic tam dodawane nie było, testy trzymamy w folde [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.