Testy akceptacyjne użytkownika (UAT) – dlaczego są ważne? 

Paweł Jaroszek | Rozwój oprogramowania | 15.06.2023

Testy akceptacyjne (UAT) pojawiają się na końcu procesu wytwarzania oprogramowania i stanowią ważną jego część. Z tego artykułu dowiesz się, jaki jest przykładowy proces testów akceptacyjnych, jakie są rodzaje testów akceptacyjnych i dlaczego warto oprzeć się pokusie pominięcia tego typu testów w projekcie.

Jako (przyszły) inżynier automatyzacji testów celujący w pracę z Selenium w pewnym momencie dotrzesz do punktu, w którym trzeba będzie podjąć decyzję, w którą stronę iść oraz czego używać do testowania. Świat IT i QA szybko się zmienia, a niektóre z narzędzi i języków, które były kiedyś popularne, dziś już takie nie są. Jak w każdym przypadku, istnieje wiele czynników, które mogą odegrać rolę w podjęciu decyzji. W tym artykule postaram się ułatwić ci to zadanie, przedstawiając zalety i wady łączenia Selenium z dwoma obecnie najpopularniejszymi językami programowania: Javą i Pythonem.

Automatyzacja testów: jakie mamy opcje? Java i Python

Każdy z tych języków ma ugruntowaną pozycję, jest niezależny od platformy, zorientowany obiektowo i posiada dużą, wspierającą społeczność użytkowników. Jeśli chodzi o wybór powiązań (ang. bindings) języka Selenium dla Javy i Pythona, powinieneś najpierw zrozumieć kilka kluczowych różnic pomiędzy nimi.

Selenium obsługuje szeroką gamę języków programowania do automatyzacji testów. W tym kontekście Java i Python są najlepszymi kandydatami (i konkurentami) do połączenia z Selenium.

Język programowania czy język skryptowy?

Jednym z głównych pytań, które mogą przyjść ci do głowy, porównując Javę i Pythona, może być: „Czy Python i Java to języki programowania, czy języki skryptowe?”.

Zasadniczo wszystkie języki skryptowe są uważane za języki programowania. Główną różnicą między nimi jest to, że języki programowania są kompilowane, podczas gdy języki skryptowe są interpretowane. Języki skryptowe są wolniejsze niż języki programowania i pozostają zazwyczaj za nimi w tyle.

Szybkie porównanie znajdziesz tutaj: Interpreter vs compiler

Python

Python można nazwać zarówno językiem skryptowym, jak i językiem programowania, ponieważ działa zarówno jako kompilator, jak i interpreter. Standardowy Python może skompilować kod Pythona do kodów bajtowych, a następnie zinterpretować go tak jak Java i C.

„Jednak biorąc pod uwagę historyczny związek między językiem programowania ogólnego przeznaczenia a językiem skryptowym, bardziej właściwe byłoby stwierdzenie, że Python jest językiem programowania, który dobrze działa również jako język skryptowy”.

Interpreter to warstwa oprogramowania, która działa jako pomost między programem a sprzętem systemowym, aby utrzymać działanie kodu. Interpreter Pythona to aplikacja odpowiedzialna za uruchamianie skryptów Pythona.

Selenium Python

Java 

Java jest na ogół szybsza i bardziej wydajna niż Python, ponieważ jest językiem skompilowanym. Jako język interpretowany, Python z kolei ma prostszą, bardziej zwięzłą składnię. Może pełnić tę samą funkcję co Java, przy użyciu mniejszej liczby linijek kodu. W Javie typy danych zmiennych powinny być zadeklarowane przed ich użyciem, w przeciwieństwie do Pythona. Zdecyduj, co bardziej ci odpowiada. 

Java Python

Czego łatwiej się nauczyć: Javy czy Pythona?  

Kolejne pytanie, które może się zrodzić (zwłaszcza gdy dopiero zaczynasz przygodę z programowaniem) brzmi: jak szybko mogę nauczyć się Javy vs. Pythona? 

Tu nie ma wątpliwości: Python jest zwycięzcą. Jak wspomniałem, jego składnia jest krótsza i prostsza. Prototypowanie w Javie jest bardziej złożone – przykładowo, obciąża kod dodatkowymi deklaracjami i ograniczeniami. Wybierz Pythona, jeśli nie masz wiele czasu na naukę. 

Oto lista kluczowych czynników, które trzeba wziąć pod uwagę przed podjęciem decyzji: 

  • Oferty pracy: wciąż więcej ofert pracy jest w Javie 
  • Zmiana pracy / migracja: dzięki skryptowaniu, łatwiej jest w przypadku Pythona, jeśli np. myślisz o kulturze DevOps  
  • Programowanie zorientowane obiektowo: zarówno Python, jak i Java polegają na programowaniu obiektowym, więc znajomość jednego z tych języków stanowi dobry punkt wyjścia do nauki drugiego 
  • Niezależne od platformy: zarówno binaria Pythona, jak i Javy (kody bajtowe) po wygenerowaniu mogą być wykonywane na dowolnych obsługiwanych platformach dzięki własnym maszynom wirtualnym (odpowiednio PVM i JVM) 
  • Prostota: Python jest łatwiejszy w użyciu dzięki prostszej składni  
  • Wykonanie: jako reprezentacja języka skryptowego Python ma możliwość bezpośredniego uruchamiania kodu skryptu za pomocą interpretera zamiast bezpośredniego uruchamiania kompilatora (np. Javac dla Java) 
  • Wydajność / szybkość wykonania: Java ma tu przewagę, ponieważ jest szybsza (można skompilować ją JIT, aby była bardziej wydajna) 
  • Popularność / wsparcie: Java wygrywa w tym zestawieniu jako popularne rozwiązanie, które ma bardzo dużą i wspierającą społeczność programistów 
  • Python jest językiem statycznie typowanym (sprawdza typ w czasie wykonywania, co oznacza, że twój kod może w ostatniej chwili zawieść) 
  • Java jest językiem dynamicznie typowanym (sprawdza typ w czasie kompilacji, co oznacza, że wychwytujesz problemy w swoim kodzie wcześniej w procesie tworzenia oprogramowania) 
  • Rozszerzalność: ponieważ Java jest bardziej popularna, na rynku jest dostępne więcej wtyczek, interfejsów API, frameworków i bibliotek niż w przypadku Pythona 

