Java dla testerów automatyzujących to ta część języka i jego ekosystemu, której naprawdę używacie w testach: składnia, programowanie obiektowe, kolekcje i wyjątki, a do tego Maven, JUnit 5, Selenium albo Playwright i REST Assured. Zamiast ogólnych rad o mentorze dostajecie tu zakres tematów, plan na 8 tygodni i trzy działające testy w Javie 21: API, UI w Selenium 4 i UI w Playwright.
Wszystkie przykłady uruchomiliśmy 10.10.2026 w projekcie Maven z Javą 21: 7 testów, 0 błędów. Wersje bibliotek to aktualne wydania z Maven Central z tego dnia. Jeśli dopiero instalujecie środowisko, zacznijcie od lekcji wprowadzenie do języka Java i pierwszy program w Javie, a do tego tekstu wróćcie, gdy chcecie poukładać całą ścieżkę.
Spis treści
- Czy Java to nadal dobry wybór dla testera automatyzującego?
- Jaki zakres Javy jest potrzebny w testach automatycznych?
- Java dla testerów: jak wygląda plan nauki na 8 tygodni?
- Jak przygotować projekt: Java 21, Maven i JUnit 5?
- Jak napisać pierwszy test API w Javie z REST Assured?
- Selenium 4 czy Playwright for Java do testów UI?
- Jak zbudować portfolio, które przekona rekrutera?
- Jakie błędy popełniają testerzy uczący się Javy?
Czy Java to nadal dobry wybór dla testera automatyzującego?
Tak, choć z innego powodu, niż często się podaje. Java nie jest jedynym językiem do automatyzacji i nie jest najpopularniejszym językiem w ogóle: według ankiety Stack Overflow Developer Survey 2025 używa jej 29,4 procent respondentów, mniej niż JavaScriptu, Pythona czy SQL. Jej siła w testach to dojrzały ekosystem, silne typowanie, które łapie wiele błędów jeszcze przed uruchomieniem, i fakt, że wiele systemów w bankach, ubezpieczeniach i dużych firmach ma backend właśnie w Javie, więc testy w tym samym języku łatwiej utrzymać razem z kodem.
Ważne sprostowanie wobec starszej wersji tego artykułu: Selenium i Appium nie są „oparte na Javie”. To narzędzia wielojęzyczne. Według dokumentacji Selenium biblioteki są oficjalnie dostępne dla Javy, Pythona, C#, Ruby, JavaScriptu i Kotlina, a według dokumentacji Appium serwer działa na Node.js, a klienci są dla Javy, Pythona, Ruby, .NET i JavaScriptu. Java jest jednym z równorzędnych wyborów, a nie warunkiem.
Źródło: dokumentacja Selenium, Playwright, Appium, REST Assured i Retrofit, odczyt 10.10.2026
Ostatni wiersz też koryguje starszą wersję tekstu. Retrofit to według opisu projektu Square bezpieczny typowo klient HTTP dla Androida i JVM. Da się go użyć w testach, ale nie daje asercji, raportów ani składni given, when, then. Do testów API w Javie standardem jest REST Assured.
Jaki zakres Javy jest potrzebny w testach automatycznych?
Tester automatyzujący nie musi znać całej Javy. Musi swobodnie poruszać się w kilku obszarach, które wracają w każdym frameworku testowym, a resztę może dobrać później. Poniżej lista z odsyłaczami do lekcji naszego kursu Java dla testerów.
Na start możecie spokojnie odłożyć wielowątkowość, strojenie JVM, refleksję i zaawansowane strumienie. Wrócą, gdy będziecie równolegle uruchamiać testy albo pisać własne narzędzia, ale nie blokują pierwszego dobrego testu.

