Obsługa wyjątków Selenium Sterownik sieciowy (typy)

⚡ Inteligentne podsumowanie

Obsługa wyjątków w Selenium WebDriver uniemożliwia zatrzymanie niedziałającego poleceniaping cały przebieg testowy. Java try-catch, bloki wielokrotnego catch, throw, throws i na koniec każdy z nich daje skryptowi inny sposób na odzyskanie sprawności.

  • 🔘 Definicja: Wyjątek to błąd, który pojawia się podczas wykonywania programu. Nieobsłużony błąd powoduje przerwanie działania programu.
  • Zakres: Selenium WebDriver zawiera ponad czterdzieści klas wyjątków i każda z nich wywodzi się z WebDriverException.
  • Części przestępcy: NoSuchElementException, TimeoutException, StaleElementReferenceException i ElementNotInteractableException są przyczyną większości rzeczywistych awarii.
  • 🧪 Prowadzenie: Para bloków try-catch izoluje jeden typ błędu, wiele bloków catch oddziela kilka typów i na końcu zawsze wykonuje się.
  • 🛠️. Eskalacja: Słowa kluczowe throw i throws przekazują wyjątek z powrotem do wywołującego, gdy bieżąca metoda nie może go rozwiązać.
  • 📊 Diagnoza: printStackTrace(), toString() i getMessage() raportują różne poziomy szczegółowości błędu.

Obsługa wyjątków w Selenium WebDriver z try-catch, throw i na końcu

Co to jest wyjątek?

Wyjątek to błąd występujący podczas wykonywania programu. Podczas działania programu język programowania generuje wyjątek, który musi zostać obsłużony, w przeciwnym razie program ulegnie awarii.

Wyjątek wskazuje, że chociaż zdarzenie może wystąpić, tego typu zdarzenie zdarza się rzadko. Gdy metoda nie jest w stanie obsłużyć wyjątku, jest on zgłaszany do funkcji wywołującej. W Java, który napędza większość Selenium w pakietach każdy wyjątek WebDriver nie jest sprawdzany, więc kompilator nigdy nie zmusza do jego wychwytywania — nieobsłużony błąd pojawia się dopiero w czasie wykonywania.

Rodzaje wyjątków w Selenium Sterownik sieciowy

WebDriverException to klasa bazowa hierarchii i każdy wyjątek poniżej dziedziczy po niej. Tabela zawiera listę wszystkich 41 wyjątków, które mogą wystąpić, wraz z warunkiem, który każdy z nich wywołuje.

