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.
Przejdź do:
- 1. Automatyzacja testów: jakie mamy opcje? Java i Python
- 2. Język programowania czy język skryptowy?
- 3. Czego łatwiej się nauczyć: Javy czy Pythona?
- 4. Automatyzacja testów – jakie są opcje?
- 5. Czym jest Selenium WebDriver?
- 6. Selenium i Python
- 7. Selenium i Java
- 8. Która opcja jest lepsza dla testów automatycznych (Selenium z Pythonem czy Selenium z Javą)?
- 9. Jak wykonać skrypt Selenium w Pythonie?
- 10. Jak zainstalować Selenium z PIP?
- 11. Automatyzacja testów – podsumowanie
- 12. FAQ
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.
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.
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:
- dla Selenium 3: JSON Wire Protocol prez HTTP (komunikacja tłumaczona)
- dla Selenium 4: W3C WebDriver Protocol (komunikacja natywna). Zobacz więcej na stronie W3C
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:
- IDE (PyCharm, Visual Studio Code lub Aqua)
- Python
- PIP (Package Installer for Python)
- Narzędzie do budowania Pipenv ( PIP + Venv/Virtualenv, Poetry lub Bazel)
- Powiązania Selenium z Pythonem
- Sterowniki przeglądarek dla Selenium (Chrome, Firefox, Safari, Opera, Edge or webdriver-manager/SeleniumManager*)
- Test Runner (Unittest lub Pytest)
*Selenium Manager jest dostępny od wersji 4.6 (Beta)
Przeczytaj artykuł: NumPy – wstęp do biblioteki w języku Python
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:
- IDE (IDEA, Visual Studio Code lub Aqua)
- Java (JDK)
- Narzędzie do budowania (Maven lub Gradle)
- Powiązania z Selenium w Javie
- Sterowniki przeglądarek dla Selenium (Chrome, Firefox, Safari, Opera, Edge or WebDriverManager/SeleniumManager*)
- Test Runner (JUNIT4 / JUNIT5 lub TestNG)
*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):
- https://developer.chrome.com/docs/devtools/
- https://www.selenium.dev/documentation/webdriver/bidirectional/chrome_devtools/
- https://www.selenium.dev/selenium/docs/api/Java/org/openqa/selenium/devtools/package-summary.html
- https://chromedevtools.github.io/devtools-protocol/
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.
- https://docs.python.org/3/library/pdb.html
- https://realpython.com/pl/python-debugging-pdb/
- https://visualmodo.com/6-simple-tips-for-debugging-selenium-python-code/
- https://seleniumbase.com/the-ultimate-pytest-debugging-guide-2021/
- https://www.codementor.io/@stevek/advanced-python-debugging-with-pdb-g56gvmpfa
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.
- https://prepinsta.com/pl/python/difference-between-py-pyc-and-pycache-files/
- https://stackabuse.com/differences-between-pyc-pyd-and-pyo-python-files/
- https://net-informations.com/python/iq/pyc.htm
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
eśli chcesz uruchomić skrypt Pythona, masz 2 opcje:
- 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>
- install or upgrade PIP (manually or using IDE)
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.
- instalacja powiązań Selenium Python
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ć.
Selenium / WebDriver z powiązaniami językowymi
https://selenium.dev/downloads
https://www.selenium.dev/downloads/
https://github.com/SeleniumHQ/Selenium
https://www.selenium.dev/documentation/webdriver/getting_started/install_library/
https://www.selenium.dev/documentation/webdriver/getting_started/first_script/
https://www.selenium.dev/selenium-ide/
https://www.tutorialspoint.com/what-is-selenese
https://www.javatpoint.com/selenium-ide-commands
https://github.com/SeleniumHQ/selenium-ide/releases/latest
https://github.com/SeleniumHQ/selenium-ide/releases/tag/4.0.0-alpha.40
https://github.com/SeleniumHQ/selenium-ide/releases
Selenium i Python
Download: https://pypi.org/project/selenium/#history
API: https://seleniumhq.github.io/selenium/docs/api/py/api.html
Changelog: https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES
PyCharm: https://www.jetbrains.com/pycharm/
VSC: https://code.visualstudio.com/
VSC Python Extension: https://marketplace.visualstudio.com/items?itemName=ms-python.python
Aqua: https://www.jetbrains.com/aqua/download
Python: https://www.python.org/
PIP: https://pip.pypa.io/en/stable/
Python Selenium Bindings: https://pypi.org/project/selenium/#files
Unittest: https://docs.python.org/3/library/unittest.html
Pytest: https://pypi.org/project/pytest
Pipenv: https://pypi.org/project/pipenv/
Venv: https://packaging.python.org/en/latest/key_projects/#venv
Virtualenv: https://pypi.org/project/virtualenv/
Poetry: https://python-poetry.org/
Bazel: https://bazel.build/
Browser drivers: https://www.selenium.dev/downloads/#supported-browsers
WebDriverManager: https://pypi.org/project/webdriver-manager/
Selenium i Java
Download: https://github.com/SeleniumHQ/selenium/releases
API: https://seleniumhq.github.io/selenium/docs/api/Java/index.html
Changelog: https://github.com/SeleniumHQ/selenium/blob/trunk/Java/CHANGELOG
IDEA: https://www.jetbrains.com/idea/
VSC: https://code.visualstudio.com/
VSC CODING PACK for JAVA: https://aka.ms/vscode-java-installer-win
VSC EXTENSION PACK for JAVA: vscode:extension/vscjava.vscode-java-pack
AQUA: https://www.jetbrains.com/aqua/download
JDK: https://www.oracle.com/java/technologies/javase-downloads.html
MAVEN: https://maven.apache.org/
GRADLE: https://gradle.org/
JAVA SELENIUM BINDINGS: https://github.com/SeleniumHQ/selenium/releases/
JUNIT 4: https://junit.org/junit4/
JUNIT 5: https://junit.org/junit5/
TESTNG: https://testng.org
BROWSER DRIVERS: https://www.selenium.dev/downloads/#supported-browsers
WEBDRIVERMANAGER: https://bonigarcia.dev/webdrivermanager/
Selenium Grid i kontenery Docker
https://www.selenium.dev/documentation/grid/
https://www.selenium.dev/documentation/overview/components/
https://github.com/SeleniumHQ/docker-selenium
https://hub.docker.com/r/selenium/standalone-chrome
https://www.browserstack.com/guide/run-selenium-tests-in-docker
https://qaautomation.expert/2022/04/12/run-selenium-tests-in-gitlab-ci-cd/
Przejdź do:
- 1. Automatyzacja testów: jakie mamy opcje? Java i Python
- 2. Język programowania czy język skryptowy?
- 3. Czego łatwiej się nauczyć: Javy czy Pythona?
- 4. Automatyzacja testów – jakie są opcje?
- 5. Czym jest Selenium WebDriver?
- 6. Selenium i Python
- 7. Selenium i Java
- 8. Która opcja jest lepsza dla testów automatycznych (Selenium z Pythonem czy Selenium z Javą)?
- 9. Jak wykonać skrypt Selenium w Pythonie?
- 10. Jak zainstalować Selenium z PIP?
- 11. Automatyzacja testów – podsumowanie
- 12. FAQ