Automatyzacja testów – jakie są opcje? 

Selenium zaspokaja określoną potrzebę w świecie automatyzacji testów. Jest tylko dla przeglądarek. Jeśli chcesz szybko rozpocząć automatyzację swoich przypadków testowych, zaprzyjaźnij się z Selenium IDE. Pozwala ono szybko i łatwo rozpocząć automatyzację testów dzięki opcji nagrywania. 

Kroki testowe wykonywane w przeglądarce są bezpośrednio przekształcane w zestaw poleceń dzięki Selenese (to wbudowany język Selenium IDE). To bardzo ułatwia zadanie. Ponadto, po zapisaniu testów w zestawie poleceń Selenese, można je agregować w pakiety testowe i ostatecznie eksportować do preferowanych powiązań Selenium (np.: Java, Python itp.). 

Selenese i Selenium IDE to dobry początek, ale im bardziej będziesz się zagłębiać w temat automatyzacji aplikacji internetowych, tym wyraźniej dostrzeżesz ich ograniczenia. 

Aby solidnie przetestować nowoczesną aplikację internetową z jej dynamicznie zmieniającą się treścią (np. przy użyciu technologii AJAX czy JS), zaczniesz szukać bardziej zaawansowanych opcji. Tutaj z pomocą przychodzi  Selenium WebDriver wraz z powiązaniami językowymi Selenium. Selenium WebDriver jest często używany jako baza do testowania aplikacji internetowych.  

Zgodnie z sylabusem A4Q Selenium 4 Tester: 

„Selenium, gdy jest używane do testowania aplikacji internetowych, potrzebuje pewnych frameworków testowych. Silnik Selenium, jako samodzielne narzędzie, wystawia TAE tylko swoje natywne API jako metody lub funkcje. Inżynier automatyzacji testów musi następnie zaprogramować środowisko testowe, aby użyć tych interfejsów API do przeprowadzenia wymaganych testów. Framework testowy można opracować od podstaw lub  wykorzystać już istniejące. Selenium obsługuje wiele frameworków testowych w różnych językach, np.:  

Niezależnie od tego, czy korzystasz z własnych frameworków, czy nie, musisz w jakiś sposób sterować wykonywaniem testów. Wielu inżynierów korzysta z bibliotek testów jednostkowych do prowadzenia swoich testów (test runnerów). 

Niektóre z nich, takie jak TestNG lub Pytest, oprócz podstawowego zastosowania w testach jednostkowych pozwalają tworzyć testy funkcjonalne wyższego poziomu  (funkcjonalne, komponentowe, integracyjne, end-to-end itp.). 

Dla Pythona 

Najprostszym przypadkiem jest użycie standardowej biblioteki testów jednostkowych Pythona. Alternatywnie możesz użyć bardzo popularnego Pytest.  

Dla Javy 

Możesz użyć bibliotek xUnit (np. JUnit 4/5) lub TestNG.  

Po zaznajomieniu się z uruchamianiem testów lokalnie za pomocą wybranej przeglądarki możesz zrobić krok naprzód i skonfigurować siatkę przeglądarek do zdalnego uruchamiania testów.  

W ten sposób testy można uruchamiać na różnych przeglądarkach i kilku systemach operacyjnych na wielu komputerach w trybie równoległym. Jeśli masz sporą konfigurację, możesz przeprowadzić testy regresji w krótkim czasie (w porównaniu z czasem bez Selenium Grid). 

Następnie możesz iść o jeszcze jeden krok dalej i zintegrować swoje testy z CI/CD pipeline (np.: uruchomić Selenium Tests w GitLab CI/CD lub Jenkins). 

Pamiętaj, że masz możliwość skorzystania z dobrodziejstw konteneryzacji, np. Dockera, aby utworzyć różne obrazy do automatycznych testów interfejsu użytkownika. 

W ten sposób możesz przygotować oddzielną maszynę wirtualną dla dowolnej kombinacji środowiska systemu operacyjnego / przeglądarki dla SUT (System Under Test) / AUT (Application Under Test). 

CI/CD odgrywa kluczową rolę w tworzeniu cykli życia oprogramowania, w których nowe funkcje są ciągle aktualizowane maksymalnie szybko i wydajnie. Dzięki temu użytkownicy końcowi mają dostęp do nowych funkcji bez konieczności pobierania aktualizacji oprogramowania, co zapewnia im bezproblemową obsługę.  