# Wyjątek Kiedy to nastąpi
1 Wyjątek ElementNotVisible Istniejący element w DOM ma zestaw funkcji jako ukryty.
2 ElementNotSelectableException Element znajduje się w DOM, ale nie można go wybrać, więc interakcja jest niemożliwa.
3 Wyjątek NoSuchElement Nie można znaleźć elementu za pomocą lokalizator dostarczane.
4 NoSuchFrameException rama obiekt docelowy, do którego ma nastąpić przełączenie, nie istnieje.
5 Wyjątek NoAlertPresentException Przejście na zaalarmować uruchamia się, gdy nie ma żadnego alertu.
6 Wyjątek NoSuchWindow Okno docelowe, do którego ma nastąpić przełączenie, nie istnieje.
7 StaleElementReferenceException Element sieciowy jest odłączony od bieżącego DOM.
8 SessionNotFoundException WebDriver działa po zamknięciu przeglądarki.
9 Wyjątek limitu czasu Polecenie nie zostało wykonane na czas — na przykład szukany element nie został znaleziony w oczekiwaniu.
10 Wyjątek WebDriver Klasa bazowa innych wyjątków WebDriver. Występuje również, gdy WebDriver podejmuje działanie zaraz po zamknięciu przeglądarki.
11 Wyjątek ConnectionClosedException Wystąpiło rozłączenie w sterowniku.
12 ElementClickInterceptedException Element odbierający zdarzenia ukrywa element żądany do kliknięcia.
13 ElementNotInteractableException Element jest obecny w DOM, ale nie można z nim wchodzić w interakcję.
14 Wyjątek ErrorInResponseException Wystąpił błąd podczas interakcji z Firefox rozszerzenie lub zdalny serwer sterowników.
15 ErrorHandler.UnknownServerException Używane jako symbol zastępczy, gdy serwer zwraca błąd bez stosu trace.
16 Wyjątek ImeActivationFailedException Aktywacja silnika IME nie powiodła się.
17 Wyjątek ImeNotAvailableException Obsługa IME jest niedostępna.
18 Niezabezpieczony wyjątek certyfikatu Nawigacja spowodowała, że ​​użytkownik trafił na ostrzeżenie dotyczące certyfikatu, co może być spowodowane nieprawidłowym lub wygasłym certyfikatem TLS.
19 InvalidArgumentException Argument nie należy do oczekiwanego typu.
20 InvalidCookieDomainException A ciastko jest dodawany pod inną domeną, a nie pod obecną URL.
21 Wyjątek InvalidCoordinatesException Dopasowana operacja interakcyjna jest nieprawidłowa.
22 InvalidElementStateException Nie można dokończyć polecenia, ponieważ element jest nieprawidłowy.
23 InvalidSessionIdException Podany identyfikator sesji nie znajduje się wśród aktywnych sesji, więc sesja ta nie istnieje lub jest nieaktywna.
24 Nieprawidłowy przełącznikTargetWyjątek Docelowa ramka lub okno, na które ma nastąpić przełączenie, nie istnieje.
25 JavascriptWyjątek Wystąpił błąd podczas wykonywania JavaSkrypt podany przez użytkownika.
26 Wyjątek JsonException Sesja jest żądana, gdy sesja nie została jeszcze utworzona.
27 NoSuchAttributeException Nie znaleziono atrybutu elementu.
28 PrzenieśćTargetWyjątek poza granicami Cel przekazany metodzie move() klasy ActionChains jest nieprawidłowy — na przykład znajduje się poza dokumentem.
29 NoSuchContextException ContextAware, który testuje urządzenia mobilne, nie może znaleźć żądanego kontekstu.
30 NoSuchCookieException Nie znaleziono żadnego pliku cookie odpowiadającego podanej nazwie ścieżki wśród plików cookie aktualnie przeglądanego dokumentu.
31 NotFoundException Podklasa WebDriverException, zgłaszana, gdy element w DOM nie istnieje.
32 Wyjątek RemoteDriverServerException Serwer nie odpowiada, ponieważ opisane możliwości są nieprawidłowe.
33 Wyjątek zrzutu ekranu Nie ma możliwości przechwycenia ekranu.
34 Wyjątek SessionNotCreatedException Nie udało się utworzyć nowej sesji.
35 Nie można ustawić wyjątku Cookie Sterownik nie może ustawić pliku cookie.
36 Nieoczekiwany wyjątek TagNameException Klasa wsparcia nie otrzymała oczekiwanego elementu sieciowego.
37 Nieobsłużony wyjątek alertu Istnieje alert, ale WebDriver nie może wykonać operacji alertu.
38 Nieoczekiwany wyjątekAlertPresentException Pojawia się nieoczekiwany alert.
39 Nieznany wyjątek metody Żądane polecenie pasuje do znanego URL ale nie jest to metoda dla tego konkretnego URL.
40 Wyjątek UnreachableBrowserException Nie można otworzyć przeglądarki lub z jakiegoś powodu uległa ona awarii.
41 Nieobsługiwany wyjątek polecenia Zdalny WebDriver nie wysyła prawidłowych poleceń zgodnie z oczekiwaniami.

Trzy dominujące codzienne debugowanie: NoSuchElementException oznacza błędny XPath lub element, który nie został wyrenderowany, TimeoutException oznacza zbyt krótkie oczekiwanie na AJAX odpowiedź, a StaleElementReferenceException następuje po dynamiczny renderować ponownie.

Jak obsługiwać wyjątki w Selenium

Oto standardowe konstrukcje obsługi wyjątków w Selenium WebDriver. Każdy jest prosty Java, więc działa w każdym Skrypt WebDriver bez dodatkowych bibliotek.

Krok 1) Spróbuj złapać

Ta metoda może wychwytywać wyjątki za pomocą kombinacji słów kluczowych try i catch. Polecenie try oznacza początek bloku, a catch jest umieszczane na końcu bloku try, gdzie rozwiązuje wyjątek.

try
{
// Code
} catch (Exception e) {
// Code for Handling exception
}

Krok 2) Wiele bloków catch

Istnieją różne typy wyjątków, a pojedynczy blok kodu może zgłosić więcej niż jeden. Wiele bloków catch pozwala obsłużyć każdy typ osobno, za pomocą własnego kodu. Możesz użyć więcej niż dwóch bloków catch i nie ma limitu ich liczby.

try
{
//Code
} catch (ExceptionType1 e1) {
//Code for Handling Exception 1
} catch (ExceptionType2 e2) {
//Code for Handling Exception 2
}

Krok 3) Rzut

