Есть ли смысл обрабатывать исключения в selenium помимо целей ведения журнала?

#java #selenium #exception #appium

#java #selenium #исключение #appium

Вопрос:

Мне трудно понять смысл обработки исключений в selenium. Например, если я попытаюсь щелкнуть по элементу, и элемент не может быть найден, тогда NoSuchElementException произойдет. Я могу перехватить исключение, создать новое RunTimeException или ничего не делать. Результат будет тем же (программа завершится сбоем и остановится).

Зачем мне утруждать себя обработкой такого исключения?

Я что-то здесь упускаю?

Спасибо

     public void clickOnElement(MobileElement element, Integer waitInSeconds){
    waitInSeconds = (waitInSeconds != null ? waitInSeconds : this.secondsToWait);
    try {
        waitFor(ExpectedConditions.elementToBeClickable(element),waitInSeconds);
        element.click();
    } catch (Exception e) {
        System.out.println("Could not click on element");
        e.printStackTrace();
    }
}
 

Комментарии:

1. Если вам нужно было дождаться добавления элемента после загрузки страницы (подумайте о div, который загружается асинхронно), вы можете захотеть, чтобы какой-нибудь код постоянно пытался постоянно искать этот элемент и возвращал только в том случае, если он найден, или прошло какое-то время.

Ответ №1:

Обработка исключений для Selenium — отличный способ защитить ваши тесты от непредвиденных условий. Например, вы можете попытаться снова найти элемент, если он больше не привязан к странице, например, после выполнения javascript, который что-то меняет в элементе.

 try{
    driver.findElement(By.id("MyId")).click();
} catch (StaleElementReferenceException e){
    driver.findElement(By.id("MyId")).click();
}
 

Или, например, вы можете игнорировать, если элемент не отображается, например, наложение GDPR в верхней части страницы после входа в систему.

 try {
    wait.until(ExpectedConditions.presenceOfElementLocated(By.id("gdpr_overlay")));
} catch (TimeoutException ignored){

}
 

Это проигнорирует исключение, вызванное ожиданием, если наложение не появится, и продолжит выполнение вашего теста.

Ответ №2:

Исключения — это очень полезные функции, гораздо более полезные, чем просто для ведения журнала, вы должны посмотреть его. Вы можете делать все, что хотите, в блоке catch, вы можете попытаться щелкнуть другой элемент, если первый не удался, перенаправить на другую страницу… Возможности действительно безграничны. Совет: избегайте общих исключений, вы должны перехватывать конкретные исключения и реагировать соответствующим образом, а в последнем блоке catch вы можете выполнить общее исключение e и выдать ошибку.

Комментарии:

1. Итак, в принципе, если я поймаю исключение и вместо этого нажму на другой элемент в блоке catch, программа продолжит работу?

2. Для меня это очень похоже на использование исключений для управления потоком.

Ответ №3:

Во-первых, обработка исключений не является концепцией Selenium, но она связана с JAVA. Теперь, переходя к использованию обработки исключений, это имеет большую глубину концепции, которую вы поймете при создании фреймворков, но на данный момент важно понимать, что, обрабатывая исключения, вы можете продолжать выполнять свой код без того, чтобы JVM завершала остальные, когда сталкивалась с исключением.

 try{
}
catch{
}
finally
{
}
 

Finally также очень полезно, когда вы всегда хотите выполнить блок кода независимо от того, пройдет ли сценарий ur или завершится неудачей, например, как driver.close() .
Надеюсь, это помогло… Счастливого кодирования 🙂