Selenium od podstaw - jak tworzyć stabilne testy webowe

Diagram pokazuje, że Selenium WebDriver to narzędzie do automatyzacji testów przeglądarek, współpracujące z GeckoDriver, ChromeDriver, SafariDriver, InternetExplorerDriver i Microsoft Edge WebDriver.

Napisano przez

Eryk Pawlak

Opublikowano

2 paź 2026

Spis treści

Gdy aplikacja internetowa rośnie, ręczne klikanie tych samych scenariuszy po każdej zmianie szybko staje się wąskim gardłem. Selenium automatyzuje pracę przeglądarki, dzięki czemu może logować użytkownika, wypełniać formularze, sprawdzać komunikaty i potwierdzać, że kluczowe funkcje nadal działają. Wyjaśniam, czym dokładnie jest ten framework, jak działa WebDriver, od czego zacząć oraz gdzie kończą się jego możliwości.

Selenium pozwala sprawdzać aplikacje webowe szybciej i powtarzalnie

  • Selenium to zestaw narzędzi do automatyzacji przeglądarek i testowania aplikacji internetowych.
  • WebDriver steruje Chrome, Firefoxem, Edge’em i innymi przeglądarkami z poziomu kodu.
  • Selenium IDE umożliwia nagrywanie prostych scenariuszy bez dużej ilości programowania.
  • Selenium Grid uruchamia testy równolegle na wielu przeglądarkach, systemach i maszynach.
  • Framework najlepiej uzupełnia testy jednostkowe i API, zamiast je zastępować.

Czym jest Selenium i co właściwie automatyzuje

Selenium jest open source’owym zestawem narzędzi do automatyzacji przeglądarek internetowych. Nie jest osobnym językiem programowania ani pojedynczą aplikacją. To raczej ekosystem, który pozwala pisać scenariusze w Pythonie, Javie, JavaScripcie, C# czy Ruby, a potem wykonywać je w prawdziwej przeglądarce.

W praktyce test może otworzyć stronę logowania, wpisać dane, kliknąć przycisk, przejść do panelu klienta i sprawdzić, czy pojawił się oczekiwany komunikat. Najważniejsza różnica względem zwykłego skryptu polega na tym, że Selenium działa na poziomie przeglądarki i interfejsu użytkownika, a nie tylko wysyła żądania do serwera.

Najczęściej wykorzystuje się je do testów end-to-end, czyli sprawdzania całej ścieżki użytkownika od wejścia na stronę do uzyskania rezultatu. Taki test może potwierdzić między innymi, że koszyk przyjmuje produkt, formularz waliduje błędne dane, a płatność przekierowuje klienta do właściwego miejsca.

Selenium nie służy wyłącznie do testów

Automatyzacja testów to podstawowe zastosowanie, ale Selenium bywa też używane do demonstracji, testów regresji i powtarzalnych zadań wykonywanych w przeglądarce. Nie traktowałbym go jednak jako uniwersalnego narzędzia do scrapowania. Jeżeli dane są dostępne przez API albo statyczny kod HTML, prostsze rozwiązanie będzie zwykle szybsze i stabilniejsze.

Framework nie ocenia samodzielnie, czy interfejs jest dobry. Wykonuje polecenia i sprawdza warunki zapisane przez autora testu. Jeżeli scenariusz nie zawiera sensownych asercji, może przejść bez błędu mimo tego, że użytkownik zobaczyłby wadliwy ekran.

Testy z BrowserStack SDK i równoległe wątki pokazują, selenium co to jest: automatyzacja testów na wielu urządzeniach.

Jak działa Selenium WebDriver

Najważniejszym elementem ekosystemu jest Selenium WebDriver. Kod testu wysyła do niego polecenia, a WebDriver przekazuje je do konkretnej przeglądarki. Dzięki temu program może wyszukać element, kliknąć go, wpisać tekst, odczytać zawartość strony albo sprawdzić, czy dany przycisk jest widoczny.

Przepływ wygląda prosto. Test uruchamia sesję przeglądarki, otwiera stronę, znajduje elementy za pomocą selektorów, wykonuje akcje i na końcu porównuje wynik z oczekiwaniem. Współczesne Selenium korzysta ze standardu WebDriver, dlatego sposób komunikacji jest bardziej przewidywalny niż w starszych rozwiązaniach opartych na pośrednim sterowaniu.

Selektory decydują o stabilności testu

Element można znaleźć po identyfikatorze, nazwie, tekście, klasie CSS albo za pomocą XPath. Z mojego doświadczenia wynika, że największą różnicę robi nie sama znajomość Selenium, lecz jakość selektorów. Stabilny identyfikator przeznaczony do testów jest zwykle lepszy niż długa ścieżka XPath zależna od układu HTML.

Przykład prostego testu w Pythonie może wyglądać tak:

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

driver = webdriver.Chrome()

try:
    driver.get("https://example.test/logowanie")
    driver.find_element(By.ID, "email").send_keys("tester@example.test")
    driver.find_element(By.ID, "haslo").send_keys("tajne-haslo")
    driver.find_element(By.CSS_SELECTOR, "button[type='submit']").click()

    assert "Panel klienta" in driver.page_source