Biorąc pod uwagę krótki czas trwania cyklu wydawania oprogramowania, testy muszą być skalowane, aby dostarczane oprogramowanie było wolne od błędów we wspomnianym przedziale czasowym. W tym miejscu Selenium odgrywa kluczową rolę, umożliwiając automatyzację testów w CI/CD pipeline. 

Dzięki automatyzacji z Selenium można wykonywać testy równoległe w wymaganej skali, a Dockerem, z pomocą kontenerów, pomaga to utrzymać środowisko testowe w dobrym stanie.  

Przeczytaj także: Testy akceptacyjne użytkownika (UAT) – dlaczego są ważne? 

Czym jest Selenium WebDriver? 

Najbardziej wyczerpującym źródłem wiedzy w tym temacie jest strona Selenium WebDriver:  

„Selenium WebDriver odnosi się zarówno do powiązań językowych, jak i implementacji kodu sterującego danej przeglądarki. Powszechnie używa się po prostu określenia WebDriver”. 

lub cytując sylabus A4Q:  

„Selenium WebDriver, jak sama nazwa wskazuje, współdziała z przeglądarką w taki sam sposób, jak zrobiłby to prawdziwy użytkownik. WebDriver to kompleksowe narzędzie do kompilacji testów dla aplikacji internetowych, które jest również często określane jako Selenium WebDriver”. 

Z architektonicznego punktu widzenia Selenium wszystkie komponenty są odpowiednio zwizualizowane na oficjalnej stronie dokumentacji. 

Można powiedzieć, że WebDriver pomaga nam naśladować interakcje użytkownika / przeglądarki i dlatego jest tak pomocne w automatyzacji testów. WebDriver kontroluje przeglądarkę za pomocą właściwych dla niej sterowników, które są zwykle tworzone przez dostawców przeglądarek (np. Google dla Chrome lub Mozilla dla Firefox). 

Cała komunikacja jest dwukierunkowa i zgodna z następującymi protokołami: 

Dzięki protokołowi W3C wprowadzonemu w Selenium 4 mamy bezpośredni transfer informacji między klientem a serwerem. Tak więc, jeśli nadal używasz Selenium 3 (WebDriver) i wahasz się, czy zacząć korzystać z wyższej wersji, koniecznie sprawdź informacje na stronie: Upgrade to Selenium 4.   

Minimalne wymagane wersje to Java w wersji 8 i Python w wersji 3.7 

Selenium i Python 

Jeśli wybrałeś tę drogę i jesteś początkujący, wypróbuj Selenium IDE i wygeneruj swój kod Pythona za pomocą funkcji eksportu.   

Gdy będziesz już bardziej obeznany z Selenium IDE, przygotuj pełne środowisko programistyczne do automatyzacji testów Selenium / Python. 

Przygotuj: 


*Selenium Manager jest dostępny od wersji 4.6 (Beta)

blog 2023.03.09 cover - Testy akceptacyjne użytkownika (UAT) – dlaczego są ważne? 

NumPy – wstęp do biblioteki w języku Python

PRZECZYTAJ ARTYKUŁ

Selenium i Java 

Jeśli wybrałeś tę opcję i jesteś początkujący, wypróbuj wtyczkę Selenium IDE dla Chrome lub Firefox i wygeneruj kod Java za pomocą funkcji eksportu: 

Gdy już nabędziesz doświadczenia, przygotuj pełne środowisko programistyczne do automatyzacji testów Selenium / Java. 

Przygotuj: 


*Selenium Manager jest dostępny od wersji 4.6 (Beta)

Która opcja jest lepsza dla testów automatycznych (Selenium z Pythonem czy Selenium z Javą)?  

Jeśli jesteś całkowicie „zielony” i chcesz sprawdzić możliwości programowania czy automatyzacji za pomocą Selenium z Javą lub Pythonem, proponuję, abyś zaczął od skorzystania z Selenium IDE. 

Selenium IDE jest dostarczany w formie dodatku do Chrome, Firefox i Edge (wersja 3.x). Umożliwia wygenerowanie kodu Javy / Pythona za pomocą funkcji eksportu. To bardzo proste – zwyczajnie rejestrujesz swoje działania w przeglądarce. Kod jest następnie generowany za pomocą funkcji eksportu do ulubionego języka. W momencie pisania tego artykułu (czerwiec 2023) możliwe było nawet pobranie samodzielnej wersji (4 alpha) Selenium IDE na kilka platform (np.: Windows, MacOS). 

Dowiedz się więcej o najnowszych wersjach Selenium. 

Z punktu widzenia automatyzacji, a zwłaszcza integracji CI/CD, wygląda na to, że lepiej sprawdzi się tu duet Selenium i Java. Dobrze wpisuje się w powyższy proces – zazwyczaj natywnie i łatwo dzięki bardzo dobrej integracji z narzędziami takimi jak Jenkins / Maven / Gradle. 

Nie oznacza to jednak, że nie można tego osiągnąć za pomocą Pythona. Będzie to co prawda bardziej męczące i wymaga użycia niektórych wtyczek. Ale przypomnijmy: Python oznacza łatwe programowanie i większą czytelność. Jeśli więc nie masz żadnego zaplecza programistycznego w obszarze Javy i Pythona, może kusić cię wykorzystanie drugiego z tych języków. 

Jednym z ważnych punktów w procesie rozwoju automatyzacji testów w Selenium jest debugowanie testów. Wiele przeglądarek udostępnia „DevTools” – zestaw narzędzi zintegrowanych z przeglądarką, których programiści mogą używać do debugowania aplikacji internetowych i sprawdzania wydajności swoich stron. 

Pierwszym narzędziem tego typu, które przychodzi mi do głowy, jest Chrome DevTools oparty na protokole Chrome DevTools Protocol (CDP): 

Jest on prawdopodobnie najczęściej używany i zintegrowany z samym Selenium 4. Pomaga sprawdzać, testować i weryfikować selektory. Ponieważ selektory są ogólne i niezależne od języka, mają uniwersalne zastosowanie. Przydatne w debugowaniu kodu testowego Selenium będą również punkty przerwania (breakpoints) w twoim ulubionym IDE. Ustaw je w dowolnym miejscu, które wydaje ci się problematyczne, a test w przeglądarce zatrzyma się w wybranym momencie. Teraz możesz kontynuować debugowanie za pomocą DevTools przeglądarki, takich jak Chrome DevTools. 

Działa to zarówno dla Javy (np.: IDEA), jak i Pythona (np.: PyCharm). Ale jeśli chodzi o Pythona, jest jedna kwestia interesująca również w kontekście debugowania. Mam na myśli PDB (The Python Debugger), jedną z najlepszych technik debugowania dla Selenium. 

Ten moduł Pythona zapewnia interaktywną opcję debugowania kodu źródłowego. Aby samemu przekonać się o tym, jak bardzo może być przydatna, spójrz na poniższy przykład: 

C:\Users\user> py 

Python 3.11.4 (tagi/v3.11.4:d2340ef, 7 czerwca 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)] na win32 

Wpisz „pomoc”, „prawa autorskie”, „kredyty” lub „licencja”, aby uzyskać więcej informacji. 

>>> from selenium import webdriver 

>>> from selenium.webdriver.common.by import By 

>>> import pdb 

>>> if __name__ == '__main__': 

...     print('Hello World!') 

...     browser = webdriver.Chrome() 

...     browser.  Get('http://selenium.dev/') 

...     web_driver_selector = "div.selenium-button-container a.selenium-webdriver" 

...     web_Driver_link = browser.find_element(By.CSS_SELECTOR, web_Driver_Selector) 

...     pdb.set_trace  () 

...     browser.  Quit() 

... 

Hello World! 

 

a teraz, gdy twoja przeglądarka zostanie zatrzymana w wybranym punkcie ustawionym na stronie, możesz sprawdzić web_driver_link: 

(Pdb) dir 

<built-in function dir> 

(Pdb) dir(web_driver_link) 

['__abstractmethods__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_abc_impl', '_execute', '_id', '_parent', '_upload', 'accessible_name', 'aria_role', 'clear', 'click', 'find_element', 'find_elements', 'get_attribute', 'get_dom_attribute', 'get_property', 'id', 'is_displayed', 'is_enabled', 'is_selected', 'location', 'location_once_scrolled_into_view', 'parent', 'rect', 'screenshot', 'screenshot_as_base64', 'screenshot_as_png', 'send_keys', 'shadow_root', 'size', 'submit', 'tag_name', 'text', 'value_of_css_property'] 

Jak widać, PDB daje możliwość sprawdzenia obiektu i tego, co można z nim zrobić, za pomocą polecenia dir, na przykład: 

(Pdb) web_driver_link.is_displayed() 

True 

(Pdb) web_driver_link.is_enabled() 

True 

(Pdb) web_driver_link.is_selected() 

False 

(Pdb) web_driver_link.text 

'READ MORE' 

(Pdb) web_driver_link.get_property('href') 

„https://www.selenium.dev/documentation/webdriver/” 

(Pdb) web_driver_link.get_dom_attribute('class') 

'selenium-button selenium-webdriver text-uppercase font-weight-bold' 

(Pdb) web_driver_link.get_attribute('class') 

'selenium-button selenium-webdriver text-uppercase font-weight-bold' 

(Pdb) web_driver_link.get_dom_attribute('class') 

<bound method WebElement.get_dom_attribute of <selenium.webdriver.remote.webelement.WebElement (session="b51ad53a899388ec9293d83fd0750a98", element="E97FE72B561D59DFF64B6C8846C4CC17_element_31")>> 

(Pdb) web_driver_link.id 

'E97FE72B561D59DFF64B6C8846C4CC17_element_31' 

(Pdb) web_driver_link.__class__ 

<class 'selenium.webdriver.remote.webelement.WebElement'> 

(Pdb) web_driver_link.value_of_css_property 

<bound method WebElement.value_of_css_property of <selenium.webdriver.remote.webelement.WebElement (session="b51ad53a899388ec9293d83fd0750a98", element="E97FE72B561D59DFF64B6C8846C4CC17_element_31")>> 

(Pdb) web_driver_link.value_of_css_property('color') 

'rgba(200, 16, 46, 1)' 

(Pdb) 

Może to być również jeden z argumentów przemawiających na korzyść Pythona. Możesz go rozszerzyć nawet za pomocą dodatku ipdb, który poprawia obsługę debuggera pdb.  

Tryb debugowania ipdb dodaje kolorowe podświetlanie składni, uzupełnianie tabulatorów i rozszerzony widok kodu z numerami wierszy. Przed użyciem PDB musi być zainstalowany niezależnie od Pytest:  

pip install ipdb 

Do czego służy Selenium z Pythonem? 