Gdy chcesz wygenerować wyjątek, słowo kluczowe throw przekazuje go do obsługi w czasie wykonywania. Użyj throw, gdy przekazujesz wyjątek dalej, zamiast rozwiązywać go w bieżącej metodzie.

public static void anyFunction() throws Exception{

try {
// write your code here
} catch (Exception b) {
// Do whatever you want to perform 
// Throw the Exception back to the system
throw(b);
}
}

Krok 4) Wiele wyjątków

W klauzuli throws można wspomnieć o różnych wyjątkach.

public static void anyFunction() throws ExceptionType1, ExceptionType2{

try {
// write your code here
} catch (ExceptionType1 e1) {
// Code to handle exception 1
} catch (ExceptionType2 e2) {
// Code to handle exception 2
}

Krok 5) Wreszcie

Słowo kluczowe Finally tworzy blok pod blokiem try. Jest on wykonywany niezależnie od tego, czy wystąpił wyjątek, co czyni go właściwym miejscem do zamknięcia sterownika lub zwolnienia uchwytu pliku.

try {
//Code
} catch (ExceptionType1 e1) {
//Catch block
} catch (ExceptionType2 e2) {
//Catch block
} catch (ExceptionType3 e3) {
//Catch block
} finally {
//The finally block always executes.
}

Metody wyświetlania informacji o wyjątkach

Po wykryciu wyjątku sam obiekt zawiera szczegóły diagnostyczne. Aby je wyświetlić, można użyć następujących metod:

Metoda wykonania Co raportuje
printStackTracmi() Drukuje stos trace, nazwa wyjątku i inne przydatne opisy.
toString () Zwraca wiadomość tekstową zawierającą nazwę i opis wyjątku.
getMessage () Wyświetla opis wyjątku osobno.

Połącz je ze zrzutem ekranu wykonanym wewnątrz bloku catch, a nieudane uruchomienie pokaże zarówno co się zepsuło, jak i jak wyglądała strona.

FAQ

Każdy wyjątek WebDriver jest niezaznaczany, ponieważ wszystkie rozszerzają RuntimeException poprzez WebDriverException. Kompilator nigdy nie żąda wykonania operacji try-catch, co jest wygodne, ale oznacza to również, że niekontrolowany błąd lokalizatora pojawia się dopiero po uruchomieniu testu.

Przenieś element bezpośrednio przed wykonaniem na nim działania, zamiast buforować odwołanie. Krótka pętla ponawiania, która ignoruje wyjątek i ponownie pobiera węzeł, obsługuje ponowne renderowanie w React lub Vue znacznie niezawodniej niż dłuższa pętla uśpienia.

Gwałtownie go redukują, ale nigdy go nie usuwają. Jawne oczekiwanie rozwiązuje jedynie problemy z synchronizacją — błędny lokalizator, przechwycone kliknięcie lub zamknięta sesja nadal generują wyjątek, którego nie może przechwycić nic poza blokiem catch.

Selenium Wersja 4 zachowuje tę samą hierarchię, ale konstruktorzy oczekiwania przyjmują teraz wartość Duration zamiast limitu czasu całkowitego, a bardziej rygorystyczna walidacja argumentów W3C oznacza, że ​​dla wartości, które Selenium 3 przyjęto bez skargi.

Silniki lokalizacyjne z funkcją samonaprawiania track, w którym selektory przerywają działanie i zamieniają je na działającą alternatywę, co eliminuje znaczną część błędów NoSuchElementException. Podobne modele klastrują powtarzający się stos. tracDzięki temu nowy defekt nie zostanie ukryty wśród niestabilnych powtórek.

Copilot opiera się na szablonach — szkielet try-catch, łańcuch catch w odpowiedniej kolejności, blok Finally, który kończy działanie sterownika. Nie wie, jakie wyjątki zgłasza Twoja własna aplikacja, więc przeglądaj każdy wygenerowany catch.

Uzupełniają go. ITestListener centralizuje logowanie i zrzuty ekranu dla każdego testu, który się nie powiedzie, co pozwala zachować przejrzystość treści testu. Po try-catch należy sięgać tylko wtedy, gdy skrypt musi kontynuować działanie po wystąpieniu błędu, a nie tylko go zgłosić.

Przekieruj sterownik do TakesScreenshot wewnątrz bloku catch lub Finally i zapisz plik przed zamknięciem sesji. Nazwanie obrazu zgodnie z metodą testową sprawia, że ​​nieudany przebieg CI jest możliwy do odczytania bez lokalnego odtwarzania błędu.

Podsumuj ten post następująco: