Когда возникает: Когда элемент не найден в DOM страницы Причины:
Обработка:
try {
WebElement element = driver.findElement(By.id("missing-element"));
} catch (NoSuchElementException e) {
System.out.println("Элемент не найден: " + e.getMessage());
// Добавить ожидание или проверить локатор
}
Когда возникает: При истечении времени ожидания Причины:
Обработка:
try {
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("slow-element")));
} catch (TimeoutException e) {
System.out.println("Элемент не появился за отведенное время");
// Увеличить таймаут или проверить условия
}
Когда возникает: При обращении к "устаревшему" элементу Причины:
Обработка:
List<WebElement> elements = driver.findElements(By.cssSelector(".dynamic-item"));
// DOM обновился
try {
elements.get(0).click();
} catch (StaleElementReferenceException e) {
System.out.println("Элемент устарел, повторяем поиск");
elements = driver.findElements(By.cssSelector(".dynamic-item"));
elements.get(0).click();
}
Когда возникает: Когда элемент есть в DOM, но с ним нельзя взаимодействовать Причины:
Обработка:
try {
driver.findElement(By.id("disabled-button")).click();
} catch (ElementNotInteractableException e) {
System.out.println("Элемент есть, но не кликабелен: " + e.getMessage());
// Проверить видимость/кликабельность через ExpectedConditions
}
Когда возникает: При попытке переключиться на несуществующее окно/фрейм Причины:
Обработка:
try {
driver.switchTo().window("invalid-window"));
} catch (NoSuchWindowException e) {
System.out.println("Окно не найдено: " + e.getMessage());
// Переключиться на существующее окно
driver.switchTo().window(mainWindowHandle);
}
Когда возникает: Когда клик перехватывается другим элементом Причины:
Обработка:
try {
driver.findElement(By.id("submit")).click();
} catch (ElementClickInterceptedException e) {
System.out.println("Клик перехвачен: " + e.getMessage());
// Ожидать исчезновения перекрывающего элемента
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("loader")));
driver.findElement(By.id("submit")).click();
}
Когда возникает: Общее исключение для различных проблем WebDriver Причины:
Обработка:
try {
driver.get("https://example.com");
} catch (WebDriverException e) {
System.out.println("Общая ошибка WebDriver: " + e.getMessage());
// Перезапустить драйвер или проверить соединение
}
try {
// тестовые действия
} catch (Exception e) {
TakesScreenshot ts = (TakesScreenshot)driver;
File src = ts.getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(src, new File("./screenshots/error.png"));
throw e;
}
Профессиональный совет: Всегда анализируйте исключения и добавляйте обработку, которая поможет:
Для сложных сценариев реализуйте retry-механизм для обработки временных проблем (но не злоупотребляйте им).