hudson continuous integration tool tutorial selenium tutorial 25
W ostatnich dwóch samouczkach z serii Selenium omówiliśmy dwa najważniejsze narzędzia do kompilacji - MRÓWKA i Maven . Omówiliśmy ich znaczenie i znaczenie praktyczne.
W naszym poprzednim samouczku z serii DevOps dowiedzieliśmy się o Integracja Jenkins z Selenium .
W aktualnej Samouczek szkoleniowy online dotyczący selenu , omówilibyśmy plik narzędzie ciągłej integracji znane jako Hudson .
Przeczytaj w całości => Przykładowy przewodnik po DevOps
Uwaga: Ten samouczek jest częścią serii samouczków Selenium oraz DevOps. Kliknij odpowiednie łącza, aby przejść do odpowiedniej serii.
Zbadalibyśmy jego znaczenie i korzyści, z których czerpiemy dowolne narzędzie ciągłej integracji . Przyjrzelibyśmy się Hudsonowi od samego początku, od instalacji do zaawansowanych ustawień.
Czego się nauczysz:
- Ciągła integracja
- Hudson - narzędzie ciągłej integracji
- Instalacja Hudsona
- Konfiguracja Hudsona
- Konfiguracja powiadomień e-mail
- Tworzenie projektu Hudson
- Konfigurowanie projektu Hudson
- Konfigurowanie zarządzania kodami źródłowymi
- Wybieranie wyzwalaczy kompilacji
- Wywoływanie kroków kompilacji
- Konfigurowanie działań po kompilacji
- Wniosek
- rekomendowane lektury
Ciągła integracja
Wiele razy kończymy pracę nad projektem, w którym duża grupa programistów i testerów pracuje razem nad różnymi modułami. Programiści i testerzy pracują nad swoimi modułami, tworząc w ten sposób pliki wykonywalne. Te produkty pracy są następnie integrowane w regularnych odstępach czasu. Dlatego za każdym razem, gdy tworzymy kod programistyczny, należy go zintegrować, przetestować i zbudować, aby mieć pewność, że opracowany kod nie łamie się, nie wprowadza błędów lub defektów.
Ten proces tworzenia i testowania zintegrowanych prac programistycznych w regularnych odstępach czasu jest znany jako Ciągła integracja (CI) . Continuous Integration umożliwia identyfikację i naprawę usterek lub błędów tak szybko, jak to możliwe w cyklu rozwojowym, tj. Bliżej czasu, w którym zostały wprowadzone.
System Continuous Integration buduje i testuje aplikację, gdy tylko nowy / zmieniony kod zostanie zatwierdzony do akronimu systemu zarządzania kontrolą źródła jako SCM. Dzięki swoim ogromnym korzyściom i wpływowi na branże, stała się integralną częścią cyklu życia oprogramowania i jest obowiązkowo praktykowana.
Hudson - narzędzie ciągłej integracji
Ciągła integracja może być wykonywana automatycznie. Hudson to jedno z powszechnie znanych narzędzi do wykonywania Continuous Integration. Hudson to oparte na Javie narzędzie do ciągłej integracji. Jak każde inne narzędzie Continuous Integration, Hudson zapewnia zespołom uruchamianie kompilacji i testów przy każdej zmianie w systemie zarządzania kontrolą źródła.
Hudson obsługuje szeroką gamę narzędzi i wtyczek.
Hudson:
- Obsługuje narzędzia SCM, takie jak CVS, Subversion (SVN), Git itp.
- Potrafi budować projekty oparte na ANT, projekty oparte na Maven itp.
- Potrafi wykonywać skrypty powłoki i polecenia wsadowe systemu Windows
- Jest w stanie wysyłać raporty, powiadomienia itp. Przez e-mail, SMS, Skype itp.
Instalacja Hudsona
Wymagania wstępne
Aby móc korzystać z Hudson, musimy mieć następujące rzeczy na miejscu, zanim zaczniemy:
- Repozytorium kodów źródłowych (SVN / Git / CVS itp.)
- Skrypt budowania (Ant / Maven itp.)
Instalacja
Hudson można łatwo zainstalować w różnych środowiskach. Hudson można zainstalować zarówno na komputerze z systemem Linux, jak i na komputerze z systemem Windows. Jest również dystrybuowany jako pakiet specyficzny dla typu systemu operacyjnego dla różnych wersji Linuksa, co sprawia, że instalacja zajmuje kilka minut. Hudson może działać jako samodzielna aplikacja lub w ramach kontenera serwletów. W tym samouczku wyjaśnimy instalację Hudsona na komputerze z systemem Windows. Istnieją dwa różne podejścia do instalacji Hudson.
- Korzystanie z pliku WAR
- Korzystanie z pakietu natywnego
Pakiety natywne są dostępne dla Ubuntu / Debian, Oracle Linux, Redhat / Fedora / CentOS i openSUSE.
W tym samouczku omówimy instalację przy użyciu pliku WAR. Omówmy krok po kroku cały proces.
Krok 1 : Pobierz plik Hudson WAR z oficjalnej witryny firmy Hudson - „ http://hudson-ci.org/ ”. Zachowaj plik wojenny w żądanej lokalizacji w lokalnym systemie plików. Ten plik WAR można uruchomić bezpośrednio z wiersza poleceń lub można go użyć w kontenerze serwletów. WAR jest plikiem wykonywalnym, który ma wbudowany kontener serwletu.
Krok 2 : Następnym krokiem jest zainicjowanie internetowego interfejsu użytkownika firmy Hudson. W tym celu musimy otworzyć wiersz polecenia i przejść do folderu, w którym przechowywana jest wojna Hudson.
- Wpisz java -jar hudson-3.0.1.war –httpPort = 8099
Powyższe polecenie pokazałoby, że konfiguracja początkowa jest wymagana w Hudson Dashboard. Zobacz poniższy ekran.
(Kliknij, aby powiększyć obraz)
Uwaga: Zaleca się uruchomienie Hudson jako usługi na komputerze z systemem Windows lub Linux.
Krok 3 : Aby mieć dostęp do okna Hudson, otwórz przeglądarkę i uruchom Hudson.
- Wpisz „http: // localhost: 8099 /” - otworzy się okno Hudson.
(Kliknij, aby powiększyć obraz)
Krok 4 : Wybierz żądane wtyczki i kliknij przycisk Zakończ. Prosimy o cierpliwość, ponieważ instalacja wszystkich wtyczek może zająć kilka minut.
Uwaga : Dostępnych jest kilka opcji obsługi SCM. Zaznacz opcję SCM, której chcesz użyć.
Po zainstalowaniu wszystkich wtyczek użytkownik może przeglądać Hudson Dashboard.
Konfiguracja Hudsona
Teraz, gdy Hudson Dashboard jest gotowy, następnym krokiem jest skonfigurowanie Hudson. Omówmy ponownie cały proces w krokach:
Krok 1 : Aby skonfigurować Hudson, kliknij łącze „Manage Hudson” wyświetlane w lewym menu.
Krok 2 : Kliknij łącze „Konfiguruj system” w następnym kroku. Zobacz poniższy zrzut ekranu.
Krok 3 : Jak tylko klikniesz na link Konfiguruj system, powinno być wiele sekcji dla parametrów połączenia. Dodaj wpis do JDK, jak pokazano na poniższym rysunku. Użytkownik musi podać nazwę instalacji JDK i lokalizację, w której jest zainstalowana Java. Można dodać więcej niż jedną instancję Java.
Użytkownik może również zainstalować JDK automatycznie, zaznaczając pole wyboru „Zainstaluj automatycznie”.
Krok 4 : W następnym kroku dodaj wpis do Ant, jak pokazano na poniższym rysunku. Użytkownik musi podać nazwę instalacji Ant i lokalizację, w której Ant jest zainstalowany lokalnie.
Podobnie jak JDK i Ant, użytkownik może konfigurować inne parametry połączenia.
Uwaga : Zawsze pamiętaj, aby usunąć zaznaczenie pola wyboru „Instaluj automatycznie”. Pole wyboru powinno być zaznaczone w przypadku, gdy chcesz pobrać artefakt z Internetu.
Konfiguracja powiadomień e-mail
Sekcja powiadomień e-mail jest wyświetlana na końcu tej samej strony internetowej. Użytkownik musi skonfigurować następujące pola:
Kliknij przycisk zaawansowany, aby wyświetlić wszystkie opcje związane z powiadomieniem e-mail.
- Serwer SMTP: Serwer SMTP przechowuje informacje o serwerze SMTP, tj. Numer IP lub w pełni kwalifikowaną nazwę serwera. Dla celów demonstracyjnych w tym samouczku użyjemy serwera SMTP Gmaila.
- Domyślny sufiks adresu e-mail użytkownika : W tym polu można podać sufiks adresu e-mail, który może być uzupełniony nazwą użytkownika i może zostać użyty do wysłania powiadomienia e-mail.
- Adres e-mail administratora systemu : Adres e-mail administratora jest używany jako identyfikator e-mail nadawcy, z którego będą wysyłane wszystkie powiadomienia.
- Hudson URL : Jeśli prawdopodobne jest publikowanie raportów lub tworzenie informacji w powiadomieniu e-mail, należy podać adres URL firmy Hudson. Adres URL Hudson będzie używany do uzyskiwania dostępu do raportów. Należy podać prawidłowy adres URL, jednak jeśli wszystkie odbiorniki są podłączone do intranetu, można również podać adres IP komputera obsługującego Hudson.
- Użyj uwierzytelniania SMTP : Włączenie tej opcji powoduje, że nazwa użytkownika i hasło pojawiają się w celu uwierzytelnienia.
- Użyj SS L: Użytkownik może aktywować SSL, wybierając tę opcję, aby połączyć się z serwerem SMTP.
- Port SMTP: W tym polu użytkownik musi podać numer portu, który jest używany do komunikacji z serwerem poczty. Jeśli nie określono numerów portów, przypisywane są domyślne numery portów.
- Charset : To pole określa zestaw znaków używany do tworzenia wiadomości e-mail.
Jak już wspomnieliśmy, będziemy używać serwera poczty Gmail do wysyłania powiadomień e-mail w tym samouczku, zapoznaj się z poniższymi zrzutami ekranu i wprowadź niezbędne zmiany w sekcji Powiadomienia e-mail.
Kliknij przycisk Zapisz, aby zapisać wszystkie nowo wprowadzone zmiany.
Tworzenie projektu Hudson
Teraz, gdy zainstalowaliśmy i skonfigurowaliśmy Hudson na naszych maszynach, przejdziemy do przodu i stworzymy projekty Hudson. Podobnie jak w przypadku konfiguracji Hudson, mamy kilka opcji konfiguracji dla projektu Hudson. W tym samouczku chcielibyśmy rzucić światło na najbardziej przydatne i najczęściej używane opcje i rozszerzenia.
Aby utworzyć i skonfigurować nowy projekt Hudson, wykonaj następujące kroki:
Kliknij opcję „New Job” wyświetloną w lewym menu. Otworzy się następna strona, na której zostaną wyświetlone opcje związane z tworzeniem projektów i stylami projektów.
Istnieje wiele stylów, w których można stworzyć projekt / zadanie. Zwróć uwagę, że projekt i praca mogą być używane zamiennie, ponieważ oba mają zwykle to samo znaczenie.
- Zbuduj joystick w stylu darmowego oprogramowania b: Jest to najczęściej używana metoda tworzenia nowego zadania Hudson.
- Utwórz zadanie z wieloma konfiguracjami : Ten styl projektu służy do wykonywania różnorodnych zadań.
- Monitoruj zadanie zewnętrzne : Ten styl projektu monitoruje zadanie zewnętrzne.
- Skopiuj istniejące zadanie : W przypadku, gdy mamy projekt podobny do istniejącego projektu, ten styl może być pomocny. Wszystko, co musisz zrobić, to podać nazwę istniejącego zadania, a zostanie utworzona jego replika.
Jednak w tym samouczku stworzylibyśmy projekt freestyle Hudson. Wpisz nazwę pracy, którą chcesz utworzyć, i kliknij przycisk OK. Kliknięcie OK spowoduje przejście do strony konfiguracji oferty pracy, jak pokazano poniżej:
Konfigurowanie projektu Hudson
Kiedy już stworzyliśmy zadanie Hudson, czas je skonfigurować. Podobnie jak konfiguracja Hudson, Hudson Job ma również różne ustawienia konfiguracyjne. Omówmy tutaj te ważne.
Mówiąc konkretnie, istnieje sześć typów ustawień konfiguracji zadania:
- Ogólne ustawienia pracy : Ta sekcja umożliwia użytkownikowi podanie podstawowych informacji o zleceniu. Użytkownik może przesłać opis zadania, wyłączyć zadanie, sparametryzować zadanie, usunąć starsze kompilacje i wykonać więcej niż jedną kompilację dla tego samego zadania jednocześnie.
- Zaawansowane opcje pracy : Ta sekcja umożliwia użytkownikowi skonfigurowanie niektórych opcji zaawansowanych.
- Zarządzanie kodami źródłowymi : Sekcja umożliwia wprowadzenie ustawień związanych z systemem zarządzania kodami źródłowymi. Wybierz „Brak”, jeśli nie jest używany żaden moduł SCM. Zwróć uwagę, że użytkownik będzie mógł zobaczyć tylko te opcje SCM, których wtyczka została zainstalowana w czasie instalacji Hudson. Aby dodać więcej SCM do Hudson, użytkownik może odwiedzić stronę Zarządzaj wtyczkami i zainstalować wymagane wtyczki.
- Twórz wyzwalacze : Ta sekcja pozwala użytkownikowi zdecydować, jak zainicjować wykonanie kompilacji.
- Budować : Ta sekcja umożliwia użytkownikowi podanie ustawień mechanizmu kompilacji.
- Działania po kompilacji : Ta sekcja umożliwia użytkownikowi określenie ustawień czynności po kompilacji, które zostaną wykonane po zakończeniu kompilacji.
Zróbmy krok do przodu i skonfigurujmy zadanie z niezbędnymi ustawieniami. Użytkownik może pozostawić opcje w „Ogólnych ustawieniach zadania” i „Zaawansowane opcje pracy” w ich stanie domyślnym.
Konfigurowanie zarządzania kodami źródłowymi
Dużo mówiliśmy o tworzeniu projektu Hudson w powyższych sekcjach tego samouczka. Projekt Hudson jest zwykle używany z rzeczywistym projektem (kodem źródłowym), który jest powiązany z określonym systemem zarządzania kodem źródłowym. Jak wspomniano na początku tego samouczka, Hudson ma świetne wsparcie dla różnych SCM. Aby wymienić tylko kilka, Hudson obsługuje CVS, Git, SVN itd. Dlatego w tym samouczku skonfigurujemy Subversion (SVN) jako SCM.
Krok 1 : Wybierz opcję „Subversion”. Gdy tylko użytkownik wybierze Subversion, pojawią się następujące opcje.
Krok 2: Następnym krokiem jest podanie adresu URL repozytorium SVN. Ponieważ utworzyłem lokalne repozytorium, podałbym lokalny adres URL repozytorium. Lokalne repozytorium można utworzyć za pomocą Tortoise SVN.
.net C # pytania do wywiadu
Zachowaj wszystkie pozostałe ustawienia w tej sekcji jako domyślne.
Wybieranie wyzwalaczy kompilacji
Następnym krokiem jest skonfigurowanie wyzwalaczy kompilacji. Hudson umożliwia ustawienie wyzwalaczy, które automatycznie inicjują proces wykonywania kompilacji. Użytkownik może skonfigurować zadanie do automatycznego budowania, jeśli budowany jest inny projekt / zadanie. Alternatywnie, użytkownik może również ustawić okresowe wykonywanie kompilacji, tj. Zaplanować wykonanie kompilacji lub też zaplanować kompilację w celu wyszukania nowych zatwierdzeń w SCM i wyzwolenia wykonania, jeśli którykolwiek z użytkowników może również ustawić inicjowanie kompilacji, gdy tylko jest aktualizacja w zależnościach Maven, pod warunkiem, że projekt jest projektem opartym na Maven.
Aby ustawić te opcje, wystarczy wybrać żądany wyzwalacz kompilacji. Użytkownik może również wybrać więcej niż jedną opcję naraz.
Podczas wybierania któregokolwiek z powyższych wyzwalaczy, użytkownik może być zmuszony do podania dodatkowych informacji specyficznych dla typu wyzwalacza.
- Buduj po zbudowaniu innych zadań: należy podać nazwę zadań, które mogą wyzwolić wykonanie tego zadania.
- Buduj okresowo: należy wspomnieć o harmonogramie. Istnieje specjalny protokół, którego należy przestrzegać, aby wspomnieć o harmonogramie. Więcej informacji na temat harmonogramu przedstawiono poniżej:
- Poll SCM: Użytkownik musi określić harmonogram. Pole działa tak samo, jak pole „Buduj okresowo”.
- Kompiluj, gdy zależności Maven zostały zaktualizowane przez integrację Maven 3: Ta sekcja nie wymaga żadnych danych wejściowych do przesłania.
Więcej informacji można znaleźć, rozwijając ikony pomocy.
Jeśli użytkownik nie chce ustawiać żadnego z tych wyzwalaczy kompilacji, może zdecydować o ręcznym utworzeniu zadania / projektu. Wystarczy, że kliknie link „Buduj teraz” wyświetlany w menu po lewej stronie.
Wywoływanie kroków kompilacji
Teraz, gdy widzieliśmy już wszystkie podstawowe kroki konfiguracji projektu kompilacji, przejdźmy dalej i dodajmy więcej kroków kompilacji. Ta sekcja umożliwia użytkownikowi zdefiniowanie jego / jej kompilacji za pomocą wielu kroków kompilacji.
Każdy krok kompilacji ma własną konwencję definiowania i wywoływania.
Na przykład sprawdź wywołanie ANT poniżej:
Konfigurowanie działań po kompilacji
Czasami konieczne i istotne staje się wykonanie pewnych działań po zakończeniu budowy. Akcje po kompilacji to nic innego jak niektóre akcje, które są uruchamiane po wykonaniu kompilacji. Użytkownik jest wykorzystywany do wyzwalania więcej niż jednej akcji po kompilacji, jeśli sobie tego życzy.
Jak wszyscy wiemy, statusy wykonania kompilacji i raporty są jednymi z najważniejszych artefaktów lub kryteriów zakończenia cyklu życia oprogramowania. Dlatego Hudson umożliwia publikowanie raportu z wykonania kompilacji, generowanie dokumentacji, generowanie plików wykonywalnych / archiwów itp.
Raporty z wykonania testów można publikować i przesyłać do interesariuszy pocztą elektroniczną. Wyniki tej kompilacji mogą wyzwolić wykonanie innej kompilacji.
Czynności po kompilacji jest wiele, poświęćmy chwilę na omówienie najbardziej podstawowych.
# 1. Zagreguj wyniki dalszych testów - Ustawienie umożliwia użytkownikowi agregację wyników wykonania testów tego zadania i dalszych zadań w celu uzyskania bardziej wpływowych wyników testów. Wszystko, co musi zrobić użytkownik, to podać nazwę dalszego zadania. W przypadku, gdy użytkownik nie chce wykonywać żadnych dalszych zadań, ale nadal chce wykorzystać ustawienie, może skierować Hudson do znalezienia wszystkich dalszych projektów.
# 2. Zapisuj odciski palców plików, aby śledzić użycie - To ustawienie może być używane przez użytkownika do śledzenia, gdzie został użyty określony plik.
# 3. Opublikuj raport wyników testu JUnit - To ustawienie umożliwia użytkownikowi publikowanie raportu z testu JUnit poprzez przeczytanie i zrozumienie raportu niestandardowego wygenerowanego przez JUnit. Raport wyników testu JUnit zapewnia użytkownikowi interfejs sieciowy do przeglądania utworzonych raportów. Raporty te można przesyłać pocztą elektroniczną do interesariuszy. Aby włączyć tę opcję, wystarczy, że użytkownik poda ścieżkę do raportu niestandardowego wygenerowanego przez JUnit.
# 4. Zarchiwizuj artefakty - To ustawienie umożliwia użytkownikowi tworzenie artefaktów, które można rozpowszechniać w celu dalszego wykorzystania. Artefakt można wyprodukować po każdej udanej kompilacji. Użytkownik ma bezpośredni dostęp do tych artefaktów za pośrednictwem interfejsu internetowego. Artefakty mogą być wydawanymi plikami wykonywalnymi w postaci plików wojennych, plików jar, spakowanych plików lub folderów tar.
# 5. Opublikuj Javadoc - To ustawienie umożliwia publikowanie dokumentu java dla klientów i użytkowników w interfejsie internetowym Hudson, pod warunkiem, że projekt generuje dokument java. Aby włączyć tę opcję, użytkownik musi podać lokalizację dokumentu Java w katalogu Javadoc.
Jeśli użytkownik zaznaczy opcję „Zachowaj Javadoc dla każdej pomyślnej kompilacji”, nowo wygenerowany plik Javadoc zostanie zapisany w określonym folderze. W ten sposób wszystkie Javadoc odpowiadające pomyślnej kompilacji zostaną zachowane.
# 6. Twórz inne miejsca pracy - To ustawienie pozwala użytkownikowi wyzwolić wykonanie innych zadań po wykonaniu tego zadania. Użytkownik może wyzwolić wykonanie więcej niż jednego zadania w tym samym czasie. To ustawienie może być pomocne przy wykonywaniu testów jednostkowych i scenariuszy testów integracji. Użytkownik może nawet ustawić opcję tworzenia innych zadań, nawet jeśli to zadanie się nie powiedzie (niestabilne).
# 7. Opublikuj raport dotyczący pokrycia Cobertury - Cobertura to oparte na Javie narzędzie do testowania, które analizuje pokrycie kodu projektu, tj. Ocenia procent kodu objęty testami. W ten sposób ustawienie umożliwia użytkownikowi wygenerowanie raportu z analizą pokrycia kodu. To ustawienie wymaga podania kilku parametrów, zanim będzie można uzyskać pełny raport z testów pokrycia kodu. Zwróć uwagę, że to ustawienie nie jest dostępne domyślnie, tj. Wymaga zainstalowania wtyczki (co zrobiliśmy podczas instalacji, ponieważ jest to generalnie część sugerowanych wtyczek).
(Kliknij obraz, aby powiększyć)
# 8. Powiadomienie e-mail - Powiadomienie e-mail to jedna z najważniejszych czynności po kompilacji. Ta opcja pozwala użytkownikowi wysłać wiadomość e-mail z powiadomieniem o kompilacji do interesariuszy (programistów, testerów, właścicieli produktów itp.) Poprzez skonfigurowanie ich identyfikatorów e-mail. Hudson może wysłać wiadomość e-mail, gdy kompilacja jest niestabilna, pomyślna, nie powiodła się itp. Użytkownik może również ustawić wyzwalacze powiadomień e-mail. Wiadomość e-mail z powiadomieniem może zostać wysłana do więcej niż jednego odbiorcy w tym samym czasie, po prostu zapewniając spację między ich identyfikatorami e-mail. Zobacz poniższy zrzut ekranu, aby sprawdzić, w jaki sposób można zapewnić te ustawienia.
(Kliknij obraz, aby powiększyć)
Uwagi:
- Użytkownik może w każdej chwili wrócić do tej strony i zmienić ustawienia, jeśli to konieczne.
- Użytkownik może przeglądać informacje o każdej opcji w powiązanej z nią ikonie pomocy.
- Użytkownik może dodać więcej działań po kompilacji za pomocą wtyczek.
Wniosek
W tym samouczku zapoznaliśmy Cię z koncepcją Continuous Integration. Położyliśmy również nacisk na jego znaczenie w cyklu życia oprogramowania, zwłaszcza w życiu programisty lub testera.
Następny samouczek nr 26 : Idąc do przodu w serii, tak byśmy omówić niektóre zaawansowane koncepcje selenu które bezpośrednio lub pośrednio pomogłyby w optymalizacji struktury Automation i zapewniają większą widoczność użytkownikom. Dlatego w następnym samouczku omówimy funkcję rejestrowania, jej potencjał, możliwości debugowania i wiele więcej.
Uwaga: Ten samouczek jest częścią serii samouczków Selenium oraz DevOps. Kliknij poniższe łącze, aby przejść do poprzednich i następnych samouczków z serii DevOps.
POPRZEDNIA samouczek | NEXT Tutorial
rekomendowane lektury
- Cucumber Selenium Tutorial: Integracja Cucumber Java Selenium WebDriver
- Dogłębne samouczki dotyczące Eclipse dla początkujących
- Integracja Selenium z JMeter
- Testowanie automatyzacji przy użyciu narzędzia Cucumber i selenu - samouczek dotyczący selenu nr 30
- Spock do integracji i testowania funkcjonalnego z selenem
- Korzystanie z narzędzia Maven Build Automation Tool i Maven Project Setup dla Selenium - samouczek Selenium # 24
- Integracja Jenkins z Selenium WebDriver: samouczek krok po kroku
- Wprowadzenie do Selenium WebDriver - samouczek Selenium # 8