Powrót do: Podstawy Testów Automatycznych w Selenium i Python cz. 1 – Twój pierwszy test automatyczny
Cel lekcji
Zrobimy eksperyment i zepsujemy nasz test. Jednak będzie to coś więcej niż tylko kontrolowany błąd który łatwo naprawić. Poznamy pierwszą technikę jak reagować i usuwać błędy w naszym kodzie.
Wideo wersja lekcji
W związku z odświeżeniem tekstu całej serii kursów – lekcje wideo mogą okazać się odrobinę nieaktualne. Pracujemy nad tym – mimo to pozostawiamy wersję wideo gdyż pokazane tam kroki są generalnie poprawne.
Nieprzechodząca asercja – jak sobie z nią radzić.
Zróbmy eksperyment i zepsujmy nasz test.
Powielamy linę z metodą driver.get(), Oryginalną linię komentujemy za pomocą znaku # (dzięki czemu nie będzie wykonywana). W niezakomentowanej kopii zmieniamy adres na https://demobank.jaktestowac.pl/logowanie_prod.html czyli:
#driver.get('https://demobank.jaktestowac.pl/logowanie_etap_1.html')
driver.get('https://demobank.jaktestowac.pl/logowanie_prod.html')
Uruchamiamy test i na konsoli widzimy:

