Alerty w Selenium to natywne okna dialogowe przeglądarki, które strona otwiera funkcjami JavaScriptu alert(), confirm() i prompt(). Nie są częścią drzewa DOM, więc nie znajdziecie ich przez findElement: obsługuje się je osobnym interfejsem Alert po przełączeniu sterownika poleceniem driver.switchTo().alert(). W tej lekcji każdy przykład skompilowaliśmy w Javie 21 i uruchomiliśmy na żywej stronie treningowej w Selenium 4.51.0, a wyniki wpisaliśmy pod kodem.
To pierwsza lekcja modułu o oknach w kursie automatyzacji testów. Zakładamy, że umiecie już uruchomić przeglądarkę i znaleźć element, o czym piszemy w lekcji selektory proste w Selenium. Ćwiczymy na naszej stronie selenium-shop.pl, zakładka O nas, gdzie pod formularzem są trzy przyciski: Alert, Prompt Alert i Confirm Alert.
Spis treści
- Czym są alerty w Selenium i czym różnią się od okienek HTML?
- Jakie są trzy typy alertów: alert, confirm i prompt?
- Jak przygotować projekt w Selenium 4 i Javie 21?
- Jak obsłużyć alerty w Selenium metodami accept, dismiss, getText i sendKeys?
- Dlaczego na alert czekamy przez ExpectedConditions.alertIsPresent?
- Jakie wyjątki rzuca Selenium przy alertach?
- Jak testować alerty w praktyce, żeby test coś sprawdzał?
Czym są alerty w Selenium i czym różnią się od okienek HTML?
Alert to okno z komunikatem, które przeglądarka rysuje sama, poza stroną. Według dokumentacji Selenium z 2026 roku WebDriver udostępnia interfejs do pracy z trzema typami natywnych okien JavaScriptu, a ich wygląd zależy od przeglądarki i można go zmienić tylko w niewielkim stopniu. Dla testera najważniejsze jest co innego: dopóki alert jest otwarty, strona pod nim jest zablokowana. Specyfikacja HTML organizacji WHATWG opisuje te funkcje w rozdziale o oknach dialogowych użytkownika, a MDN Web Docs nazywa je wprost oknami modalnymi, które zatrzymują dostęp do reszty interfejsu, dopóki ich nie zamkniecie.
Tu zaczyna się najczęstsza pomyłka początkujących. Wiele okienek, które wyglądają jak alert, to zwykły fragment strony: element div z ciemnym tłem, przyciskiem OK i animacją. Takie okno obsługujecie jak każdy inny element, czyli selektorem i kliknięciem. Rozpoznacie je w DevTools: jeśli da się je zaznaczyć w zakładce Elements, to nie jest alert przeglądarki. Na selenium-shop.pl dobrym przykładem jest przycisk Wyślij pod formularzem, który pokazuje podsumowanie danych w okienku HTML. Okno, które da się zbadać w DevTools, jest jak kot udający psa: wygląda podobnie, ale na komendę switchTo().alert() nie przyjdzie.
Źródło: Selenium, JavaScript alerts, prompts and confirmations (2026); MDN Web Docs, Window.alert(); test Quality Island na selenium-shop.pl 10.10.2026.
Jakie są trzy typy alertów: alert, confirm i prompt?
Każda z trzech funkcji JavaScriptu otwiera inny typ okna i każdy wymaga innej obsługi w teście. Na stronie treningowej przyciski mają identyfikatory alertPrzycisk, promtAlertPrzycisk i confimationAlertPrzycisk. Literówki w dwóch ostatnich są prawdziwe i celowo ich nie poprawiamy w kodzie: selektor musi pasować do strony, a nie do słownika.
alert()
Simple Alert
Komunikat i jeden przycisk OK. Użytkownik może tylko przyjąć informację do wiadomości. W Selenium: getText() i accept().
confirm()
Confirmation Alert
Pytanie z przyciskami OK i Anuluj. Strona dostaje true albo false i od tego zależy dalsza akcja. W Selenium: accept() albo dismiss().
prompt()
Prompt Alert
Pytanie z polem tekstowym oraz przyciskami OK i Anuluj. Strona dostaje wpisany tekst albo null. W Selenium: sendKeys(), potem accept().