Wspomniany duet technologiczny służy do testowania frontu aplikacji webowych. Pomaga wspierać żmudne i powtarzalne działania lub testy GUI, zastępując je automatycznymi skryptami. W ten sposób można je zintegrować z narzędziami CI/CD i wykorzystać na przykład do testów regresji przeprowadzanych w nocy. Gdybym miał odpowiedzieć na powyżej zadane pytanie jednym zdaniem, powiedziałbym: 

„Selenium + Python służy zasadniczo do automatyzacji testów aplikacji internetowych”. 


Selenium (WebDriver) odpowiada za dwukierunkową komunikację klient – serwer między tobą a przeglądarką. Python i jego powiązania z Selenium „opakowują” to wszystko w wykonywalny kod, dostarczany przez niektóre frameworki testowe, takie jak xUnit / TestNG. 

Czy Selenium z Pythonem to dobry wybór? 

Odpowiedź na to pytanie zależy od wielu czynników. Każdy z nas jest inny, różnią nas doświadczenie, kompetencje i umiejętność uczenia się. Ostateczna odpowiedź na to pytanie będzie więc miała dla ciebie wymiar indywidualny. Celem tego artykułu jest to, aby pomóc ci ją odnaleźć. Przeczytaj go, przeanalizuj, biorąc pod uwagę własne cele zawodowe, doświadczenie, aktualne projekty i swoje plany, tak by dokonać możliwie jak najlepszego wyboru.  

Jak wykonać skrypt Selenium w Pythonie? 

W Pythonie możemy wyróżnić 2 główne typy plików: 

  • Pliki .py to pliki tekstowe możliwe do odczytania przez człowieka, zawierające wewnątrz kod Pythona, zwane skryptami Pythona (w systemach Windows rozszerzeniem może być również .pyw
  • Pliki .pyc to skompilowane pliki kodu bajtowego, które są generowane przez interpreter języka Python podczas importowania lub wykonywania skryptu Pythona. 

Pliki Pythona są zapisywane na komputerze użytkownika z rozszerzeniem .py, podobnie jak pliki Java są zapisywane z rozszerzeniami .java. Kody Pythona, po ich zinterpretowaniu, są następnie konwertowane na kody bajtowe. Te kody bajtowe są zapisywane w pliku z rozszerzeniem .pyc.  

Katalog „__pycache__” to folder utworzony w celu przechowywania plików .pyc

Pomyśl o pliku .pyc jako skompilowanym kodzie bajtowym podobnym do pliku .class w świecie Javy. 

Gdy tylko go wygenerujesz, może być bezpośrednio wykonany przez interpreter bez rekompilacji pliku skryptu .py za każdym razem, gdy go używasz – zatem przyspieszasz wykonanie. 

To ważne, gdy masz spore skrypty i/lub moduły Pythona. 

Podsumowując: 

  • Pliki .pyc są generowane automatycznie przez interpreter języka Python podczas importowania lub wykonywania skryptu Python 
  • Pliki .pyc są przechowywane w tym samym katalogu co odpowiadające im pliki .py i mają taką samą nazwę jak pliki .py, z wyjątkiem rozszerzenia .pyc zamiast .py 
  • Pliki .pyc są właściwe dla danej wersji Pythona, użytej do ich wygenerowania. Jeśli spróbujesz uruchomić plik .pyc z inną wersją języka Python, możesz napotkać błędy lub może się pojawić nieoczekiwane zachowanie 

Jeśli chcesz uruchomić skrypt Pythona, masz 2 opcje: 

  1. uruchamianie Python Scriptu przez Interpretera Pythona w trybie interaktywnym (w postaci fragmentu kodu napisanego w sesji interaktywnej – przydatnego do debugowania) 

python 

e.g.: 

wpisywanie kodu linijka po linijce 

C:\Users\user> py 

Python 3.11.4 (tagi/v3.11.4:d2340ef, 7 czerwca 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)] na win32 

Wpisz „pomoc”, „prawa autorskie”, „kredyty” lub „licencja”, aby uzyskać więcej informacji. 

>>> from selenium import webdriver 

>>> if __name__ == '__main__': 

...     print('Hello World!') 

...     browser = webdriver.Chrome() 

...     browser.get('http://selenium.dev/') 

...     browser.quit() 

... 

Hello World! 

  

DevTools listening on ws://127.0.0.1:56302/devtools/browser/fdca3cc9-4266-49af-a146-41d60ed464eb 

>>> exit() 

  

C:\Users\user> 

lub za pomocą exec() , który zapewnia alternatywny sposób uruchamiania skryptów: 

C:\Users\user> py 

Python 3.11.4 (tagi/v3.11.4:d2340ef, 7 czerwca 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)] na win32 

Wpisz „pomoc”, „prawa autorskie”, „kredyty” lub „licencja”, aby uzyskać więcej informacji. 

>>> exec(open('your_script.py').read()) 

Hello World! 

>>> 

>>> quit() 

  

C:\Users\user> 

Interaktywna sesja Pythona pozwala napisać wiele linijek kodu, jednak po jej zamknięciu tracisz wszystko, co napisałeś.  

Dlatego często do pisania programów w Pythonie używa się zwykłych plików tekstowych. Plik z kodem Pythona musi znajdować się w bieżącym katalogu roboczym. Plik musi znajdować się w ścieżce wyszukiwania modułów Pythona (PMSP), w której Python wyszukuje importowane moduły i pakiety. 

2) uruchom Python Script za pomocą Command-Line (w formie skryptu lub modułu – przydatne do automatyzacji) 

python your_script.py 

C:\Users\user> py your_script.py 

Hello World! 

