{"id":30333,"date":"2023-06-15T10:48:44","date_gmt":"2023-06-15T08:48:44","guid":{"rendered":"https:\/\/nearshore-it.eu\/artykuly\/uat-user-acceptance-testing\/"},"modified":"2024-11-07T12:35:14","modified_gmt":"2024-11-07T11:35:14","slug":"uat-user-acceptance-testing","status":"publish","type":"post","link":"https:\/\/nearshore-it.eu\/pl\/artykuly\/uat-user-acceptance-testing\/","title":{"rendered":"Testy akceptacyjne u\u017cytkownika (UAT) \u2013 dlaczego s\u0105 wa\u017cne?\u00a0"},"content":{"rendered":"\n<p>Jako (przysz\u0142y) in\u017cynier automatyzacji test\u00f3w celuj\u0105cy w prac\u0119 z Selenium w pewnym momencie dotrzesz do punktu, w kt\u00f3rym trzeba b\u0119dzie podj\u0105\u0107 decyzj\u0119, w kt\u00f3r\u0105 stron\u0119 i\u015b\u0107 oraz czego u\u017cywa\u0107 do testowania. \u015awiat IT i QA szybko si\u0119 zmienia, a niekt\u00f3re z narz\u0119dzi i j\u0119zyk\u00f3w, kt\u00f3re by\u0142y kiedy\u015b popularne, dzi\u015b ju\u017c takie nie s\u0105. Jak w ka\u017cdym przypadku, istnieje wiele czynnik\u00f3w, kt\u00f3re mog\u0105 odegra\u0107 rol\u0119 w podj\u0119ciu decyzji. W tym artykule postaram si\u0119 u\u0142atwi\u0107 ci to zadanie, przedstawiaj\u0105c zalety i wady \u0142\u0105czenia Selenium z dwoma obecnie najpopularniejszymi j\u0119zykami programowania: Jav\u0105 i Pythonem.<\/p>\n\n\n\n<div class=\"table-of-contents\">\n    <p class=\"title\">Przejd\u017a do: <\/p>\n    <ol>\n                    <li><a href=\"#Automatyzacja-test\u00f3w:-jakie-mamy-opcje?-Java-i-Python\">1.  Automatyzacja test\u00f3w: jakie mamy opcje? Java i Python  <\/a><\/li>\n                    <li><a href=\"#J\u0119zyk-programowania-czy-j\u0119zyk-skryptowy?\">2.  J\u0119zyk programowania czy j\u0119zyk skryptowy? <\/a><\/li>\n                    <li><a href=\"#Czego-\u0142atwiej-si\u0119-nauczy\u0107:-Javy-czy-Pythona?u002du002d\">3.  Czego \u0142atwiej si\u0119 nauczy\u0107: Javy czy Pythona?  <\/a><\/li>\n                    <li><a href=\"#Automatyzacja-test\u00f3w-\u2013-jakie-s\u0105-opcje?-\">4.  Automatyzacja test\u00f3w \u2013 jakie s\u0105 opcje? <\/a><\/li>\n                    <li><a href=\"#Czym-jest-Selenium-WebDriver?-\">5.  Czym jest Selenium WebDriver? <\/a><\/li>\n                    <li><a href=\"#Selenium-i-Python-\">6.  Selenium i Python <\/a><\/li>\n                    <li><a href=\"#Selenium-i-Java-\">7.  Selenium i Java <\/a><\/li>\n                    <li><a href=\"#Kt\u00f3ra-opcja-jest-lepsza-dla-test\u00f3w-automatycznych-(Selenium-z-Pythonem-czy-Selenium-z-Jav\u0105)?u002du002d\">8.  Kt\u00f3ra opcja jest lepsza dla test\u00f3w automatycznych (Selenium z Pythonem czy Selenium z Jav\u0105)?  <\/a><\/li>\n                    <li><a href=\"#Jak-wykona\u0107-skrypt-Selenium-w-Pythonie?-\">9.  Jak wykona\u0107 skrypt Selenium w Pythonie? <\/a><\/li>\n                    <li><a href=\"#Jak-zainstalowa\u0107-Selenium-z-PIP?-\">10.  Jak zainstalowa\u0107 Selenium z PIP? <\/a><\/li>\n                    <li><a href=\"#Automatyzacja-test\u00f3w-\u2013-podsumowanieu002du002d\">11.  Automatyzacja test\u00f3w \u2013 podsumowanie  <\/a><\/li>\n                    <li><a href=\"#FAQ-Starting-points-for-Selenium-with-Java-or-Python-\">12.  FAQ<\/a><\/li>\n            <\/ol>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Automatyzacja-test\u00f3w:-jakie-mamy-opcje?-Java-i-Python\">Automatyzacja test\u00f3w: jakie mamy opcje? Java i Python<\/h2>\n\n\n\n<p>Ka\u017cdy z tych j\u0119zyk\u00f3w ma ugruntowan\u0105 pozycj\u0119, jest niezale\u017cny od platformy, zorientowany obiektowo i posiada du\u017c\u0105, wspieraj\u0105c\u0105 spo\u0142eczno\u015b\u0107 u\u017cytkownik\u00f3w. Je\u015bli chodzi o wyb\u00f3r powi\u0105za\u0144 (ang. bindings) j\u0119zyka Selenium dla Javy i Pythona, powiniene\u015b najpierw zrozumie\u0107 kilka kluczowych r\u00f3\u017cnic pomi\u0119dzy nimi.<\/p>\n\n\n\n<p>Selenium obs\u0142uguje szerok\u0105 gam\u0119 j\u0119zyk\u00f3w programowania do automatyzacji test\u00f3w. W tym kontek\u015bcie Java i Python s\u0105 najlepszymi kandydatami (i konkurentami) do po\u0142\u0105czenia z Selenium.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"J\u0119zyk-programowania-czy-j\u0119zyk-skryptowy?\">J\u0119zyk programowania czy j\u0119zyk skryptowy?<\/h2>\n\n\n\n<p>Jednym z g\u0142\u00f3wnych pyta\u0144, kt\u00f3re mog\u0105 przyj\u015b\u0107 ci do g\u0142owy, por\u00f3wnuj\u0105c Jav\u0119 i Pythona, mo\u017ce by\u0107: \u201eCzy Python i Java to j\u0119zyki programowania, czy j\u0119zyki skryptowe?\u201d.<\/p>\n\n\n\n<p>Zasadniczo wszystkie j\u0119zyki skryptowe s\u0105 uwa\u017cane za j\u0119zyki programowania. G\u0142\u00f3wn\u0105 r\u00f3\u017cnic\u0105 mi\u0119dzy nimi jest to, \u017ce j\u0119zyki programowania s\u0105 <strong>kompilowane<\/strong>, podczas gdy j\u0119zyki skryptowe s\u0105 interpretowane. J\u0119zyki skryptowe s\u0105 wolniejsze ni\u017c j\u0119zyki programowania i pozostaj\u0105 zazwyczaj za nimi w tyle.<\/p>\n\n\n\n<p>Szybkie por\u00f3wnanie znajdziesz tutaj: <a href=\"https:\/\/itvoyagers.in\/interpreter-vs-compiler\/\" target=\"_blank\" data-type=\"URL\" data-id=\"https:\/\/itvoyagers.in\/interpreter-vs-compiler\/\" rel=\"noreferrer noopener\">Interpreter vs compiler<\/a><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Python<\/h4>\n\n\n\n<p>Python mo\u017cna nazwa\u0107 zar\u00f3wno j\u0119zykiem skryptowym, jak i j\u0119zykiem programowania, poniewa\u017c <strong>dzia\u0142a zar\u00f3wno jako kompilator, jak i interpreter.<\/strong> Standardowy Python mo\u017ce skompilowa\u0107 kod Pythona do kod\u00f3w bajtowych, a nast\u0119pnie zinterpretowa\u0107 go tak jak Java i C.<\/p>\n\n\n\n<p>\u201eJednak bior\u0105c pod uwag\u0119 historyczny zwi\u0105zek mi\u0119dzy j\u0119zykiem programowania og\u00f3lnego przeznaczenia a j\u0119zykiem skryptowym, bardziej w\u0142a\u015bciwe by\u0142oby stwierdzenie, \u017ce Python jest j\u0119zykiem programowania, kt\u00f3ry dobrze dzia\u0142a r\u00f3wnie\u017c jako j\u0119zyk skryptowy\u201d.<\/p>\n\n\n\n<p><strong>Interpreter <\/strong>to warstwa oprogramowania, kt\u00f3ra dzia\u0142a jako pomost mi\u0119dzy programem a sprz\u0119tem systemowym, aby utrzyma\u0107 dzia\u0142anie kodu. Interpreter Pythona to aplikacja odpowiedzialna za uruchamianie skrypt\u00f3w Pythona.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/blog_2023.07.12_graphic_1.png\" alt=\"Selenium Python\" class=\"wp-image-10920\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Java&nbsp;<\/h4>\n\n\n\n<p>Java jest na og\u00f3\u0142 szybsza i bardziej wydajna ni\u017c Python, poniewa\u017c jest j\u0119zykiem <strong>skompilowanym<\/strong>. Jako j\u0119zyk interpretowany, Python z kolei ma prostsz\u0105, bardziej zwi\u0119z\u0142\u0105 sk\u0142adni\u0119. Mo\u017ce pe\u0142ni\u0107 t\u0119 sam\u0105 funkcj\u0119 co Java, przy u\u017cyciu mniejszej liczby linijek kodu. W Javie typy danych zmiennych powinny by\u0107 zadeklarowane przed ich u\u017cyciem, w przeciwie\u0144stwie do Pythona. Zdecyduj, co bardziej ci odpowiada.&nbsp;<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/blog_2023.07.12_graphic_2.png\" alt=\"Java Python\" class=\"wp-image-10922\" style=\"width:766px;height:402px\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Czego-\u0142atwiej-si\u0119-nauczy\u0107:-Javy-czy-Pythona?--\">Czego \u0142atwiej si\u0119 nauczy\u0107: Javy czy Pythona?&nbsp;&nbsp;<\/h2>\n\n\n\n<p>Kolejne pytanie, kt\u00f3re mo\u017ce si\u0119 zrodzi\u0107 (zw\u0142aszcza gdy dopiero zaczynasz przygod\u0119 z programowaniem) brzmi: jak szybko mog\u0119 nauczy\u0107 si\u0119 Javy vs. Pythona?&nbsp;<\/p>\n\n\n\n<p>Tu nie ma w\u0105tpliwo\u015bci: Python jest zwyci\u0119zc\u0105. Jak wspomnia\u0142em, jego sk\u0142adnia jest kr\u00f3tsza i prostsza. Prototypowanie w Javie jest bardziej z\u0142o\u017cone \u2013 przyk\u0142adowo, obci\u0105\u017ca kod dodatkowymi deklaracjami i ograniczeniami. Wybierz Pythona, je\u015bli nie masz wiele czasu na nauk\u0119.&nbsp;<\/p>\n\n\n\n<p>Oto lista kluczowych czynnik\u00f3w, kt\u00f3re trzeba wzi\u0105\u0107 pod uwag\u0119 przed podj\u0119ciem decyzji:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Oferty pracy: <\/strong>wci\u0105\u017c wi\u0119cej ofert pracy jest w Javie&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Zmiana pracy \/ migracja: <\/strong>dzi\u0119ki skryptowaniu, \u0142atwiej jest w przypadku Pythona, je\u015bli np. my\u015blisz o kulturze DevOps&nbsp;&nbsp;<\/li>\n\n\n\n<li><strong>Programowanie zorientowane obiektowo:<\/strong> zar\u00f3wno Python, jak i Java polegaj\u0105 na programowaniu obiektowym, wi\u0119c znajomo\u015b\u0107 jednego z tych j\u0119zyk\u00f3w stanowi dobry punkt wyj\u015bcia do nauki drugiego&nbsp;<\/li>\n\n\n\n<li><strong>Niezale\u017cne od platformy:<\/strong> zar\u00f3wno binaria Pythona, jak i Javy (kody bajtowe) po wygenerowaniu mog\u0105 by\u0107 wykonywane na dowolnych obs\u0142ugiwanych platformach dzi\u0119ki w\u0142asnym maszynom wirtualnym (odpowiednio PVM i JVM)&nbsp;<\/li>\n\n\n\n<li><strong>Prostota:<\/strong> Python jest \u0142atwiejszy w u\u017cyciu dzi\u0119ki prostszej sk\u0142adni&nbsp;&nbsp;<\/li>\n\n\n\n<li><strong>Wykonanie: <\/strong>jako reprezentacja j\u0119zyka skryptowego Python ma mo\u017cliwo\u015b\u0107 bezpo\u015bredniego uruchamiania kodu skryptu za pomoc\u0105 <a href=\"https:\/\/docs.python.org\/3\/tutorial\/interpreter.html\" target=\"_blank\" rel=\"noreferrer noopener\">interpretera<\/a> zamiast bezpo\u015bredniego uruchamiania kompilatora (np. Javac dla Java)&nbsp;<\/li>\n\n\n\n<li><strong>Wydajno\u015b\u0107 \/ szybko\u015b\u0107 wykonania: <\/strong>Java ma tu przewag\u0119, poniewa\u017c jest szybsza (mo\u017cna skompilowa\u0107 j\u0105 JIT, aby by\u0142a bardziej wydajna)&nbsp;<\/li>\n\n\n\n<li><strong>Popularno\u015b\u0107 \/ wsparcie: <\/strong>Java wygrywa w tym zestawieniu jako popularne rozwi\u0105zanie, kt\u00f3re ma bardzo du\u017c\u0105 i wspieraj\u0105c\u0105 spo\u0142eczno\u015b\u0107 programist\u00f3w&nbsp;<\/li>\n\n\n\n<li><strong>Python jest j\u0119zykiem statycznie typowanym<\/strong> (sprawdza typ w czasie wykonywania, co oznacza, \u017ce tw\u00f3j kod mo\u017ce w ostatniej chwili zawie\u015b\u0107)&nbsp;<\/li>\n\n\n\n<li><strong>Java jest j\u0119zykiem dynamicznie typowanym<\/strong> (sprawdza typ w czasie kompilacji, co oznacza, \u017ce wychwytujesz problemy w swoim kodzie wcze\u015bniej w procesie tworzenia oprogramowania)&nbsp;<\/li>\n\n\n\n<li><strong>Rozszerzalno\u015b\u0107<\/strong>: poniewa\u017c Java jest bardziej popularna, na rynku jest dost\u0119pne wi\u0119cej wtyczek, interfejs\u00f3w API, framework\u00f3w i bibliotek ni\u017c w przypadku Pythona&nbsp;<\/li>\n<\/ul>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Automatyzacja-test\u00f3w-\u2013-jakie-s\u0105-opcje?-\">Automatyzacja test\u00f3w \u2013 jakie s\u0105 opcje?&nbsp;<\/h2>\n\n\n\n<p>Selenium zaspokaja okre\u015blon\u0105 potrzeb\u0119 w \u015bwiecie automatyzacji test\u00f3w. Jest tylko dla przegl\u0105darek. Je\u015bli chcesz szybko rozpocz\u0105\u0107 automatyzacj\u0119 swoich przypadk\u00f3w testowych, zaprzyja\u017anij si\u0119 z <a href=\"https:\/\/www.selenium.dev\/selenium-ide\" target=\"_blank\" rel=\"noreferrer noopener\">Selenium IDE<\/a>. Pozwala ono szybko i \u0142atwo rozpocz\u0105\u0107 automatyzacj\u0119 test\u00f3w dzi\u0119ki opcji nagrywania.&nbsp;<\/p>\n\n\n\n<p>Kroki testowe wykonywane w przegl\u0105darce s\u0105 bezpo\u015brednio przekszta\u0142cane w zestaw polece\u0144 dzi\u0119ki <a href=\"https:\/\/www.tutorialspoint.com\/what-is-selenese\" target=\"_blank\" data-type=\"URL\" data-id=\"https:\/\/www.tutorialspoint.com\/what-is-selenese\" rel=\"noreferrer noopener\">Selenese <\/a>(to wbudowany j\u0119zyk Selenium IDE). To bardzo u\u0142atwia zadanie. Ponadto, po zapisaniu test\u00f3w w zestawie <a href=\"https:\/\/www.javatpoint.com\/selenium-ide-commands\" target=\"_blank\" rel=\"noreferrer noopener\">polece\u0144 Selenese<\/a>, mo\u017cna je agregowa\u0107 w pakiety testowe i ostatecznie eksportowa\u0107 do preferowanych powi\u0105za\u0144 Selenium (np.: Java, Python itp.).&nbsp;<\/p>\n\n\n\n<p><strong>Selenese i Selenium IDE<\/strong> to dobry pocz\u0105tek, ale im bardziej b\u0119dziesz si\u0119 zag\u0142\u0119bia\u0107 w temat automatyzacji aplikacji internetowych, tym wyra\u017aniej dostrze\u017cesz ich ograniczenia.&nbsp;<\/p>\n\n\n\n<p>Aby solidnie przetestowa\u0107 nowoczesn\u0105 aplikacj\u0119 internetow\u0105 z jej dynamicznie zmieniaj\u0105c\u0105 si\u0119 tre\u015bci\u0105 (np. przy u\u017cyciu technologii <strong>AJAX czy JS<\/strong>), zaczniesz szuka\u0107 bardziej zaawansowanych opcji. Tutaj z pomoc\u0105 przychodzi&nbsp; <strong>Selenium WebDriver<\/strong> wraz z powi\u0105zaniami j\u0119zykowymi Selenium. Selenium WebDriver jest cz\u0119sto u\u017cywany jako baza do testowania aplikacji internetowych.&nbsp;&nbsp;<\/p>\n\n\n\n<p><strong>Zgodnie z sylabusem A4Q Selenium 4 Tester:&nbsp;<\/strong><\/p>\n\n\n\n<p>\u201eSelenium, gdy jest u\u017cywane do testowania aplikacji internetowych, potrzebuje pewnych framework\u00f3w testowych. Silnik Selenium, jako samodzielne narz\u0119dzie, wystawia TAE tylko swoje natywne API jako metody lub funkcje. In\u017cynier automatyzacji test\u00f3w musi nast\u0119pnie zaprogramowa\u0107 \u015brodowisko testowe, aby u\u017cy\u0107 tych interfejs\u00f3w API do przeprowadzenia wymaganych test\u00f3w. Framework testowy mo\u017cna opracowa\u0107 od podstaw lub&nbsp; wykorzysta\u0107 ju\u017c istniej\u0105ce. <strong>Selenium obs\u0142uguje wiele framework\u00f3w testowych w r\u00f3\u017cnych j\u0119zykach, np.:&nbsp;<\/strong>&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>dla Javy: <a href=\"https:\/\/selenide.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Selenide<\/a>&nbsp;&nbsp;<\/li>\n\n\n\n<li>dla Pythona: <a href=\"https:\/\/pypi.org\/project\/selene\/\" target=\"_blank\" rel=\"noreferrer noopener\">Selene<\/a>&nbsp;&nbsp;<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p>Niezale\u017cnie od tego, czy korzystasz z w\u0142asnych framework\u00f3w, czy nie, musisz w jaki\u015b spos\u00f3b sterowa\u0107 wykonywaniem test\u00f3w. Wielu in\u017cynier\u00f3w korzysta z bibliotek test\u00f3w jednostkowych do prowadzenia swoich test\u00f3w (test runner\u00f3w).&nbsp;<\/p>\n\n\n\n<p>Niekt\u00f3re z nich, takie jak <a href=\"https:\/\/testng.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">TestNG<\/a> lub <a href=\"https:\/\/docs.pytest.org\/\" target=\"_blank\" rel=\"noopener\">Pytest<\/a>, opr\u00f3cz podstawowego zastosowania w testach jednostkowych pozwalaj\u0105 tworzy\u0107 testy funkcjonalne wy\u017cszego poziomu&nbsp; (funkcjonalne, komponentowe, integracyjne, end-to-end itp.).&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Dla Pythona&nbsp;<\/h4>\n\n\n\n<p>Najprostszym przypadkiem jest u\u017cycie standardowej biblioteki test\u00f3w jednostkowych Pythona. Alternatywnie mo\u017cesz u\u017cy\u0107 bardzo popularnego <a href=\"https:\/\/docs.pytest.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Pytest.<\/a>&nbsp;&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Dla Javy&nbsp;<\/h4>\n\n\n\n<p>Mo\u017cesz u\u017cy\u0107 bibliotek xUnit (np. JUnit 4\/5) lub <a href=\"https:\/\/www.bugraptors.com\/blog\/junit-vs-testng\" target=\"_blank\" rel=\"noreferrer noopener\">TestNG<\/a>.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Po zaznajomieniu si\u0119 z uruchamianiem test\u00f3w lokalnie za pomoc\u0105 wybranej przegl\u0105darki mo\u017cesz zrobi\u0107 krok naprz\u00f3d i skonfigurowa\u0107 <a href=\"https:\/\/www.selenium.dev\/documentation\/grid\/\" target=\"_blank\" rel=\"noreferrer noopener\">siatk\u0119<\/a> przegl\u0105darek do zdalnego uruchamiania test\u00f3w.&nbsp;&nbsp;<\/p>\n\n\n\n<p>W ten spos\u00f3b testy mo\u017cna uruchamia\u0107 na r\u00f3\u017cnych przegl\u0105darkach i kilku systemach operacyjnych na wielu komputerach w trybie r\u00f3wnoleg\u0142ym. Je\u015bli masz spor\u0105 konfiguracj\u0119, mo\u017cesz przeprowadzi\u0107 testy regresji w kr\u00f3tkim czasie (w por\u00f3wnaniu z czasem bez <a href=\"https:\/\/www.selenium.dev\/documentation\/overview\/components\/\" target=\"_blank\" rel=\"noreferrer noopener\">Selenium<\/a> Grid).&nbsp;<\/p>\n\n\n\n<p>Nast\u0119pnie mo\u017cesz i\u015b\u0107 o jeszcze jeden krok dalej i zintegrowa\u0107 swoje testy z CI\/CD pipeline (np.: uruchomi\u0107 <a href=\"https:\/\/qaautomation.expert\/2022\/04\/12\/run-selenium-tests-in-gitlab-ci-cd\/\" target=\"_blank\" rel=\"noreferrer noopener\">Selenium Tests w GitLab CI\/CD<\/a> lub Jenkins).&nbsp;<\/p>\n\n\n\n<p>Pami\u0119taj, \u017ce masz mo\u017cliwo\u015b\u0107 skorzystania z dobrodziejstw konteneryzacji, np. Dockera, aby utworzy\u0107 r\u00f3\u017cne obrazy do automatycznych test\u00f3w interfejsu u\u017cytkownika.&nbsp;<\/p>\n\n\n\n<p>W ten spos\u00f3b mo\u017cesz przygotowa\u0107 oddzieln\u0105 maszyn\u0119 wirtualn\u0105 dla dowolnej kombinacji \u015brodowiska systemu operacyjnego \/ przegl\u0105darki dla <a href=\"https:\/\/en.wikipedia.org\/wiki\/System_under_test\" target=\"_blank\" rel=\"noreferrer noopener\">SUT<\/a> (System Under Test) \/ AUT (Application Under Test).&nbsp;<\/p>\n\n\n\n<p>CI\/CD odgrywa kluczow\u0105 rol\u0119 w tworzeniu cykli \u017cycia oprogramowania, w kt\u00f3rych nowe funkcje s\u0105 ci\u0105gle aktualizowane maksymalnie szybko i wydajnie. Dzi\u0119ki temu u\u017cytkownicy ko\u0144cowi maj\u0105 dost\u0119p do nowych funkcji bez konieczno\u015bci pobierania aktualizacji oprogramowania, co zapewnia im bezproblemow\u0105 obs\u0142ug\u0119.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Bior\u0105c pod uwag\u0119 kr\u00f3tki czas trwania cyklu wydawania oprogramowania, testy musz\u0105 by\u0107 skalowane, aby dostarczane oprogramowanie by\u0142o wolne od b\u0142\u0119d\u00f3w we wspomnianym przedziale czasowym. W tym miejscu Selenium odgrywa kluczow\u0105 rol\u0119, umo\u017cliwiaj\u0105c automatyzacj\u0119 test\u00f3w w CI\/CD pipeline.&nbsp;<\/p>\n\n\n\n<p>Dzi\u0119ki automatyzacji z Selenium mo\u017cna wykonywa\u0107 testy r\u00f3wnoleg\u0142e w wymaganej skali, a <a href=\"https:\/\/github.com\/SeleniumHQ\/docker-selenium\" target=\"_blank\" rel=\"noreferrer noopener\">Dockerem<\/a>, z pomoc\u0105 kontener\u00f3w, pomaga to utrzyma\u0107 \u015brodowisko testowe w dobrym stanie.&nbsp;&nbsp;<\/p>\n\n\n\n<p><strong>Przeczytaj tak\u017ce<\/strong>: <strong><a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/uat-user-acceptance-testing\/\" target=\"_blank\" data-type=\"URL\" data-id=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/uat-user-acceptance-testing\/\" rel=\"noreferrer noopener\">Testy akceptacyjne u\u017cytkownika (UAT) \u2013 dlaczego s\u0105&nbsp;wa\u017cne?&nbsp;<\/a><\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Czym-jest-Selenium-WebDriver?-\">Czym jest Selenium WebDriver?&nbsp;<\/h2>\n\n\n\n<p>Najbardziej wyczerpuj\u0105cym \u017ar\u00f3d\u0142em wiedzy w tym temacie jest <a href=\"https:\/\/www.selenium.dev\/documentation\/webdriver\/\" target=\"_blank\" rel=\"noreferrer noopener\">strona Selenium WebDriver<\/a>:&nbsp;&nbsp;<\/p>\n\n\n\n<p>\u201eSelenium WebDriver odnosi si\u0119 zar\u00f3wno do powi\u0105za\u0144 j\u0119zykowych, jak i implementacji kodu steruj\u0105cego danej przegl\u0105darki. Powszechnie u\u017cywa si\u0119 po prostu okre\u015blenia <strong>WebDriver<\/strong>\u201d.&nbsp;<\/p>\n\n\n\n<p>lub cytuj\u0105c sylabus A4Q:&nbsp;&nbsp;<\/p>\n\n\n\n<p>\u201eSelenium WebDriver, jak sama nazwa wskazuje, wsp\u00f3\u0142dzia\u0142a z przegl\u0105dark\u0105 w taki sam spos\u00f3b, jak zrobi\u0142by to prawdziwy u\u017cytkownik. WebDriver to kompleksowe narz\u0119dzie do kompilacji test\u00f3w dla aplikacji internetowych, kt\u00f3re jest r\u00f3wnie\u017c cz\u0119sto okre\u015blane jako<strong> Selenium WebDriver<\/strong>\u201d.&nbsp;<\/p>\n\n\n\n<p>Z architektonicznego punktu widzenia Selenium wszystkie komponenty s\u0105 odpowiednio zwizualizowane na oficjalnej <a href=\"https:\/\/www.selenium.dev\/documentation\/overview\/components\/\" target=\"_blank\" rel=\"noreferrer noopener\">stronie dokumentacji.<\/a>&nbsp;<\/p>\n\n\n\n<p>Mo\u017cna powiedzie\u0107, \u017ce WebDriver pomaga nam na\u015bladowa\u0107 interakcje u\u017cytkownika \/ przegl\u0105darki i dlatego jest tak pomocne w automatyzacji test\u00f3w. WebDriver kontroluje przegl\u0105dark\u0119 za pomoc\u0105 w\u0142a\u015bciwych dla niej sterownik\u00f3w, kt\u00f3re s\u0105 zwykle tworzone przez dostawc\u00f3w przegl\u0105darek (np. Google dla Chrome lub Mozilla dla Firefox).&nbsp;<\/p>\n\n\n\n<p>Ca\u0142a komunikacja jest dwukierunkowa i zgodna z nast\u0119puj\u0105cymi protoko\u0142ami:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>dla Selenium 3: <\/strong><a href=\"https:\/\/www.selenium.dev\/documentation\/legacy\/json_wire_protocol\/\" target=\"_blank\" rel=\"noreferrer noopener\">JSON Wire Protocol<\/a> prez HTTP (komunikacja t\u0142umaczona)&nbsp;<\/li>\n\n\n\n<li><strong>dla Selenium 4:<\/strong> <a href=\"https:\/\/w3c.github.io\/webdriver\/webdriver-spec.html\" target=\"_blank\" rel=\"noreferrer noopener\">W3C WebDriver Protocol<\/a> (komunikacja natywna). Zobacz wi\u0119cej na stronie <a href=\"https:\/\/www.w3.org\/TR\/webdriver\/\" target=\"_blank\" rel=\"noreferrer noopener\">W3C<\/a>&nbsp;<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p>Dzi\u0119ki protoko\u0142owi W3C wprowadzonemu w Selenium 4 mamy bezpo\u015bredni transfer informacji mi\u0119dzy klientem a serwerem. Tak wi\u0119c, je\u015bli nadal u\u017cywasz Selenium 3 (WebDriver) i wahasz si\u0119, czy zacz\u0105\u0107 korzysta\u0107 z wy\u017cszej wersji, koniecznie sprawd\u017a informacje na stronie: <a href=\"https:\/\/www.selenium.dev\/documentation\/webdriver\/getting_started\/upgrade_to_selenium_4\/\" target=\"_blank\" rel=\"noreferrer noopener\">Upgrade to Selenium 4.<\/a>&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>Minimalne wymagane wersje to<strong> Java w wersji 8 i Python w wersji 3.7<\/strong>&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Selenium-i-Python-\">Selenium i Python&nbsp;<\/h2>\n\n\n\n<p>Je\u015bli wybra\u0142e\u015b t\u0119 drog\u0119 i jeste\u015b pocz\u0105tkuj\u0105cy, wypr\u00f3buj Selenium IDE i wygeneruj sw\u00f3j kod Pythona za pomoc\u0105 funkcji eksportu.&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>Gdy b\u0119dziesz ju\u017c bardziej obeznany z Selenium IDE, przygotuj pe\u0142ne \u015brodowisko programistyczne do automatyzacji test\u00f3w Selenium \/ Python.&nbsp;<\/p>\n\n\n\n<p>Przygotuj:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>IDE (<a href=\"https:\/\/www.jetbrains.com\/pycharm\/\" target=\"_blank\" rel=\"noreferrer noopener\">PyCharm<\/a>, <a href=\"https:\/\/code.visualstudio.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Visual Studio Code<\/a> lub <a href=\"https:\/\/www.jetbrains.com\/aqua\/\" target=\"_blank\" rel=\"noreferrer noopener\">Aqua<\/a>)&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.python.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Python<\/a>&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/pypi.org\/project\/pip\/\" target=\"_blank\" rel=\"noreferrer noopener\">PIP<\/a> (Package Installer for Python)&nbsp;<\/li>\n\n\n\n<li>Narz\u0119dzie do budowania <a href=\"https:\/\/pipenv.pypa.io\/en\/latest\/\" target=\"_blank\" rel=\"noreferrer noopener\">Pipenv<\/a> ( PIP + <a href=\"https:\/\/docs.python.org\/3\/library\/venv.html\" target=\"_blank\" rel=\"noreferrer noopener\">Venv<\/a>\/<a href=\"https:\/\/virtualenv.pypa.io\/en\/stable\/\" target=\"_blank\" rel=\"noreferrer noopener\">Virtualenv<\/a>, <a href=\"https:\/\/python-poetry.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Poetry<\/a> lub <a href=\"https:\/\/bazel.build\/\" target=\"_blank\" rel=\"noreferrer noopener\">Bazel<\/a>)&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/pypi.org\/project\/selenium\/\" target=\"_blank\" rel=\"noreferrer noopener\">Powi\u0105zania Selenium z Pythonem<\/a>&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/www.selenium.dev\/documentation\/webdriver\/browsers\/\" target=\"_blank\" rel=\"noreferrer noopener\">Sterowniki przegl\u0105darek dla Selenium<\/a> (<a href=\"https:\/\/chromedriver.chromium.org\/downloads\" target=\"_blank\" rel=\"noreferrer noopener\">Chrome<\/a>, <a href=\"https:\/\/github.com\/mozilla\/geckodriver\/releases\" target=\"_blank\" rel=\"noreferrer noopener\">Firefox<\/a>, <a href=\"https:\/\/developer.apple.com\/documentation\/webkit\/about_webdriver_for_safari\" target=\"_blank\" rel=\"noreferrer noopener\">Safari<\/a>, <a href=\"https:\/\/github.com\/operasoftware\/operachromiumdriver\" target=\"_blank\" rel=\"noreferrer noopener\">Opera<\/a>, <a href=\"https:\/\/developer.microsoft.com\/en-us\/microsoft-edge\/tools\/webdriver\/\" target=\"_blank\" rel=\"noreferrer noopener\">Edge<\/a> or <a href=\"https:\/\/pypi.org\/project\/webdriver-manager\/\" target=\"_blank\" rel=\"noreferrer noopener\">webdriver-manager<\/a>\/<a href=\"https:\/\/www.selenium.dev\/blog\/2022\/introducing-selenium-manager\/\" target=\"_blank\" rel=\"noreferrer noopener\">SeleniumManager*<\/a>)<\/li>\n\n\n\n<li>Test Runner (<a href=\"https:\/\/docs.python.org\/3\/library\/unittest.html\" target=\"_blank\" rel=\"noreferrer noopener\">Unittest<\/a> lub <a href=\"https:\/\/docs.pytest.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Pytest<\/a>)&nbsp;<\/li>\n<\/ul>\n\n\n\n<p><br>*Selenium Manager jest dost\u0119pny od wersji 4.6 (Beta)<\/p>\n\n\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Selenium-i-Java-\">Selenium i Java&nbsp;<\/h2>\n\n\n\n<p>Je\u015bli wybra\u0142e\u015b t\u0119 opcj\u0119 i jeste\u015b pocz\u0105tkuj\u0105cy, wypr\u00f3buj wtyczk\u0119 <a href=\"https:\/\/www.selenium.dev\/selenium-ide\/\" target=\"_blank\" rel=\"noreferrer noopener\">Selenium IDE<\/a> dla Chrome lub Firefox i wygeneruj kod Java za pomoc\u0105 funkcji eksportu:&nbsp;<\/p>\n\n\n\n<p>Gdy ju\u017c nab\u0119dziesz do\u015bwiadczenia, przygotuj pe\u0142ne \u015brodowisko programistyczne do automatyzacji test\u00f3w Selenium \/ Java.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Przygotuj:&nbsp;<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>IDE (<a href=\"https:\/\/www.jetbrains.com\/idea\/\" target=\"_blank\" rel=\"noreferrer noopener\">IDEA<\/a>, <a href=\"https:\/\/code.visualstudio.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Visual Studio Code<\/a> lub <a href=\"https:\/\/www.jetbrains.com\/aqua\/\" target=\"_blank\" rel=\"noreferrer noopener\">Aqua<\/a>)&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/www.oracle.com\/java\/technologies\/downloads\/\" target=\"_blank\" rel=\"noreferrer noopener\">Java (JDK)<\/a>&nbsp;<\/li>\n\n\n\n<li>Narz\u0119dzie do budowania (<a href=\"https:\/\/maven.apache.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Maven<\/a> lub <a href=\"https:\/\/gradle.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Gradle<\/a>)&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/SeleniumHQ\/selenium\/releases\/\" target=\"_blank\" rel=\"noreferrer noopener\">Powi\u0105zania z Selenium w Javie<\/a>&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/www.selenium.dev\/documentation\/webdriver\/browsers\/\" target=\"_blank\" rel=\"noreferrer noopener\">Sterowniki przegl\u0105darek dla Selenium<\/a> (<a href=\"https:\/\/chromedriver.chromium.org\/downloads\" target=\"_blank\" rel=\"noreferrer noopener\">Chrome<\/a>, <a href=\"https:\/\/github.com\/mozilla\/geckodriver\/releases\" target=\"_blank\" rel=\"noreferrer noopener\">Firefox<\/a>, <a href=\"https:\/\/developer.apple.com\/documentation\/webkit\/about_webdriver_for_safari\" target=\"_blank\" rel=\"noreferrer noopener\">Safari<\/a>, <a href=\"https:\/\/github.com\/operasoftware\/operachromiumdriver\/releases\" target=\"_blank\" rel=\"noreferrer noopener\">Opera<\/a>, <a href=\"https:\/\/developer.microsoft.com\/en-us\/microsoft-edge\/tools\/webdriver\/\" target=\"_blank\" rel=\"noreferrer noopener\">Edge<\/a> or <a href=\"https:\/\/bonigarcia.dev\/webdrivermanager\/\" target=\"_blank\" rel=\"noreferrer noopener\">WebDriverManager<\/a>\/<a href=\"https:\/\/www.selenium.dev\/documentation\/selenium_manager\/\" target=\"_blank\" rel=\"noreferrer noopener\">SeleniumManager*<\/a>)&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Test Runner (<a href=\"https:\/\/junit.org\/junit4\" target=\"_blank\" rel=\"noopener\">JUNIT4<\/a> \/ <a href=\"https:\/\/junit.org\/junit5\/\" target=\"_blank\" rel=\"noopener\">JUNIT5<\/a> lub <a href=\"https:\/\/testng.org\/doc\/\" target=\"_blank\" rel=\"noreferrer noopener\">TestNG<\/a>)&nbsp;&nbsp;<\/li>\n<\/ul>\n\n\n\n<p><br>*Selenium Manager jest dost\u0119pny od wersji 4.6 (Beta)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Kt\u00f3ra-opcja-jest-lepsza-dla-test\u00f3w-automatycznych-(Selenium-z-Pythonem-czy-Selenium-z-Jav\u0105)?--\">Kt\u00f3ra opcja jest lepsza dla test\u00f3w automatycznych (Selenium z Pythonem czy Selenium z Jav\u0105)?&nbsp;&nbsp;<\/h2>\n\n\n\n<p>Je\u015bli jeste\u015b ca\u0142kowicie \u201ezielony\u201d i chcesz sprawdzi\u0107 mo\u017cliwo\u015bci programowania czy automatyzacji za pomoc\u0105 Selenium z Jav\u0105 lub Pythonem, proponuj\u0119, aby\u015b zacz\u0105\u0142 od skorzystania z <a href=\"https:\/\/www.selenium.dev\/selenium-ide\/\" target=\"_blank\" rel=\"noreferrer noopener\">Selenium IDE.<\/a>&nbsp;<\/p>\n\n\n\n<p>Selenium IDE jest dostarczany w formie dodatku do Chrome, Firefox i Edge (wersja 3.x). Umo\u017cliwia wygenerowanie kodu Javy \/ Pythona za pomoc\u0105 funkcji eksportu. To bardzo proste \u2013 zwyczajnie rejestrujesz swoje dzia\u0142ania w przegl\u0105darce. Kod jest nast\u0119pnie generowany za pomoc\u0105 funkcji eksportu do ulubionego j\u0119zyka. W momencie pisania tego artyku\u0142u (czerwiec 2023) mo\u017cliwe by\u0142o nawet pobranie samodzielnej wersji (<strong>4 alpha)<\/strong> Selenium IDE na kilka platform (np.: <strong>Windows<\/strong>, <strong>MacOS<\/strong>).&nbsp;<\/p>\n\n\n\n<p>Dowiedz si\u0119 wi\u0119cej o <a href=\"https:\/\/github.com\/SeleniumHQ\/selenium-ide\/releases\/\" target=\"_blank\" rel=\"noreferrer noopener\">najnowszych wersjach Selenium.<\/a>&nbsp;<\/p>\n\n\n\n<p>Z punktu widzenia automatyzacji, a zw\u0142aszcza integracji CI\/CD, wygl\u0105da na to, \u017ce lepiej sprawdzi si\u0119 tu duet Selenium i Java. Dobrze wpisuje si\u0119 w powy\u017cszy proces \u2013 zazwyczaj natywnie i \u0142atwo dzi\u0119ki bardzo dobrej integracji z narz\u0119dziami takimi jak<strong> Jenkins \/ Maven \/ Gradle.<\/strong>&nbsp;<\/p>\n\n\n\n<p>Nie oznacza to jednak, \u017ce nie mo\u017cna tego osi\u0105gn\u0105\u0107 za pomoc\u0105 Pythona. B\u0119dzie to co prawda bardziej m\u0119cz\u0105ce i wymaga u\u017cycia niekt\u00f3rych wtyczek. Ale przypomnijmy: <strong>Python oznacza \u0142atwe programowanie i wi\u0119ksz\u0105 czytelno\u015b\u0107. <\/strong>Je\u015bli wi\u0119c nie masz \u017cadnego zaplecza programistycznego w obszarze Javy i Pythona, mo\u017ce kusi\u0107 ci\u0119 wykorzystanie drugiego z tych j\u0119zyk\u00f3w.&nbsp;<\/p>\n\n\n\n<p><p>Jednym z wa\u017cnych punkt\u00f3w w procesie rozwoju automatyzacji test\u00f3w w Selenium jest debugowanie test\u00f3w. Wiele przegl\u0105darek udost\u0119pnia \u201e<strong>DevTools<\/strong>\u201d \u2013 zestaw narz\u0119dzi zintegrowanych z przegl\u0105dark\u0105, kt\u00f3rych programi\u015bci mog\u0105 u\u017cywa\u0107 do debugowania aplikacji internetowych i sprawdzania wydajno\u015bci swoich stron.&nbsp;<\/p>\n<!----><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Testy akceptacyjne (UAT) pojawiaj\u0105 si\u0119 na ko\u0144cu procesu wytwarzania oprogramowania i stanowi\u0105 wa\u017cn\u0105 jego cz\u0119\u015b\u0107. Z tego artyku\u0142u dowiesz si\u0119, jaki jest przyk\u0142adowy proces test\u00f3w akceptacyjnych, jakie s\u0105 rodzaje test\u00f3w akceptacyjnych i dlaczego warto oprze\u0107 si\u0119 pokusie pomini\u0119cia tego typu test\u00f3w w projekcie.<\/p>\n","protected":false},"author":148,"featured_media":30335,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"iawp_total_views":85,"footnotes":""},"categories":[1,582],"tags":[562],"offering":[522],"class_list":["post-30333","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artykuly","category-technologie","tag-qa","offering-tech-blog"],"acf":[],"_links":{"self":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/30333","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/users\/148"}],"replies":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/comments?post=30333"}],"version-history":[{"count":3,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/30333\/revisions"}],"predecessor-version":[{"id":33806,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/30333\/revisions\/33806"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media\/30335"}],"wp:attachment":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media?parent=30333"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/categories?post=30333"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/tags?post=30333"},{"taxonomy":"offering","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/offering?post=30333"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}