Jak przygotować projekt w Selenium 4 i Javie 21?
Wystarczy jedna zależność Maven. Według Maven Central wersja selenium-java 4.51.0 ukazała się 9 października 2026 roku i na niej uruchomiliśmy wszystkie przykłady. Według dokumentacji Selenium od wersji 4.6 każde wydanie zawiera Selenium Manager, który sam pobiera sterownik pasujący do zainstalowanej przeglądarki. Nie ściągacie więc ręcznie pliku chromedriver i nie ustawiacie System.setProperty.
pom.xml, fragment
<properties>
<maven.compiler.release>21</maven.compiler.release>
</properties>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.51.0</version>
</dependency>
</dependencies>
W przykładach uruchamiamy Chrome w trybie bez okna, opcją --headless=new, bo tak działa większość pipeline CI. Jeśli chcecie zobaczyć alerty na ekranie, usuńcie tę linię. Zachowanie metod jest w obu trybach takie samo, sprawdziliśmy to na Chrome 154.
Jak obsłużyć alerty w Selenium metodami accept, dismiss, getText i sendKeys?
Interfejs Alert ma cztery metody i każda odpowiada jednemu poleceniu specyfikacji W3C WebDriver, rozdział 16: Accept Alert, Dismiss Alert, Get Alert Text i Send Alert Text. Obiekt alertu dostajecie z driver.switchTo().alert() albo, lepiej, jako wynik oczekiwania, o czym w następnej sekcji.
Źródło: W3C, WebDriver, rozdział 16 User prompts; Selenium, dokumentacja JavaScript alerts, prompts and confirmations (2026).
Poniżej kompletny program, który obsługuje wszystkie trzy przyciski ze strony treningowej. Kod jest gotowy do skopiowania: proste cudzysłowy, komplet nawiasów i importów.
AlertyNaStronie.java, Selenium 4.51.0, Java 21
import java.time.Duration;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
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;
public class AlertyNaStronie {
public static void main(String[] args) {
ChromeOptions opcje = new ChromeOptions();
opcje.addArguments("--headless=new");
// Selenium Manager sam pobiera sterownik pasujący do przeglądarki
WebDriver driver = new ChromeDriver(opcje);
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
try {
driver.get("http://www.selenium-shop.pl/o-nas/");
// 1. Simple Alert: odczytujemy treść i klikamy OK
driver.findElement(By.id("alertPrzycisk")).click();
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
System.out.println("Alert: " + alert.getText());
alert.accept();
// 2. Prompt Alert: wpisujemy tekst i zatwierdzamy
driver.findElement(By.id("promtAlertPrzycisk")).click();
Alert prompt = wait.until(ExpectedConditions.alertIsPresent());
System.out.println("Prompt: " + prompt.getText());
prompt.sendKeys("Warszawa");
prompt.accept();
// 3. Confirm Alert: odrzucamy operację przyciskiem Anuluj
driver.findElement(By.id("confimationAlertPrzycisk")).click();
Alert confirm = wait.until(ExpectedConditions.alertIsPresent());
System.out.println("Confirm: " + confirm.getText());
confirm.dismiss();
System.out.println("Wszystkie trzy alerty obsłużone");
} finally {
driver.quit();
}
}
}
Wynik uruchomienia 10.10.2026
Alert: To jest okno „Allert” strony www.selenium-shop.pl
Prompt: Podaj nazwę miasta w któym mieszkasz
Confirm: Czy chcesz zatwierdzić operację usunięcia Twoich danych osobowych?
Wszystkie trzy alerty obsłużone
Test znalazł błąd, zanim o niego poprosiliśmy
Spójrzcie na wynik: strona treningowa pisze „Allert” przez dwa l, a w treści prompta jest „któym” zamiast „którym”. Na zrzutach ekranu i w poprzedniej wersji tej lekcji tego nie było widać, bo wszyscy czytali komunikat tak, jak powinien brzmieć. Metoda getText() nie poprawia tekstu w głowie, tylko zwraca dokładnie to, co jest w kodzie strony. Dlatego asercja na treści alertu to jedna z najtańszych kontroli literówek w komunikatach, jaką możecie dodać do testów.
Dlaczego na alert czekamy przez ExpectedConditions.alertIsPresent?
Alert nie zawsze pojawia się w tej samej milisekundzie co kliknięcie. Strona może najpierw wysłać zapytanie do serwera i dopiero po odpowiedzi pokazać komunikat. Jeśli od razu wywołacie switchTo().alert(), dostaniecie wyjątek, a test raz przejdzie, raz nie. Rozwiązaniem jest jawne oczekiwanie: klasa WebDriverWait z warunkiem ExpectedConditions.alertIsPresent(), który według dokumentacji API Selenium czeka, aż alert będzie obecny, i zwraca go jako obiekt Alert.
Fragment: oczekiwanie zamiast Thread.sleep
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
assertEquals("Zapisano zmiany", alert.getText());
alert.accept();
Warunek sprawdza obecność alertu co pół sekundy, bo tyle wynosi domyślny interwał WebDriverWait, i kończy czekanie, gdy tylko okno się pojawi. Przy 5 sekundach limitu test nie traci więc czasu, gdy alert jest szybki, a nie pada, gdy serwer akurat odpowiada wolniej. Thread.sleep(3000) działa odwrotnie: zawsze kosztuje 3 sekundy i nadal nie gwarantuje, że wystarczy. Różnice między oczekiwaniem jawnym i niejawnym rozpisujemy w artykule Explicit Wait vs Implicit Wait w Selenium WebDriver.
Jakie wyjątki rzuca Selenium przy alertach?
Przy alertach spotkacie trzy wyjątki. Każdy oznacza inny błąd w teście albo w założeniach o stronie, więc warto je rozpoznawać po nazwie. Program poniżej wywołuje wszystkie trzy celowo, na tej samej stronie treningowej.
OknoToNieAlert.java, uruchomione 10.10.2026
import java.time.Duration;
import org.openqa.selenium.By;
import org.openqa.selenium.NoAlertPresentException;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.UnhandledAlertException;
import org.openqa.selenium.WebDriver;
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;
public class OknoToNieAlert {
public static void main(String[] args) {
ChromeOptions opcje = new ChromeOptions();
opcje.addArguments("--headless=new");
WebDriver driver = new ChromeDriver(opcje);
try {
driver.get("http://www.selenium-shop.pl/o-nas/");
// Pułapka 1: przycisk Wyślij otwiera okienko zbudowane z HTML, a nie alert przeglądarki
driver.findElement(By.id("Wyslij")).click();
try {
driver.switchTo().alert();
} catch (NoAlertPresentException e) {
System.out.println("NoAlertPresentException: to okno jest zwykłym elementem strony");
}
// Pułapka 2: krótkie oczekiwanie na alert, który się nie pojawi
try {
new WebDriverWait(driver, Duration.ofSeconds(2))
.until(ExpectedConditions.alertIsPresent());
} catch (TimeoutException e) {
System.out.println("TimeoutException: alert nie pojawił się w 2 sekundy");
}
// Pułapka 3: alert zostawiony bez obsługi blokuje kolejne polecenia
driver.findElement(By.id("alertPrzycisk")).click();
try {
driver.findElement(By.id("confimationAlertPrzycisk")).click();
} catch (UnhandledAlertException e) {
System.out.println("UnhandledAlertException: najpierw obsłuż otwarty alert");
}
} finally {
driver.quit();
}
}
}
Wynik uruchomienia
NoAlertPresentException: to okno jest zwykłym elementem strony
TimeoutException: alert nie pojawił się w 2 sekundy
UnhandledAlertException: najpierw obsłuż otwarty alert
Źródło: W3C, WebDriver, rozdział 6.6 Errors; Selenium Java API; test Quality Island 10.10.2026.
Trzeci wyjątek ma ważny szczegół. Specyfikacja W3C WebDriver ustawia domyślne zachowanie sesji wobec nieobsłużonych okien na „dismiss and notify”: sterownik zamyka alert przyciskiem Anuluj i zwraca błąd. Specyfikacja zna 5 takich zachowań: dismiss, accept, dismiss and notify, accept and notify oraz ignore. Możecie wybrać inne w opcjach przeglądarki, ale zalecamy zostać przy domyślnym i obsługiwać alerty jawnie, bo automatyczne „accept” potrafi po cichu zatwierdzić usunięcie danych, którego test w ogóle nie sprawdzał.
ZachowanieAlertow.java, fragment z jawnym ustawieniem
ChromeOptions opcje = new ChromeOptions();
// Domyślnie W3C WebDriver zamyka nieobsłużony alert i zgłasza błąd (dismiss and notify).
// Tu ustawiamy to jawnie, żeby każdy w zespole wiedział, czego się spodziewać.
opcje.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY);
WebDriver driver = new ChromeDriver(opcje);
Alerty w liczbach
3
typy natywnych okien JavaScriptu obsługiwane przez WebDriver: alert, confirm, prompt
4
polecenia W3C WebDriver dla okien: Accept, Dismiss, Get Alert Text, Send Alert Text
5
zachowań wobec nieobsłużonego okna w specyfikacji W3C; domyślne to dismiss and notify
0,5 s
domyślny odstęp, co który WebDriverWait sprawdza warunek alertIsPresent
Źródło: W3C, WebDriver, rozdziały 16 i 7; Selenium, dokumentacja alertów (2026); kod Selenium 4.51.0, FluentWait.DEFAULT_SLEEP_TIMEOUT = 500 ms.
Jak testować alerty w praktyce, żeby test coś sprawdzał?
Sama obsługa alertu to jeszcze nie test. Test zaczyna się wtedy, gdy sprawdzacie, co strona zrobiła z Waszą decyzją. Przy confirm oznacza to dwa przypadki testowe: po accept() dane mają zniknąć, po dismiss() mają zostać. Przy prompt sprawdzacie, czy wpisany tekst trafił tam, gdzie powinien, i co się stanie po Anuluj, gdy strona dostaje null. Strona treningowa nie pokazuje wyniku prompta ani confirm, więc w tej lekcji sprawdzamy treść okien, a skutki decyzji przećwiczycie w kolejnej lekcji na własnej stronie albo w aplikacji z pracy.
Zasada 1
Asercja na treści
Porównujcie getText() z oczekiwanym komunikatem przed accept(). Po zamknięciu okna tekstu już nie odczytacie.
Zasada 2
Obie ścieżki confirm
Jeden test dla OK, drugi dla Anuluj. Błąd w gałęzi Anuluj to klasyk, bo nikt jej nie klika ręcznie.
Zasada 3
Czekanie zamiast sleep
WebDriverWait z alertIsPresent. Thread.sleep wydłuża testy i nadal bywa za krótki.
Z naszego doświadczenia przy ponad 450 000 testów automatycznych napisanych przez zespół Quality Island alerty rzadko psują się same. Psują się testy, które zakładają, że alert pojawi się natychmiast, albo zostawiają go otwartego i padają dwa kroki później z mylącym komunikatem. W projektach automatyzacji testów UI dla klientów takie miejsca porządkujemy razem z oczekiwaniami i selektorami, a wynik sprawdzamy asercjami, które mówią, co dokładnie poszło nie tak. Jeśli zastanawiacie się, czy Selenium w ogóle zostanie z Wami na dłużej, przeczytajcie analizę Strefy QA o Selenium w 2026 roku.
Alerty, okna, ramki i oczekiwania przerabiamy z trenerem na szkoleniu automatyzacja testów z Selenium WebDriver. Jeśli Java jest dla Was jeszcze nowa, zacznijcie od kursu programowanie w Javie dla testerów oprogramowania, a kto woli pracować od razu na projekcie zbliżonym do komercyjnego, ma projekt stażowy tester automatyzujący. W Quality Island przeszkoliliśmy już ponad 2 500 specjalistów i obsługa alertów pojawia się w zadaniach praktycznie każdej grupy.
Co zabrać z tego artykułu
01Alerty w Selenium to natywne okna JavaScriptu: alert, confirm i prompt. Nie ma ich w DOM, więc obsługujecie je przez driver.switchTo().alert(), a nie przez findElement.
02Okienko, które da się zaznaczyć w DevTools, to zwykły element HTML. Obsługujecie je selektorem i kliknięciem, a switchTo().alert() rzuci NoAlertPresentException.
03Cztery metody: accept() to OK, dismiss() to Anuluj, getText() czyta komunikat, sendKeys() wpisuje tekst tylko w prompt.
04Na alert czekajcie przez WebDriverWait i ExpectedConditions.alertIsPresent(), nie przez Thread.sleep.
05Nieobsłużony alert blokuje sesję. Domyślnie W3C WebDriver zamyka go i zgłasza błąd, a Selenium rzuca UnhandledAlertException.
Źródło: Selenium 4.51.0 i dokumentacja selenium.dev (2026); W3C WebDriver; test na selenium-shop.pl 10.10.2026.
Wasze testy UI padają losowo na oknach, alertach i oczekiwaniach? Przejrzymy Wasz framework i pokażemy, które miejsca poprawić najpierw.
Powiązane na blogu Quality Island
- Lekcja 1: selektory proste w Selenium
- Explicit Wait vs Implicit Wait: waity w Selenium WebDriver
- Asercja: co to jest i jak używać asercji w testach automatycznych
- Selenium: co to jest, jak działa i od czego zacząć
- Wzorce projektowe w Selenium WebDriver
Pełna lista źródeł
- Selenium, JavaScript alerts, prompts and confirmations, dokumentacja WebDriver, 2026. Aktualny adres; stary link /documentation/en/ z poprzedniej wersji lekcji tylko przekierowuje.
- Selenium, ExpectedConditions, Java API, 2026. Warunek alertIsPresent().
- Selenium, Selenium Manager, 2026. Automatyczne sterowniki od wersji 4.6.
- W3C, WebDriver, Working Draft, 2026. Rozdział 16 User prompts, rozdział 6.6 Errors i domyślne unhandledPromptBehavior „dismiss and notify”.
- WHATWG, HTML Living Standard, Timers and user prompts, 2026.
- MDN Web Docs, Window.alert(), Window.confirm() i Window.prompt(), 2025.
- Maven Central, selenium-java 4.51.0, 2026.
- Quality Island, test alertów na selenium-shop.pl/o-nas, Chrome 154, Selenium 4.51.0, Java 21, 10.10.2026; dane własne 2026: ponad 450 000 testów automatycznych i ponad 2 500 przeszkolonych specjalistów.
Autor lekcji: Tomasz Stelmach.