lub jeszcze łatwiej: używając skojarzeń plików systemu Windows i podając tylko nazwę skryptu: 

C:\Users\user> your_script.py 

Hello World! 

w systemach GNU/Linux możesz osiągnąć coś podobnego, dodając tak zwany hashbang lub shebang do swojego skryptu. Jest on kombinacją znaków #! po którym następuje ścieżka interpretera. 

Istnieją dwa sposoby określenia ścieżki do interpretera: 

  • #!/usr/bin/python: pisząc ścieżkę absolutną 
  • #!/usr/bin/env python: za pomocą polecenia systemu operacyjnego env, które lokalizuje i wykonuje kod Pythona, przeszukując zmienną środowiskową PATH 

Ponieważ nie wszystkie systemy uniksopodobne lokalizują interpreter Pythona w tym samym miejscu, drugi charakter ścieżki podany powyżej wygląda bardziej uniwersalnie. 

musisz również dodać uprawnienia do wykonywania: 

#assign the execution permissions 

chmod +x your_script.py 

#run script using its filename 

./your_script.py 

Hello World! 

możesz uruchomić wygenerowany bezpośrednio kod bajtowy skryptu: 

C:\Users\user> dir your_script.py 

Volume in drive C is Windows 

Volume Serial Number is 94D2-9546 

  

Directory of C:\Users\user 

  

15-Jun-23  14:02               544 your_script.py 

               1 File(s)            544 bytes 

               0 Dir(s)  194,664,701,952 bytes free 

  

C:\Users\user> cd __pycache__ 

  

C:\Users\user\__pycache__> dir your_script.cpython-311.pyc 

Volume in drive C is Windows 

Volume Serial Number is 94D2-9546 

  

Directory of C:\Users\user\__pycache__ 

  

15-Jun-23  14:06               401 your_script.cpython-311.pyc 

               1 File(s)            401 bytes 

               0 Dir(s)  194,664,546,304 bytes free 

  

C:\Users\user\__pycache__> your_script.cpython-311.pyc 

Hello World! 

  

C:\Users\user\__pycache__> 

Jak zainstalować Selenium z PIP? 

  • zainstaluj Pythona (ręcznie lub za pomocą IDE) 

Wejdź na Python.org i pobierz odpowiednią wersję

py –version

Python 3.N.N

e.g. for WIN (CMD):

 

C:\Users\user> py --version 

Python 3.11.4 

  

C:\Users\user> 

Czym jest PIP? 

PIP jest instalatorem pakietów dla Pythona. Możesz go użyć do zainstalowania pakietów z indeksu pakietów Pythona i innych. Najpopularniejsze narzędzie do instalowania pakietów Pythona dołączone do najnowszych wersji tego języka. Dostarcza podstawowych funkcji wyszukiwania, pobierania i instalowania pakietów z innych indeksów pakietów Pythona i może być włączony do szerokiego zakresu przepływów pracy programistycznej (workflow) za pośrednictwem interfejsu wiersza poleceń (CLI). 

py -m pip –version

pip X.Y.Z from … (python 3.N.N)

e.g., for WIN (CMD):

 

C:\Users\user> py -m pip --version 

pip 23.1.2 from C:\Program Files\Python311\Lib\site-packages\pip (python 3.11) 

  

C:\Users\user> 

  

e.g., for WIN (IDE): 

  

  

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium> py -m pip list 

 

 

setuptools 65.5.1 

wheel      0.38.4 

  

[notice] A new release of pip available: 22.3.1 -> 23.1.2 

[notice] To update, run: python.exe -m pip install --upgrade pip 

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium> py -m pip --version 

pip 22.3.1 from C:\Users\user\PycharmProjects\pythonSelenium\venv\Lib\site-packages\pip (python 3.11) 

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium> python.exe -m pip install --upgrade pip 

Requirement already satisfied: pip in c:\users\user\pycharmprojects\pythonselenium\venv\lib\site-packages (22.3.1) 

Collecting pip 

  Downloading pip-23.1.2-py3-none-any.whl (2.1 MB) 

     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 2.7 MB/s eta 0:00:00 

Installing collected packages: pip 

  Attempting uninstall: pip 

    Found existing installation: pip 22.3.1 

    Uninstalling pip-22.3.1: 

      Successfully uninstalled pip-22.3.1 

Successfully installed pip-23.1.2 

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium>  

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium> py -m pip --version 

pip 23.1.2 from C:\Users\user\PycharmProjects\pythonSelenium\venv\Lib\site-packages\pip (python 3.11) 

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium>  

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium> py -m pip list 

Package    Version 

---------- ------- 

pip        23.1.2 

setuptools 65.5.1 

wheel      0.38.4 

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium>   

Jeśli to zadziałało, gratulacje! Masz w swoim środowisku działający PIP. 

Zweryfikuj obsługiwaną wersję Pythona (dla wersji Selenium 4.10.0): 

  Python 3.7+ 
  

Instalacja 

Jeśli masz PIP w swoim systemie, możesz po prostu zainstalować lub zaktualizować powiązania Pythona: 

pip install selenium 

pip install -U selenium 

Jeśli potrzebujesz określonej wersji powiązań Selenium z Pythonem: 

pip install selenium==<version_number> 

Alternatywnie możesz pobrać dystrybucję źródłową z PyPI (np. selen-4.10.0.tar.gz), odarchiwizować ją i uruchomić: 

py setup.py install

e.g. for WIN (CMD):

  

