Lekcja 1: Alerty, wprowadzenie
Czas czytania: 12 minut

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.

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.

Cecha Alert przeglądarki Okienko HTML (modal)
Skąd się bierze funkcje JavaScriptu alert(), confirm(), prompt() element strony, np. div z klasą modal
Widać go w DevTools nie tak, w zakładce Elements
Jak go obsłużyć w Selenium driver.switchTo().alert() findElement i click()
Wygląd zależy od przeglądarki, prawie bez wpływu strony dowolny, zależy od CSS strony
Co blokuje całą stronę i polecenia WebDrivera tylko to, co przykrywa

Ź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().

Simple Alert w Selenium: komunikat z jednym przyciskiem OK
Simple Alert: komunikat i jeden przycisk OK.
Confirmation Alert: pytanie z przyciskami OK i Anuluj
Confirmation Alert: decyzja tak albo nie.
Prompt Alert: pole tekstowe z przyciskami OK i Anuluj
Prompt Alert: pole tekstowe i dwa przyciski.

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.

Metoda Co robi Odpowiednik w oknie Typy alertów
accept() zatwierdza okno przycisk OK alert, confirm, prompt
dismiss() odrzuca okno przycisk Anuluj; przy zwykłym alert działa jak OK confirm, prompt
getText() zwraca treść komunikatu tekst nad przyciskami alert, confirm, prompt
sendKeys(String) wpisuje tekst do pola pole tekstowe tylko prompt

Ź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
Wyjątek Kod błędu W3C Kiedy go zobaczycie Co poprawić
NoAlertPresentException no such alert, HTTP 404 switchTo().alert() bez otwartego alertu, np. przy okienku HTML sprawdźcie w DevTools, czy to alert; dodajcie oczekiwanie
TimeoutException brak, to wyjątek klasy WebDriverWait alert nie pojawił się w limicie czasu sprawdźcie, czy akcja na pewno otwiera alert; ewentualnie wydłużcie limit
UnhandledAlertException unexpected alert open, HTTP 500 dowolne polecenie przy otwartym alercie obsłużcie alert od razu po akcji, która go otwiera

Ź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.

Zobacz automatyzację UI


Powiązane na blogu Quality Island

Pełna lista źródeł

Autor lekcji: Tomasz Stelmach.

Co o tym sądzisz?

Dodaj komentarz

Bądź na bieżąco
Strefa QA, portal z eksperckimi artykułami o jakości oprogramowania
Bądź na bieżąco
Szkolenie AI Act w wyrobach medycznych: testy i dokumentacja AI pod MDR
AI Act w wyrobach medycznych
AI Act w wyrobach medycznych: testy i dokumentacja AI pod MDR

1690,00 PLN

30.11.26, 18.01.27, 08.03.27
1 dzień
Szkolenie AI Act w bankowości i ubezpieczeniach: scoring kredytowy, wycena ubezpieczeń i FRIA
AI Act w bankowości i ubezpieczeniach
AI Act w bankowości i ubezpieczeniach: scoring kredytowy, wycena ubezpieczeń i FRIA

1690,00 PLN

27.11.26, 15.01.27, 05.03.27
1 dzień
Szkolenie Testowanie systemów AI wysokiego ryzyka pod AI Act: dokumentacja testowa i QMS dla dostawców
Testowanie systemów AI wysokiego ryzyka pod AI Act
Testowanie systemów AI wysokiego ryzyka pod AI Act: dokumentacja testowa i QMS dla dostawców

2390,00 PLN

26.11.26, 14.01.27, 04.03.27
2 dni
Popularne artykuły
Język Gherkin: co to jest i jak go używać w testowaniu oprogramowania, grafika Quality Island
Język Gherkin: co to jest i jak go używać w testowaniu oprogramowania
Smoke test: co to jest i czym różni się od sanity testu, grafika Quality Island
Smoke test: co to jest, kiedy go uruchamiać i czym różni się od sanity testu
Jak zostać testerem oprogramowania: ścieżka krok po kroku, grafika Quality Island
Jak zostać testerem oprogramowania: ścieżka krok po kroku bez dyplomu informatyka
Najnowsze artykuły
Agentic testing w pracy zespołu QA, co się zmienia w testowaniu z agentami AI
Agentic testing: czy Wasza praca właśnie się zmienia, czy znika
Ile kosztują testy oprogramowania, cennik i czynniki ceny, Quality Island
Ile kosztują testy oprogramowania: cennik i czynniki ceny
Strategia testowania w organizacji, strategia jakości na przykładzie case PKO BP, Quality Island
Strategia testowania w organizacji: czego uczy nas case PKO BP
Popularne kategorie