Java dla testerów: jak wygląda plan nauki na 8 tygodni?
Plan zakłada około 6 do 8 godzin tygodniowo i kończy każdy tydzień czymś, co da się pokazać: działającym kodem w repozytorium. Kolejność jest celowa. Testy API pojawiają się przed testami UI, bo są szybsze, stabilniejsze i uczą czytania odpowiedzi serwera bez walki z przeglądarką.
Z naszego doświadczenia najwięcej osób odpada w tygodniu 3, przy obiektowości. To normalne. Jeśli klasa i obiekt wydają się Wam filozofią, a nie programowaniem, jesteście w bardzo licznym i dobrym towarzystwie. Pomaga wtedy przerobienie tych samych tematów na przykładzie z testów, a nie na zwierzętach i samochodach z podręcznika.
Jak przygotować projekt: Java 21, Maven i JUnit 5?
Projekt opiera się na pliku pom.xml, w którym Maven trzyma wersję Javy i zależności. Poniżej minimalny zestaw, na którym uruchomiliśmy wszystkie testy z tego artykułu. JUnit 5 to framework, który uruchamia testy, REST Assured obsługuje API, a Selenium i Playwright przeglądarkę. W praktyce wybierzcie jedno z dwóch ostatnich.
<properties>
<maven.compiler.release>21</maven.compiler.release>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.13.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>6.1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.51.0</version>
</dependency>
<dependency>
<groupId>com.microsoft.playwright</groupId>
<artifactId>playwright</artifactId>
<version>1.63.0</version>
</dependency>
</dependencies>
Wbrew pozorom
JUnit 6 jest już dostępny i według strony projektu wymaga Javy 17 lub nowszej. Ten sam kod testów z tego artykułu uruchomiliśmy najpierw z JUnit 5.13.4, a potem z JUnit 6.1.3, nie zmieniając ani jednej linijki: 7 testów, 0 błędów w obu wersjach. Oba wydania używają tego samego API Jupiter, więc nauka JUnit 5 nie jest nauką czegoś przestarzałego.
Jak napisać pierwszy test API w Javie z REST Assured?
Test API sprawdza odpowiedź serwera bez przeglądarki: status, nagłówki i treść JSON. Poniżej trzy testy na publicznym serwisie JSONPlaceholder: pobranie użytkownika, test parametryzowany dla trzech identyfikatorów i utworzenie wpisu metodą POST. Składnia given().when().then() czyta się jak scenariusz testowy, a ścieżki typu address.city wskazują pole w JSON.
package pl.qi.testy;
import static io.restassured.RestAssured.given;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.notNullValue;
import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
class UzytkownicyApiTest {
@BeforeAll
static void konfiguracja() {
RestAssured.baseURI = "https://jsonplaceholder.typicode.com";
}
@Test
@DisplayName("GET /users/1 zwraca użytkownika z poprawnym e-mailem")
void pobieraUzytkownika() {
given()
.accept(ContentType.JSON)
.when()
.get("/users/1")
.then()
.statusCode(200)
.body("id", equalTo(1))
.body("email", equalTo("Sincere@april.biz"));
}
@ParameterizedTest(name = "użytkownik {0} mieszka w mieście {1}")
@CsvSource({"1, Gwenborough", "2, Wisokyburgh", "3, McKenziehaven"})
void sprawdzaMiasto(int id, String miasto) {
given()
.pathParam("id", id)
.when()
.get("/users/{id}")
.then()
.statusCode(200)
.body("address.city", equalTo(miasto));
}
@Test
void tworzyPost() {
String nowyPost = """
{"title": "Test z REST Assured", "body": "Java 21", "userId": 1}
""";
given()
.contentType(ContentType.JSON)
.body(nowyPost)
.when()
.post("/posts")
.then()
.statusCode(201)
.body("id", notNullValue())
.body("title", equalTo("Test z REST Assured"));
}
}
Kilka elementów Javy, które tu pracują: importy statyczne skracają wywołania, adnotacje @Test i @ParameterizedTest mówią JUnit, co uruchomić, a blok tekstowy z trzema cudzysłowami (Java 15 i nowsze) pozwala wkleić JSON bez escapowania. Wynik uruchomienia: 5 testów, 0 błędów. Jeśli testy API są dla Was nowe, zacznijcie od artykułu testowanie API dla początkujących, a w Javie przećwiczycie je na szkoleniu REST Assured: testy integracyjne API dla testerów.
Selenium 4 czy Playwright for Java do testów UI?
Oba narzędzia dobrze działają z Javą i oba w aktualnych wersjach same pobierają to, czego potrzebują. Według dokumentacji Selenium od wersji 4.6 każde wydanie zawiera Selenium Manager, który znajduje albo pobiera sterownik przeglądarki, więc ręczne ściąganie chromedrivera to już historia. Playwright for Java przy pierwszym uruchomieniu pobiera przeglądarki Chromium, Firefox i WebKit.
package pl.qi.testy;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.time.Duration;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
class FormularzSeleniumTest {
private WebDriver driver;
@BeforeEach
void start() {
ChromeOptions opcje = new ChromeOptions();
opcje.addArguments("--headless=new", "--window-size=1920,1080");
// Selenium Manager sam znajdzie albo pobierze chromedriver pasujący do przeglądarki
driver = new ChromeDriver(opcje);
}
@Test
void wysylaFormularz() {
driver.get("https://www.selenium.dev/selenium/web/web-form.html");
driver.findElement(By.id("my-text-id")).sendKeys("Quality Island");
driver.findElement(By.cssSelector("button[type='submit']")).click();
// po kliknięciu ładuje się nowa strona, więc czekamy na komunikat
WebElement komunikat = new WebDriverWait(driver, Duration.ofSeconds(10))
.until(ExpectedConditions.visibilityOfElementLocated(By.id("message")));
assertEquals("Received!", komunikat.getText());
}
@AfterEach
void koniec() {
driver.quit();
}
}
Ten test nie przeszedł nam za pierwszym razem i dobrze, bo pokazuje dwie klasyczne pułapki. Najpierw kliknięcie przechwycił inny element, bo przeglądarka bez interfejsu startuje z małym oknem, więc doszło --window-size. Potem test szukał komunikatu, zanim załadowała się nowa strona, więc doszło jawne czekanie WebDriverWait. Więcej o czekaniu w Selenium piszemy w artykule explicit wait vs implicit wait.
package pl.qi.testy;
import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
import com.microsoft.playwright.Browser;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.Playwright;
import com.microsoft.playwright.options.AriaRole;
import org.junit.jupiter.api.Test;
class FormularzPlaywrightTest {
@Test
void wysylaFormularz() {
try (Playwright playwright = Playwright.create()) {
Browser przegladarka = playwright.chromium().launch();
Page strona = przegladarka.newPage();
strona.navigate("https://www.selenium.dev/selenium/web/web-form.html");
strona.getByLabel("Text input").fill("Quality Island");
strona.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Submit")).click();
// asercja z automatycznym czekaniem, bez ręcznego Thread.sleep
assertThat(strona.locator("#message")).hasText("Received!");
}
}
}
W Playwright ten sam scenariusz przeszedł od razu, bo asercja assertThat(...).hasText(...) sama ponawia sprawdzenie, aż tekst się pojawi albo minie limit czasu, a lokatory po etykiecie i roli przypominają to, jak użytkownik widzi stronę. Selenium ma za to większą bazę gotowych projektów, integracji i ofert pracy, a Selenium Grid pozwala uruchamiać testy na wielu maszynach.
Pełne porównanie z Cypress znajdziecie w tekście Selenium, Cypress czy Playwright. Jeśli chcecie przejść jedną ścieżkę z trenerem, macie do wyboru szkolenie automatyzacja testów Selenium WebDriver albo automatyzacja testów z Playwright w Javie. Testy automatyczne w Javie dla aplikacji mobilnych to osobny temat: szkolenie Appium w Javie.
Jak zbudować portfolio, które przekona rekrutera?
Rekruter nie uruchomi Waszego kodu, ale otworzy repozytorium i README. Portfolio ma pokazać, że umiecie zbudować mały, porządny projekt testów, a nie że przeszliście 40 tutoriali. Wystarczą trzy rzeczy: testy API, kilka testów UI z Page Object i zielony pipeline.
README
Jak uruchomić w 1 minucie
Wymagania, jedna komenda mvn test, opis przypadków testowych i znane ograniczenia.
Struktura
Page Object i dane testowe
Osobno strony, osobno testy, osobno dane. Żadnych haseł w kodzie.
CI
Zielony pipeline
GitHub Actions albo Jenkins uruchamia testy przy każdym commicie i publikuje raport.
U naszych klientów, którym pomagamy rekrutować i szkolić zespoły, najlepiej wypada repozytorium, w którym autor potrafi wyjaśnić, dlaczego dany test jest na poziomie API, a nie UI. Swoje umiejętności możecie też pokazać na QA Board, platformie łączącej specjalistów QA z firmami. Jeśli wolicie zdobyć doświadczenie na prawdziwym projekcie z zespołem, jest projekt szkoleniowo stażowy dla testera automatyzującego.
Jakie błędy popełniają testerzy uczący się Javy?
Te błędy widzimy na każdej edycji szkoleń, na których szkolimy testerów wchodzących w automatyzację. Według danych Quality Island przeszkoliliśmy już ponad 2 500 specjalistów, a nasze zespoły napisały ponad 450 000 testów automatycznych, więc lista jest z praktyki, nie z podręcznika.
Jeśli chcecie zacząć od samych podstaw, przydadzą się też najlepsze książki do nauki Javy, a ludzi, którzy przeszli tę drogę wcześniej, spotkacie na Testing Ground Conference.
Co zabrać z tego artykułu
01Java to jeden z kilku równorzędnych języków automatyzacji. Selenium, Playwright i Appium są wielojęzyczne, a Retrofit to klient HTTP, nie narzędzie do testów.
02Tester potrzebuje wycinka Javy: typy, warunki, pętle, obiektowość, kolekcje, wyjątki, rekordy. Wielowątkowość i JVM mogą poczekać.
03Plan na 8 tygodni kończy każdy tydzień kodem w repozytorium. Testy API przed testami UI.
04Aktualny stos: Java 21, Maven, JUnit 5 (kod działa też na JUnit 6), REST Assured, Selenium 4 z Selenium Managerem albo Playwright for Java.
05Portfolio to README, Page Object i zielony pipeline, a nie liczba ukończonych tutoriali.
Chcecie przejść tę ścieżkę z trenerem, na przykładach z projektów? Szkolenie z Javy dla testerów prowadzi od składni do pierwszych testów automatycznych.
Powiązane na blogu Quality Island
- Selenium: co to jest, jak działa i od czego zacząć automatyzację testów
- Selenium, Cypress czy Playwright: porównanie narzędzi
- 15. Konstruktory w Javie: new, this(), Page Object i builder danych testowych
- Testowanie API dla początkujących
- Najlepsze książki do nauki Javy
Pełna lista źródeł
- Stack Overflow, Developer Survey 2025, sekcja Technology, 2025. Java: 29,4 procent wszystkich respondentów.
- Oracle, Oracle Java SE Support Roadmap, odczyt 10.10.2026. Java 21 LTS od września 2023, Java 25 LTS od września 2025.
- Selenium, Install a Selenium library i Selenium Manager, 2025. Języki bibliotek, Selenium Manager od wersji 4.6.
- Microsoft, Playwright for Java, Installation, 2026. Java 8 lub nowsza, pobieranie przeglądarek przy pierwszym uruchomieniu.
- OpenJS Foundation, Appium, System Requirements i Appium Clients, 2026.
- JUnit, strona projektu JUnit, 2026. JUnit 6 jako aktualna generacja, wymaga Javy 17.
- REST Assured, strona projektu, 2025. Testowanie usług REST w Javie.
- Square, Retrofit, repozytorium projektu, 2025. Klient HTTP dla Androida i JVM.
- Quality Island, dane własne: ponad 2 500 przeszkolonych specjalistów i ponad 450 000 napisanych testów automatycznych, stan na 2026.