finally:
    driver.quit()

W prawdziwym projekcie dane logowania powinny pochodzić z bezpiecznych zmiennych środowiskowych, a nie z kodu. Sam przykład pokazuje jednak najważniejszy schemat: otwórz, znajdź, wykonaj akcję, sprawdź rezultat i zamknij sesję.

Dlaczego czekanie jest ważniejsze niż szybkość

Nowoczesne aplikacje często doładowują elementy po uruchomieniu strony. Jeżeli test kliknie przycisk zanim ten faktycznie pojawi się w DOM-ie, otrzymamy błąd, mimo że aplikacja działa poprawnie. Dlatego zamiast przypadkowych opóźnień lepiej stosować oczekiwania jawne, które czekają na konkretny warunek, na przykład widoczność elementu lub możliwość kliknięcia.

To jeden z częstszych błędów początkujących. Funkcja uśpienia na kilka sekund może chwilowo pomóc, ale wydłuża każdy test i nadal nie rozwiązuje problemu zmiennego czasu ładowania. Stabilny test reaguje na stan aplikacji, a nie na zegarek.

Selenium WebDriver, IDE i Grid mają różne role

Wiele nieporozumień bierze się z używania nazwy Selenium jak określenia jednego programu. W rzeczywistości poszczególne komponenty służą do innych zadań. Poniższe zestawienie ułatwia wybór właściwego punktu startu.

Narzędzie Do czego służy Dla kogo będzie najlepsze
WebDriver Programowe sterowanie przeglądarką i budowanie rozbudowanych testów Dla testerów automatyzujących i programistów
Selenium IDE Nagrywanie oraz odtwarzanie prostych scenariuszy w przeglądarce Dla osób początkujących i zespołów tworzących szybkie prototypy
Selenium Grid Uruchamianie testów zdalnie i równolegle na wielu konfiguracjach Dla większych projektów i potoków CI/CD

Selenium IDE jest dobrym sposobem, by zobaczyć mechanikę automatyzacji bez pisania dużej ilości kodu. Nagrywanie kroków sprawdza się podczas prostych demonstracji, ale przy większej liczbie scenariuszy szybko pojawia się potrzeba kontroli wersji, własnych funkcji i czytelnych asercji. Wtedy WebDriver daje znacznie większą swobodę.

Selenium Grid przydaje się, gdy testy trzeba uruchomić na przykład na Chrome i Firefoxie, w różnych systemach operacyjnych, a dodatkowo skrócić czas całego przebiegu dzięki pracy równoległej. To rozwiązanie zwiększa możliwości, ale również koszt utrzymania infrastruktury. Nie wdrażałbym Gridu do małego projektu, który ma kilkanaście krótkich testów.

Jak zacząć pracę z Selenium bez budowania kruchego projektu

Najprościej wybrać jeden język, który zespół już zna, zainstalować bibliotekę Selenium i uruchomić pojedynczy scenariusz na lokalnej przeglądarce. W aktualnych wersjach ekosystemu Selenium Manager może pomóc w obsłudze sterowników przeglądarek, więc konfiguracja jest prostsza niż dawniej.

Pierwszy test powinien sprawdzać mały, stabilny fragment aplikacji. Logowanie, wyszukiwanie produktu albo dodanie elementu do koszyka nadają się lepiej niż od razu rozbudowany scenariusz obejmujący kilkanaście ekranów. Krótki test łatwiej zrozumieć, naprawić i uruchamiać przy każdej zmianie kodu.

Przeczytaj również: WebDriverManager - Jak ustabilizować testy Selenium?

Praktyczny plan wdrożenia

  1. Wybierz język, który jest już używany w projekcie, na przykład Python lub Java.
  2. Uruchom jedną przeglądarkę i sprawdź prostą nawigację po stronie.
  3. Dodaj asercję, która potwierdzi konkretny rezultat, a nie tylko brak wyjątku.
  4. Wydziel dane testowe, konfigurację i powtarzalne akcje do osobnych modułów.
  5. Uruchom test w CI/CD, czyli procesie automatycznego budowania i sprawdzania aplikacji.
  6. Obserwuj awarie i poprawiaj przyczynę, zamiast zwiększać liczbę opóźnień.

Przy większej liczbie testów warto zastosować Page Object Model. To wzorzec, w którym selektory i operacje dotyczące konkretnej strony są trzymane w jednym miejscu. Gdy zmieni się identyfikator przycisku, poprawka trafia do jednej klasy zamiast do kilkunastu scenariuszy.

Nie automatyzowałbym wszystkiego, co da się kliknąć. Największą wartość dają testy procesów krytycznych, często wykonywanych i podatnych na regresję. Jednorazowy test przygotowany wyłącznie po to, by odhaczyć zadanie, może kosztować więcej czasu w utrzymaniu, niż oszczędzi przy ręcznym sprawdzaniu.

Co Selenium potrafi, a czego lepiej od niego nie oczekiwać

