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