C:\Users\jaktestowac\AppData\Local\Programs\Python\Python37-32\python.exe C:/Users/jaktestowac/PycharmProjects/demo_test/auto_test_1.py Demobank - Strong główna - Logowanie Traceback (most recent call last): File "C:/Users/jaktestowac/PycharmProjects/demo_tests/auto_test_1.py", line 8, inassert 'Demobank - Bankowość Internetowa - Logowanie' == title AssertionError Process finished with exit code 1
Przeanalizujmy tekst błędu z konsoli
- W pierwszej linii otrzymujemy informację o uruchomieniu: z jakiego Pythona skorzystaliśmy oraz jaki skrypt został uruchomiony.
- Druga to wypisany przez nas aktualny tytuł.
- Kolejna linia to jakby legenda, mamy słowo
Tracebackczyli opis stanu aplikacji w momencie wystąpienia błędu. Mianem traceback możemy nazwać cały opis błędu wypisanego na konsole w razie niepowodzenia uruchomienia skryptu. - Czwarta linia to dokładna nazwę pliku oraz linię w której wystąpił błąd. Gdybyśmy zmienili nasz skrypt w moduł to dla wartości
<module>otrzymalibyśmy jego nazwę. - W linii piątej wskazane jest wyrażenie generujące błąd
- W szóstej linii zaprezentowana jest nazwa błędu
- Finalnie zaprezentowany jest
exit code, który zazwyczaj będzie miał wartość0lub1co odpowiednio oznacza powodzenie lub niepowodzenie wykonania programu czy skryptu.
Z traceback widać, że nasza asercja spowodowała przerwanie wykonywania kodu ze względu na bliżej nieokreślony błąd 😉 .
TIP: Gdy coś nie działa w twoim kodzie należy spokojnie i analitycznie podejść do problemu gdyż większość wynika z błahych powodów jak literówka czy brak wcięcia.
Najpierw należy dokładnie zapoznać się z tekstem błędu z konsoli uruchomieniowej i odnaleźć linię w naszym kodzie która generuje błąd. Nie zawsze to jest oczywiste i proste, dlatego nie zrażaj się gdy natrafisz na problemy. Potraktuj to jako świetne ćwiczenie rozwijające umiejętności programowania. Gdy nie znajdziesz odpowiedzi zawsze napisz na naszym forum lub zostaw komentarz 🙂
Z pewnością nurtuje Ciebie pytanie czemu nie ma dokładnej informacji dlaczego asercja nie przeszła? Niestety ten rodzaj asercji sprawdza tylko wartość poprawną bądź błędną jednak istnieją pakiety, które wypiszą na konsolę o wiele więcej informacji (użyjemy ich w kolejnym kursie).
Na obecną chwilę możemy stwierdzić, że warunek równości 'Demobank - Bankowość Internetowa - Logowanie' == title nie jest spełniony. Pasowało by się dowiedzieć co ma w sobie title. Wcześniej w kodzie użyliśmy funkcji print() do wypisania wartości dla title na konsolę i właśnie z tego pomysłu skorzystamy. Porównując spodziewaną wartość z aktualną wartością zmiennej title można wywnioskować, że któraś z nich jest niepoprawna.
TIP: Czasem nie jest oczywiste gdzie leży problem. Może się tak zdarzyć, że to nasze testy są nieaktualne i nowe wartości na stronie są poprawne. Automaty jedynie wykrywają zmiany, a zidentyfikowanie problemu i jego usunięcie to już osobne działania związane z rozmową z osobami tworzącymi daną stronę i analizą wdrażanych wymagań.
TIP: Jako wartości do porównania zmiennej title użyliśmy tekstu rozpoczynającego się i zakończonego apostrofem ' . Taką konstrukcję nazywamy łańcuchem znakowym, albo krótko string). Stosując w string na końcu i na początku apostrofy ' sprawiamy, że Python rozumie, że nie jest to jakaś specjalna nazwa tylko zwykły tekst, Tekst jest wczytywany od pierwszego apostrofu do kolejnego.
A co się stanie jak w tekście wystąpi apostrof? Nasz program prawdopodobnie nie zadziała. Dlatego możemy użyć na szybko alternatywę w postaci znaku cudzysłowu " do otoczenia naszego łańcucha znakowego np: "Rozmawiałem ze Steve'em". Analogicznie można zrobić z cudzysłowem czyli 'Powiedział "Hi"'.
A co jeśli będziemy chcieli w naszym tekście zarówno z apostrofów i cudzysłowów? Stosujemy wtedy tak zwany escaping czyli dodanie w tekście przed każdym apostrofem bądź cudzysłowem znaku \ (backslash) np: 'Rozmawiałem ze Steve\'em. Powiedział "Hi"' lub "Rozmawiałem ze Steve'em. Powiedział \"Hi\"" . Gdy będziemy wyświetlać ten string na konsole backslash-e zostaną usunięte.
No i oczywiście możemy na wszystkich ' i " zrobić escaping i nie ma znaczenia co zastosujemy do otoczenia naszego tekstu: 'Rozmawiałem ze Steve\'em. Powiedział \"Hi\"' i "Rozmawiałem ze Steve\'em. Powiedział \"Hi\""
Pamiętaj aby zawsze używać innych bądź “eskejpowanych” apostrofów lub cudzysłowów niż te którymi rozpoczyna i kończy się string.
Wracamy do poprawnej wersji driver.get() czyli:
driver.get('https://demobank.jaktestowac.pl/logowanie_etap_1.html')
Usuń lub zakomentuj (pamiętasz? Znak # na początku linii) niepotrzebną linię z pobraniem strony powodującej błąd w asercji.
Sprzątamy i podsumowujemy
Aby ułatwić sobie sprawę dodaję automatyczne zamykanie przeglądarki poprzez użycie metody drivera quit() czyli wpisuję na końcu linię:
driver.quit()
quit() występuje również metoda close(), która także bywa używana do zamykania przeglądarki po testach. Aczkolwiek występują pewne różnice w ich zachowaniach, o których warto pamiętać i mieć je na uwadze. Więcej o nich dowiesz się w naszym słowniku – driver.close() vs. driver.quit(). Ogólnie zalecamy stosować quit(), która zamyka całą przeglądarkę w poprawny sposób 😉
No i test zakończony – zobacz exit code na konsoli. Poznaliśmy traceback gdy wystąpi błąd i jak wstępnie dokonać jego analizy oraz użyliśmy nowej metod dla driver. Następna lekcja to prezentacja całego rozwiązania z tego kursu i zadania indywidualne dla Ciebie.


Mój błąd, test zrobiłem w nowym pliku a przy metodzie RUN program z automatu odpalał mi auto_test_1 – trzeba uważać!
To prawda – konfiguracje w PyCharmie czasem lubią utrudniać życie 😀 Dlatego w drugiej części poświęcamy im trochę czasu 😉
Błędu nie będzie ponieważ strona: ‘https://demobank.jaktestowac.pl/logowanie_prod.html’ ma podobny czyli taki sam tytuł jak poprzednia!