Powrót do: Praktyczne wprowadzenie do testów automatycznych z Playwright
Teraz Ty: Kolejny test pulpitu
TIP: Ta lekcja jest częścią rozwijanego Programu Testy Automatyczne z Playwright 🎭
Dodatkowe materiały
Link do testowanej stronyTwoje zadanie polega na przygotowanie testu automatycznego dla operacji doładowania telefonu na stronie Pulpit.
Możesz samodzielnie utworzyć ten test (wzorując się mocno na poprzednim teście) lub wspomóc się poniższymi wskazówkami.
Dokładne kroki:
- Wykonaj manualny test doładowania telefonu
- Dodaj nowy test do pulpit.spec.ts
- Sugerowana nazwa nowego testu: successful mobile top-up
- Użyj codegen do nagrania testu i wygenerowania kodu
- Pomiń nagrywanie logowania
- Na stronie Pulpit przejdź do widoku doładowanie telefonu
- Wybierz numer telefonu (pierwszy z listy), kwotę
50
i zaznacz checkbox - Kliknięciu przycisk doładuj telefon oraz zaakceptuj okno z podsumowaniem operacji
- Zweryfikuj tekst wiadomości, możesz skorzystać z istniejącego kodu w innym teście
Wklej uzyskany kod do nowo przygotowanego testu
- Pamiętaj o dodaniu odpowiedniej asercji dla wiadomości
- Usuń lub zakomentuj nadmiarowy kod np: niepotrzebne akcje z
click()
- Sprawdź swój test – pamiętaj o opcji
only
- Celowo uszkodź asercję, tak aby test zakończył się niepowodzeniem i uruchom ponownie test – czy wyniki jakie otrzymałeś są czytelne?
- Następnie napraw test i uruchom wszystkie testy razem
Hej hej,
Pytanie organizacyjne 🙂
Czy do zaznaczania checkbox’a lepiej używać .click() – jak sugeruje Playwright,
Czy lepiej do checkboxó używać .check()/.uncheck() ??
Oficjalnie obie metody działają – Playwright sugeruje click() bo klikamy aby zaznaczyć element ale metoda check również zaznacza checkbox i na pewno nie będzie błędu jak przez nieuwagę kilkukrotnie zcheckujemy checkboxa – bo do jego odznaczania służy metoda .uncheck()
Jeżeli chodzi o clicka to wielokrotne kliknięcie może zostawić usuniety checkbox jak poniżej:
Co do .check()/uncheck()
To checkować możemy wiele razy a checkbox zawsze będzie zcheckowany – do jego odznaczenia potrzebujemy użyć metody .uncheck() <– czyli z użytkowego punktu widzenia do checkbox.ów chyba lepiej używać .check'a niż click'a tak ??
Czy są jakieś przesłanki aby bezgranicznie ufać 😉 codegen'owi playwrightowemu ??
Pozdrawiam i dzięki z góry za odpowiedź/potwierdzenie,
Jakub K
Fajna analiza i pytanie. Obie metody zachowają się podobnie i bardziej bym się zastanowił co chcemy testować.
Jeśli skupiamy się typowo na testach checkbox to wtedy można użyć metod
click()
i sprawdzać asercjami np:expect(locator).toBeChecked()
. Czyli weryfikujemy czy checkbox ma dany stan przy danych warunkach.Gdy jednak checkbox to tylko element większych testów będzie zdecydowanie łatwiej czytać testy gdy widzimy ustawienie pożądanego stanu check/uncheck gdyż sam click() może nam tej informacji nie dać.
Podsumowując – w standardowych testach raczej bym się skłaniał do opcji check() i codegen traktował jako pomoc ale nie wyrocznię 😀
Pozdr
Hej,
Super i dzięki za wyczerpjącą odpowiesdź
Pozdrqawiam i spokojności życzę,
Jakub K
Też “udało mi się” raz uzyskać ten błąd z asercją dot. treści wiadomości! 🙂
Expected string: “Doładowanie wykonane! 50,00PLN na numer 500 xxx xxx”
Received string: “Brak wiadomości”
Przy innych próbach test przechodził. Ot, ciekawostka!
Tak właśnie działa ta aplikacja, że nieraz tak może się stać i dobrze bo pokazuje to realne problemy z testami😉.
Aby temu zapobiec można pokusić się o zwiększenie timeouta w playwright.config.ts dla expect do 10 sekund:
timeout: 10000
Jak zawsze zachęcam do testów 🤩
Mam ten sam problem co Sławomir, niestety nie mogę znaleźć timeout w pliku playwright.config.ts, podejrzewam, że coś ulgło zmianie w samym PW i w materiałach do lekcji. Jak mogę zmienić timeout na 10000?
Ople
timeout
jest opcjonalne (domyślna wartość to 5 sekundhttps://playwright.dev/docs/test-timeouts
Aby go ustawić musisz dodać w swojej konfiguracji nowy blok expect:
Sprawdź i proszę daj znać czy zadziałało 😉
Dzięki, działa, ale jednak problem był po mojej stronie 😀 Na końcu w asercji miałem
await expect (page.getByTestId(‘#message-text’)).toHaveText(‘Doładowanie wykonane! 50,00PLN na numer 500 xxx xxx’);
Sprawdziłem w devtoolsach i przypomniałem sobie, że to jest data-testid a nie id (wtedy hash jest ok), więc wyrzuciłem hash i poszło. Ale dzięki za komentarz bo i tak miałem pytać o ten timeout, brakowało mi go przy innych testach 🙂
hejka! 🙂
znacie sposoby jak uniknąć błędu ‘Execution context was destroyed, most likely because of a navigation’ ?
Niestety mamy takie testy, które strony zawarte w testach są zależne od siebie..
Słonecznego dnia! 🙂
Bardzo dobre pytanie Karolina!
Będziemy ten temat omawiać w przyszłości. Na teraz pamiętajmy, że Playwright wykonuje wszystkie testy niezależnie. No i pojawia się problem z testami zależnymi. Można to ograć to posiadając jeden test z wieloma krokami:
Druga droga (ale łamiąca wiele zasad) to taka gdzie przed testami inicjujemy obiekt page i reużywamy go w testach (nie zalecam ze względu na wiele niedogodności) W playwright.config.ts należy ustawić fullyParallel: false.
Same testy będą wyglądać tak:
Dziękuję za komentarz! 🙂
W takim razie czekam z niecierpliwością na lekcję dotyczącą takiego typu błędu/błędów, właśnie najwięcej napotykam na nie przy testach z wykorzystywaniem wzorca POM.