C:\Users\user> py -m pip list 

Package    Version 

---------- ------- 

pip        23.1.2 

setuptools 65.5.0 

  

C:\Users\user> 

C:\Users\user> py -m pip install selenium 

Defaulting to user installation because normal site-packages is not writeable 

Collecting selenium 

  Downloading selenium-4.10.0-py3-none-any.whl (6.7 MB) 

     ---------------------------------------- 6.7/6.7 MB 23.7 MB/s eta 0:00:00 

Collecting urllib3[socks]<3,>=1.26 (from selenium) 

  Downloading urllib3-2.0.3-py3-none-any.whl (123 kB) 

     ---------------------------------------- 123.6/123.6 kB ? eta 0:00:00 

Collecting trio~=0.17 (from selenium) 

  Downloading trio-0.22.0-py3-none-any.whl (384 kB) 

     ---------------------------------------- 384.9/384.9 kB 25.0 MB/s eta 0:00:00 

Collecting trio-websocket~=0.9 (from selenium) 

  Downloading trio_websocket-0.10.3-py3-none-any.whl (17 kB) 

Collecting certifi>=2021.10.8 (from selenium) 

  Downloading certifi-2023.5.7-py3-none-any.whl (156 kB) 

     ---------------------------------------- 157.0/157.0 kB 9.2 MB/s eta 0:00:00 

Collecting attrs>=19.2.0 (from trio~=0.17->selenium) 

  Downloading attrs-23.1.0-py3-none-any.whl (61 kB) 

     ---------------------------------------- 61.2/61.2 kB 3.2 MB/s eta 0:00:00 

Collecting sortedcontainers (from trio~=0.17->selenium) 

  Downloading sortedcontainers-2.4.0-py2.py3-none-any.whl (29 kB) 

Collecting async-generator>=1.9 (from trio~=0.17->selenium) 

  Downloading async_generator-1.10-py3-none-any.whl (18 kB) 

Collecting idna (from trio~=0.17->selenium) 

  Downloading idna-3.4-py3-none-any.whl (61 kB) 

     ---------------------------------------- 61.5/61.5 kB 3.2 MB/s eta 0:00:00 

Collecting outcome (from trio~=0.17->selenium) 

  Downloading outcome-1.2.0-py2.py3-none-any.whl (9.7 kB) 

Collecting sniffio (from trio~=0.17->selenium) 

  Downloading sniffio-1.3.0-py3-none-any.whl (10 kB) 

Collecting cffi>=1.14 (from trio~=0.17->selenium) 

  Downloading cffi-1.15.1-cp311-cp311-win_amd64.whl (179 kB) 

     ---------------------------------------- 179.0/179.0 kB ? eta 0:00:00 

Collecting exceptiongroup (from trio-websocket~=0.9->selenium) 

  Downloading exceptiongroup-1.1.1-py3-none-any.whl (14 kB) 

Collecting wsproto>=0.14 (from trio-websocket~=0.9->selenium) 

  Downloading wsproto-1.2.0-py3-none-any.whl (24 kB) 

Collecting pysocks!=1.5.7,<2.0,>=1.5.6 (from urllib3[socks]<3,>=1.26->selenium) 

  Downloading PySocks-1.7.1-py3-none-any.whl (16 kB) 

Collecting pycparser (from cffi>=1.14->trio~=0.17->selenium) 

  Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB) 

     ---------------------------------------- 118.7/118.7 kB ? eta 0:00:00 

Collecting h11<1,>=0.9.0 (from wsproto>=0.14->trio-websocket~=0.9->selenium) 

  Downloading h11-0.14.0-py3-none-any.whl (58 kB) 

     ---------------------------------------- 58.3/58.3 kB ? eta 0:00:00 

Installing collected packages: sortedcontainers, urllib3, sniffio, pysocks, pycparser, idna, h11, exceptiongroup, certifi, attrs, async-generator, wsproto, outcome, cffi, trio, trio-websocket, selenium 

Successfully installed async-generator-1.10 attrs-23.1.0 certifi-2023.5.7 cffi-1.15.1 exceptiongroup-1.1.1 h11-0.14.0 idna-3.4 outcome-1.2.0 pycparser-2.21 pysocks-1.7.1 selenium-4.10.0 sniffio-1.3.0 sortedcontainers-2.4.0 trio-0.22.0 trio-websocket-0.10.3 urllib3-2.0.3 wsproto-1.2.0 

  

C:\Users\user> 

C:\Users\user> py -m pip freeze 

async-generator==1.10 

attrs==23.1.0 

certifi==2023.5.7 

cffi==1.15.1 

exceptiongroup==1.1.1 

h11==0.14.0 

idna==3.4 

outcome==1.2.0 

pycparser==2.21 

PySocks==1.7.1 

selenium==4.10.0 

sniffio==1.3.0 

sortedcontainers==2.4.0 

trio==0.22.0 

trio-websocket==0.10.3 

urllib3==2.0.3 

wsproto==1.2.0 

  

C:\Users\user> 

C:\Users\user> py -m pip show selenium 

Name: selenium 

Version: 4.10.0 

Podsumowanie: 

Home-page: https://www.selenium.dev 

Author: 

Author-email: 

License: Apache 2.0 

Location: C:\Users\user\AppData\Roaming\Python\Python311\site-packages 

Requires: certifi, trio, trio-websocket, urllib3 

Required-by: 

  

C:\Users\user> 

  

  

or for WIN (IDE): 

  

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium> py -m pip install selenium 