Selenium dobrze sprawdza się tam, gdzie trzeba odtworzyć zachowanie użytkownika w prawdziwej przeglądarce. Może testować formularze, routing, sesje, komunikaty walidacyjne, role użytkowników i podstawowe scenariusze responsywne. Szczególnie dobrze pasuje do aplikacji webowych, które działają w kilku przeglądarkach.

Nie jest natomiast najlepszym narzędziem do testowania logiki pojedynczych funkcji, usług backendowych i wydajności serwera. Testy jednostkowe są szybsze, a testy API zwykle mniej kruche niż pełna ścieżka przez interfejs. Rozsądna piramida testów powinna łączyć wszystkie te poziomy.

Rodzaj testu Co sprawdza Główna zaleta
Jednostkowy Pojedynczą funkcję lub moduł Bardzo szybkie wykonanie
API Komunikację usług i odpowiedzi serwera Mniejsza podatność na zmiany interfejsu
End-to-end w Selenium Całą ścieżkę użytkownika w przeglądarce Sprawdzenie aplikacji z perspektywy klienta

Największym ograniczeniem Selenium jest kruchość testów UI. Zmiana struktury strony, animacja, opóźnione żądanie albo niejednoznaczny selektor mogą spowodować awarię testu. Nie zawsze oznacza to błąd aplikacji, dlatego każdy nieudany przebieg wymaga analizy, a nie automatycznego zgłoszenia defektu.

Trzeba też pamiętać o środowisku. Test może przejść lokalnie, a nie powieść się na serwerze CI z inną rozdzielczością, wersją przeglądarki lub konfiguracją sieci. W praktyce pomaga uruchamianie powtarzalnego środowiska, zapisywanie zrzutów ekranu po awarii i rejestrowanie logów z każdej sesji.

Najkrótsza droga do sensownych testów Selenium

Jeśli dopiero zaczynasz, wybierz jeden krytyczny scenariusz i doprowadź go do stabilnego działania. Jeden wiarygodny test jest więcej wart niż dziesięć losowo nagranych kroków, których nikt nie chce później utrzymywać. Dopiero po opanowaniu selektorów, oczekiwań i asercji warto rozszerzać zestaw.

Moja praktyczna rekomendacja jest prosta. WebDriver wykorzystuj do najważniejszych ścieżek użytkownika, testy API do szybkiej kontroli backendu, a testy jednostkowe do logiki aplikacji. Selenium nie zastąpi dobrego procesu jakościowego, ale właściwie użyte potrafi szybko wykryć regresję tam, gdzie ręczne sprawdzanie byłoby powolne, powtarzalne i podatne na przeoczenia.

FAQ - Najczęstsze pytania

WebDriver służy do programowego sterowania przeglądarką i budowania rozbudowanych testów. Selenium IDE nagrywa oraz odtwarza proste scenariusze, a Selenium Grid uruchamia testy zdalnie i równolegle na wielu przeglądarkach, systemach lub maszynach.

Stosuj stabilne selektory, najlepiej identyfikatory przeznaczone do testów, zamiast długich ścieżek XPath. Używaj oczekiwań jawnych, które czekają na konkretny warunek, taki jak widoczność lub możliwość kliknięcia elementu, zamiast stałych opóźnień.

Selenium sprawdza się przy testach end-to-end, które odtwarzają pełną ścieżkę użytkownika w prawdziwej przeglądarce, na przykład logowanie, dodanie produktu do koszyka lub walidację formularza. Testy jednostkowe lepiej sprawdzają pojedyncze funkcje, a testy API komunikację usług i odpowiedzi serwera.

Wybierz język używany przez zespół, uruchom jedną przeglądarkę i przygotuj mały, stabilny scenariusz. Dodaj konkretną asercję, wydziel dane testowe oraz konfigurację, a następnie uruchom test w CI/CD. Przy większej liczbie scenariuszy pomocny będzie Page Object Model, który centralizuje selektory i operacje dotyczące stron.

Oceń artykuł

Ocena: 4.67 Liczba głosów: 3

Tagi:

webdriver selektory selenium grid testy end-to-end oczekiwania jawne

Udostępnij artykuł

Eryk Pawlak

Eryk Pawlak

Nazywam się Eryk Pawlak i od 7 lat zajmuję się automatyzacją testów oraz zapewnieniem jakości oprogramowania. Moja przygoda z tym obszarem zaczęła się z fascynacji technologią i chęcią tworzenia produktów, które są nie tylko funkcjonalne, ale także niezawodne. Interesuje mnie, jak dzięki odpowiednim narzędziom i metodom można uprościć skomplikowane procesy testowe, a także jak ważne jest ciągłe doskonalenie jakości w projektach IT. W swojej pracy skupiam się na dostarczaniu rzetelnych, zrozumiałych i aktualnych informacji, które mogą pomóc innym w zrozumieniu wyzwań związanych z QA. Lubię porównywać różne podejścia do automatyzacji, a także analizować trendy w branży, aby móc dzielić się sprawdzonymi rozwiązaniami. Moim celem jest, aby każdy mógł odnaleźć w moich tekstach wartościowe wskazówki, które ułatwią im pracę w obszarze jakości oprogramowania.

Napisz komentarz