Обработка на изключения в Selenium Webdriver (типове)
⚡ Умно обобщение
Обработка на изключения Selenium WebDriver предпазва от спиране на неуспешна командаping цял тестов цикъл. Java try-catch, множество catch блокове, throw, throws и накрая всеки дава на скрипта различен начин за възстановяване.
Какво е изключение?
Изключението е грешка, която възниква по време на изпълнението на програма. Докато програмата работи, езикът за програмиране генерира изключение, което трябва да бъде обработено, в противен случай програмата се срива.
Изключението показва, че въпреки че събитието може да възникне, този тип събитие се случва рядко. Когато даден метод не е в състояние да обработи изключението, то се хвърля към неговата извикваща функция. В Java, което задвижва повечето Selenium В пакетите, всяко изключение на WebDriver е непроверено, така че компилаторът никога не ви принуждава да го уловите — необработена грешка се появява само по време на изпълнение.
Видове изключения в Selenium уебдрайвер
WebDriverException е базовият клас на йерархията и всяко изключение по-долу наследява от него. Таблицата изброява всички 41 изключения, които може да срещнете, заедно с условието, което поражда всяко от тях.
| # | изключение | Когато се случи |
|---|---|---|
| 1 | ElementNotVisibleException | Съществуващ елемент в DOM има набор от функции, които са скрити. |
| 2 | Изключението „Не е избрано“ на елемента | Елементът е в DOM, но не може да бъде избран, така че взаимодействието е невъзможно. |
| 3 | NoSuchElementException | Елементът не можа да бъде намерен с локатор доставен. |
| 4 | NoSuchFrameException | - рамка Целта, към която да се превключи, не съществува. |
| 5 | NoAlertPresentException | Преминаване към сигнализира работи, когато не е подадено предупреждение. |
| 6 | NoSuchWindowException | Целевият прозорец, към който да се превключи, не съществува. |
| 7 | Изключение за препратка към стар елемент | Уеб елементът е отделен от текущия DOM. |
| 8 | Изключение на SessionNotFoundException | WebDriver действа след като затворите браузъра. |
| 9 | TimeoutException | Команда не е завършена навреме — например, търсеният елемент не е намерен в рамките на чакането. |
| 10 | WebDriverException | Базов клас на другите изключения на WebDriver; също се повдига, когато WebDriver действа веднага след затваряне на браузъра. |
| 11 | Изключение за затворена връзка | Има прекъсване на връзката в драйвера. |
| 12 | Изключението за прекъснато кликване на елемента | Елементът, който получава събитията, скрива елемента, поискан за кликването. |
| 13 | Изключението „Не е интерактивно за елемента“ | Елементът присъства в DOM, но е невъзможно да се взаимодейства с него. |
| 14 | Изключение при грешка в отговор | Нещо се е объркало при взаимодействието с Firefox разширение или отдалечения сървър на драйвери. |
| 15 | ErrorHandler.UnknownServerException | Използва се като заместител, когато сървърът върне грешка без стек trace. |
| 16 | Изключение за неуспешна активация на име | Активирането на IME двигателя е неуспешно. |
| 17 | Изключението „Не е налично“ за Ime | Поддръжката на IME не е налична. |
| 18 | Изключение за несигурен сертификат | Навигацията накара потребителския агент да стигне до предупреждение за сертификат, което може да бъде причинено от невалиден или изтекъл TLS сертификат. |
| 19 | Изключение за невалиден аргумент | Аргументът не принадлежи към очаквания тип. |
| 20 | Изключение за InvalidCookieDomain | A курабийка се добавя под различен домейн, вместо под текущия URL. |
| 21 | Изключение за невалидни координати | Съвпадащата взаимодействаща операция не е валидна. |
| 22 | Изключение за състоянието на невалиден елемент | Командата не може да бъде завършена, защото елементът е невалиден. |
| 23 | Изключение за невалиден идентификатор на сесия | Даденият идентификатор на сесия не е сред активните сесии, така че не съществува или е неактивен. |
| 24 | НевалиденПревключвателКъмTargetизключение | Целта на рамката или прозореца, към която да се превключи, не съществува. |
| 25 | Javascriptизключение | Възникна грешка при изпълнението JavaСкрипт, даден от потребителя. |
| 26 | JsonException | Сесията се заявява, когато не е създадена. |
| 27 | NoSuchAttributeException | Атрибутът на елемент не можа да бъде намерен. |
| 28 | ДвижениеTargetИзключение извън границите | Целта, предоставена на метода ActionChains move(), е невалидна — например, извън документа. |
| 29 | NoSuchContextException | ContextAware, който извършва тестване на мобилни устройства, не може да намери заявения контекст. |
| 30 | NoSuchCookieException | Сред „бисквитките“ на текущо разглеждания документ не е намерена „бисквитка“, съответстваща на даденото име на пътя. |
| 31 | Не е намерено изключение | Подклас на WebDriverException, който се генерира, когато даден елемент в DOM не съществува. |
| 32 | Изключение на RemoteDriverServer | Сървърът не отговаря, защото описаните възможности не са правилни. |
| 33 | Изключение на екрана | Не е възможно да заснемете екран. |
| 34 | Изключението SessionNotCreatedException | Нова сесия не можа да бъде създадена успешно. |
| 35 | Изключението „Не е възможно да се зададе бисквитка“ | Шофьорът не може да зададе „бисквитка“. |
| 36 | Неочаквано изключение за име на етикет | Клас за поддръжка не получи уеб елемент, както се очакваше. |
| 37 | Необработено изключение за предупреждение | Има предупреждение, но WebDriver не е в състояние да извърши операцията по предупреждението. |
| 38 | Изключение за неочаквано предупреждение | Появява се неочаквано предупреждение. |
| 39 | Изключение за неизвестен метод | Заявената команда съвпада с известна URL но не е метод за това конкретно URL. |
| 40 | UnreachableBrowserException | Браузърът не може да се отвори или по някаква причина се е сринал. |
| 41 | Неподдържано изключение за команда | Отдалеченият WebDriver не изпраща валидни команди, както се очаква. |
Три доминират ежедневното отстраняване на грешки: NoSuchElementException означава грешка XPath или елемент, който не е рендиран, TimeoutException означава, че чакането е твърде кратко за AJAX отговор, а StaleElementReferenceException следва динамичен повторно рендериране.
Как да се обработват изключения в Selenium
Ето стандартните конструкции за обработка на изключения в Selenium WebDriver. Всеки е обикновен Java, така че работи във всеки Скрипт за уеб драйвер без допълнителни библиотеки.
Стъпка 1) Опитайте-уловете
Този метод може да улавя изключения, използвайки комбинация от ключовите думи try и catch. Командата try маркира началото на блока, а catch се поставя в края на блока try, където разрешава изключението.
try { // Code } catch (Exception e) { // Code for Handling exception }
Стъпка 2) Множество блокове за улавяне
Има различни видове изключения и един блок код може да генерира повече от един. Множеството catch блокове ви позволяват да обработвате всеки тип поотделно със собствен код. Можете да използвате повече от два catch блока и няма ограничение за това колко да добавите.
try { //Code } catch (ExceptionType1 e1) { //Code for Handling Exception 1 } catch (ExceptionType2 e2) { //Code for Handling Exception 2 }
Стъпка 3) Хвърлете
Когато искате да генерирате изключение, ключовата дума throw го предава за обработка по време на изпълнение. Използвайте throw, когато предавате изключение нататък, вместо да го разрешавате в текущия метод.
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); } }
Стъпка 4) Множество изключения
Можете да споменете различни изключения в клаузата throws.
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 }
Стъпка 5) Накрая
Ключовата дума finally създава блок под блока try. Тя се изпълнява независимо от това дали е възникнало изключение, което я прави подходящо място за затваряне на драйвер или освобождаване на файлов дескриптор.
try { //Code } catch (ExceptionType1 e1) { //Catch block } catch (ExceptionType2 e2) { //Catch block } catch (ExceptionType3 e3) { //Catch block } finally { //The finally block always executes. }
Методи за показване на информация за изключения
След като бъде заловено изключение, самият обект съдържа диагностичните подробности. Можете да използвате следните методи, за да ги покажете:
| Начин на доставка | Какво докладва |
|---|---|
| printStackTracе() | Отпечатва стека tracд., името на изключението и друго полезно описание. |
| toString () | Връща текстово съобщение, описващо името и описанието на изключението. |
| getMessage() | Показва описанието на изключението самостоятелно. |
Свържете ги със екранна снимка, направена вътре в блока catch, и едно неуспешно изпълнение ще покаже както какво е счупено, така и как е изглеждала страницата.