Collecting selenium 

  Using cached selenium-4.10.0-py3-none-any.whl (6.7 MB) 

Collecting urllib3[socks]<3,>=1.26 (from selenium) 

  Using cached urllib3-2.0.3-py3-none-any.whl (123 kB) 

Collecting trio~=0.17 (from selenium) 

  Using cached trio-0.22.0-py3-none-any.whl (384 kB) 

Collecting trio-websocket~=0.9 (from selenium) 

  Using cached trio_websocket-0.10.3-py3-none-any.whl (17 kB) 

Collecting certifi>=2021.10.8 (from selenium) 

  Using cached certifi-2023.5.7-py3-none-any.whl (156 kB) 

Collecting attrs>=19.2.0 (from trio~=0.17->selenium) 

  Using cached attrs-23.1.0-py3-none-any.whl (61 kB) 

Collecting sortedcontainers (from trio~=0.17->selenium) 

  Using cached sortedcontainers-2.4.0-py2.py3-none-any.whl (29 kB) 

Collecting async-generator>=1.9 (from trio~=0.17->selenium) 

  Using cached async_generator-1.10-py3-none-any.whl (18 kB) 

Collecting idna (from trio~=0.17->selenium) 

  Using cached idna-3.4-py3-none-any.whl (61 kB) 

Collecting outcome (from trio~=0.17->selenium) 

  Using cached outcome-1.2.0-py2.py3-none-any.whl (9.7 kB) 

Collecting sniffio (from trio~=0.17->selenium) 

  Using cached sniffio-1.3.0-py3-none-any.whl (10 kB) 

Collecting cffi>=1.14 (from trio~=0.17->selenium) 

  Using cached cffi-1.15.1-cp311-cp311-win_amd64.whl (179 kB) 

Collecting exceptiongroup (from trio-websocket~=0.9->selenium) 

  Using cached exceptiongroup-1.1.1-py3-none-any.whl (14 kB) 

Collecting wsproto>=0.14 (from trio-websocket~=0.9->selenium) 

  Using cached wsproto-1.2.0-py3-none-any.whl (24 kB) 

Collecting pysocks!=1.5.7,<2.0,>=1.5.6 (from urllib3[socks]<3,>=1.26->selenium) 

  Using cached PySocks-1.7.1-py3-none-any.whl (16 kB) 

Collecting pycparser (from cffi>=1.14->trio~=0.17->selenium) 

  Using cached pycparser-2.21-py2.py3-none-any.whl (118 kB) 

Collecting h11<1,>=0.9.0 (from wsproto>=0.14->trio-websocket~=0.9->selenium) 

  Using cached h11-0.14.0-py3-none-any.whl (58 kB) 

Installing collected packages: sortedcontainers, urllib3, sniffio, pysocks, pycparser, idna, h11, exceptiongroup, certifi, attrs, async-generator, wsproto, outco 

me, cffi, trio, trio-websocket, selenium 

Successfully installed async-generator-1.10 attrs-23.1.0 certifi-2023.5.7 cffi-1.15.1 exceptiongroup-1.1.1 h11-0.14.0 idna-3.4 outcome-1.2.0 pycparser-2.21 pysoc 

ks-1.7.1 selenium-4.10.0 sniffio-1.3.0 sortedcontainers-2.4.0 trio-0.22.0 trio-websocket-0.10.3 urllib3-2.0.3 wsproto-1.2.0 

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium>  

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium> py -m pip list             

Package          Version 

---------------- -------- 

async-generator  1.10 

attrs            23.1.0 

certifi          2023.5.7 

cffi             1.15.1 

exceptiongroup   1.1.1 

h11              0.14.0 

idna             3.4 

outcome          1.2.0 

pip              23.1.2 

pycparser        2.21 

PySocks          1.7.1 

selenium         4.10.0 

sniffio          1.3.0 

sortedcontainers 2.4.0 

trio             0.22.0 

trio-websocket   0.10.3 

urllib3          2.0.3 

wheel            0.38.4 

wsproto          1.2.0 

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium> py -m pip show selenium 

Name: selenium 

Version: 4.10.0 

Podsumowanie: 

Home-page: https://www.selenium.dev 

Author: 

Author-email: 

License: Apache 2.0 

Location: C:\Users\user\PycharmProjects\pythonSelenium\venv\Lib\site-packages 

Requires: certifi, trio, trio-websocket, urllib3 

Required-by: 

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium>  

Automatyzacja testów – podsumowanie  

Selenium obsługuje wiele języków programowania do automatyzacji testów. Wśród programistów zarówno Java, jak i Python zyskały rekordową popularność. Pythona łatwo się nauczyć, jego składnia jest czytelna, więc jeśli dopiero zaczynasz programować, użycie Selenium z Pythonem może być interesujące pod względem automatyzacji. Natomiast Java i Selenium, szczególnie w kontekście integracji CI/CD, dzięki zastosowaniu odpowiednich narzędzi do budowania, doskonale wpisują się w cały proces wytwarzania oprogramowania. Odpowiedź na pytanie, czy wybrać Javę czy Pythona, należy do ciebie i będzie zależeć od twojego doświadczenia zawodowego i celów, jakie sobie stawiasz.  

FAQ Pakiet startowy Selenium + Java lub Python 

Oto twój pakiet startowy do automatyzacji testów z Selenium + Java lub Selenium + Python, bez względu na to, którego z nich zdecydujesz się użyć.