Testy automatyczne Selenium cz2 – pierwsze kroki w pythonie.

AKTUALIZACJA

Najnowszą wersję tego wpisu w formie profesjonalnego (i na obecną chwilę darmowego) kursu znajdziesz na moim autorskim portalu https://jaktestowac.pl/course/pt1-mk1-podstawy-testow-automatycznych-w-selenium-i-python/.
Pozdrawiam Przemek

 

 

W tym poście opiszę jak rozpocząć przygodę z automatyzacją, która wiąże się z programowaniem. Od podstaw napiszę co trzeba zrobić aby stworzyć w pełni działający test automatyczny.

Przygotowanie środowiska

Testową aplikacja będzie olx.pl a wszystkie działania odbywaja się na maszynie z systemem Windows 7 z zainstalowaną przeglądarką Firefox
Zacznę od zainstalowania pythona na maszynie w wersji 2 linkDo pisania testów użyję IDE pycharm w darmowej wersji Community – jest to w pełni dojrzałe IDE i oferuje mnóstwo ciekawych funkcji link
UWAGA: Dokonaj update Fireoxa do najnowszej wersji

Utworzenie projektu

W PyCharmie tworzę nowy projekt – nazwę go olx_tests
Dodaję nowy plik (prawy klawisz myszki na folderze olx_test w widoku Projects) main_page_tests
2015-05-02_192101
Ustawiam pokazywanie numeru lini przy wierszach http://stackoverflow.com/a/8908562

UWAGA: Jeśli już wcześniej posiadałeś zainstalowanego pythona np. w wersji 3 to zainstaluj wesję 2 i ustaw ją dla naszego projektu:
przejdź w pycharmie File->Settings->Project:olx_tests (kliknij trójkąt z lewej)->Project Interpreter. Z listy wybierz odpowiedni interpreter lub klikając w trybik wskarz miejsce instalacji pliku python.exe ze ścieżki która domyślnie wygląda tak  C:\Python27\python.exe

Importowanie bibliotek

Biblioteki to takie gotowy kawałki kodu, dzięki którym nie trzeba wszystkiego pisać na nowo a wystarczy skorzystac z istnięjących roziwązań. Tutaj będę korzystał z biblioteki WebDriver o której funkcje opisane są tutaj

Czas jej użyć:

from selenium import webdriver

czyli z bilioteki selenium importujemy klasę webdriver.
Podkreślone na czerwono obie nazwy sugerują, że nasze IDE nie posiada zaimportowanych takich bibliotek.
PyCharm oferuje automatyczne importy więc klikam na nazwę selenium i wciskam kombinację klawiszy odpowiedzialną za podpowiedzi akcji naprawczych ALT + ENTER (powinna pojawić się także czerwona żarówka która można kliknąć i uzyskamy ten sam efekt).
Wybieram pierwszą opcję – install package selenium.
Podkreślenie powinno zniknąć co oznacza powodznie akcji.

UWAGA: Jeśli już wcześniej miałeś zainstalowaną bibliotekę selenium mozliwe, że potrzebny będzie Ci update: przejdź w pycharmie File->Settings->Project:olx_tests (kliknij trójkąt z lewej)->Project Interpreter. Odnajdź bibliotekę (Package) selenium a następnie upewnij się czy wartości w Version i Latest są identyczne. Jeśli nie to kliknij linie z selenium i naciśnij niebieską strzałkę skierowaną w górę z prawej strony. Następnie OK i juz masz zaktualizowaną bibliotekę.

Pierwszy kod

Czas skorzystać z webdriver: wpisuję więc kolejną linię
(warto zrobić jedeno linijkową przerwę pomiędzy deklaracjami importów a właściwym kodem – są to zalecenia formatowania języka python)

driver = webdriver.Firefox()

przypisuję tu do zmiennej driver obiekt który zawiera w sobie instancję przegladarki Firefox.

Uruchamianie kodu

Czas sprawdzić napisany kod – z górnego menu wybieram Run->Run..->main_page_test
Na dole pojawi się okno z informacjami na temat uruchomionego pliku i powinna zostać automatycznie uruchomiona instancja przeglądarki Firefox.
Zamykam okno Firefoxa co kończy test.

Sterowanie przeglądarką

Zmienna dirver jest jej reprezentacją więc można wywołać na niej różne funkcje – na przykład przejście do danego adresu:

driver.get('http://olx.pl')

Ostatnia konfiguracja uruchumieniowa została zapamiętana więc test można uruchomić  z kombinacji SHIFT + F10 lub kliknąć zieloną strarzałkę w prawym górnym rogu.

Tym razem przeglądarka powinna wyświetlić testowaną stronę.
W następnym kroku pobieram tytuł strony i zapisuję go do zmiennej title.
Kolejny wiersz to wypisanie zawartości zmiennej na konsole.

title = driver.title
print(title)

Po uruchomeinu testu uzyskałem taki rezultat
2015-05-02_215302UWAGA: text tytułu może ulec w każdej chwili zmianie więc zrwróć uwagę na wynik w konsoli i uaktualnij o nową wartość poniżej zaprezentowane przykłady.

Warunek pozytywnego zakończenia testu

Teraz dodam asercję czyli funkcję która porównuje dwie zmienne i w zależnie od rezultatu kończy się sukcesem bądź niepowodzeniem:

assert title == u'Ogłoszenia - Sprzedam, kupię na OLX.pl (dawniej Tablica.pl)'

UWAGA:  W łańcuchu znakowym znajdują się polskie znaki dlatego w powyższym kodzie umieściłem przed apostrofem znak u. Kolejnym krokiem jest dodanie kodu na samej górze pliku:

# -*- coding: utf-8 -*-

Wracamy do kodu z aserciją. Zauważmy, że zastosowałem tutaj  == ponieważ pojedynczy znak = słóży do przypisywania wartości do zmiennej,  w tym przypadku potrzebujemy porównania wartości.
(czyli x=5 oznacza, że x zwraca 5 a x==5 sprawdza czy x zawiera 5 i zwraca True albo False)
Uruchamiam ponownie test i nic się nie zmienia – ponieważ test pozytywnie się skończył.
Zróbmy jednak eksperyment:
Kopiuję linę  nr 5, komentuję ją za pomocą znaku # (dzięki czemu nie będzie wykonywana) a w kopii zmieniam adres na ebay.com czyli:

#driver.get('http://olx.pl')
driver.get('http://ebay.com')

Uruchamiam test i na konsoli otrzymuję:

Traceback (most recent call last):
 File "C:/tut/olx_tests/main_page_tests.py", line 9, in <module>
 assert title == u'Ogłoszenia - Sprzedam, kupię na OLX.pl (dawniej Tablica.pl)'
AssertionError
Electronics, Cars, Fashion, Collectibles, Coupons and More | eBay

Process finished with exit code 1

Widać, że tytuły który oczekiwaliśmy nie zgadza się z otrzymanym. Oraz mamy exit code 1 co oznacza, że pojawiły się problemy.

Wracam do poprawnej wersji driver.get (czyli odkomentowuję linię 5 i usuwam linię 6)
Aby ułatwić sobie sprawę dodaję automatyczne zamykanie przeglądarki – czyli wpisuję na końcu linię:

driver.close()

Podsumowanie i cały kod

I tym samym mam bardzo podstawowy test sprawdzający czy pod danym adresem znajduje się strona o określonym tytule.

Cały kodzik:

# -*- coding: utf-8 -*-
from selenium import webdriver

driver = webdriver.Firefox()
driver.get('http://olx.pl')
title = driver.title 
print(title)
assert title == u'Ogłoszenia - Sprzedam, kupię na OLX.pl (dawniej Tablica.pl)'
driver.close()

W nastepnym poście opiszę w jaki sposób grupować wiele testów, wyciągać z nich powtarzające się informację oraz jak to wszystko uruchomić w PyCharm http://przemek.yum.pl/testu-automatyczne-selenium-cz3-zestawy-testow/

Leave a Reply

Your email address will not be published. Required fields are marked *