#java #selenium #if-statement
Вопрос:
Я пишу условие if, чтобы найти расположение элемента в моем проекте.
if (!(driver.findElement(MobileBy.xpath(ObjRepoProp.getProperty("searchTextBox_XPATH"))).isDisplayed()
|| driver.findElement(MobileBy.xpath(ObjRepoProp.getProperty("routeOverview_XPATH"))).isDisplayed()
|| driver.findElement(MobileBy.xpath(ObjRepoProp.getProperty("scrollNavigationDrawer_XPATH")))
.isDisplayed())) {
throw new IllegalStateException("This is not Destination Input page");
}
В этом коде, если одно из условий станет истинным, то также «org.openqa.selenium.Исключение NoSuchElementException: Элемент не может быть расположен на странице с использованием заданных параметров поиска.» не удалось запустить триггер и тестовые наборы.
Ответ №1:
Давайте сначала поймем, как это работает.
С вашим кодом происходят 2 вещи.
- Вы пытаетесь найти элемент на веб-странице
- Как только у вас есть элемент, вы проверяете, виден он или нет.
Поэтому, если все элементы расположены и найдены на странице, то только это будет работать, иначе вы всегда будете получать NoSuchElementException
.
Ответ №2:
Это ожидаемое поведение.
Смотрите, если элемент не найден, то Селен выбросит
org.openqa.селен.Исключение NoSuchElementException:
так .isDisplayed()
что на самом деле ничего не значит, если сам элемент не был найден в HTML DOM.
потому .isDisplayed()
что предназначен для поиска того, является ли элемент
"""Whether the element is visible to a user."""
поэтому, когда элемент, любой используемый вами локатор , недоступен, Селен выбросит org.openqa.selenium.NoSuchElementException:
его перед вызовом .isDisplayed()
Решение :
Теперь, говоря о решении, я бы рекомендовал вам завернуть этот код в тело try and catch.
Код :
try {
if (!(driver.findElement(MobileBy.xpath(ObjRepoProp.getProperty("searchTextBox_XPATH"))).isDisplayed()
|| driver.findElement(MobileBy.xpath(ObjRepoProp.getProperty("routeOverview_XPATH"))).isDisplayed()
|| driver.findElement(MobileBy.xpath(ObjRepoProp.getProperty("scrollNavigationDrawer_XPATH")))
.isDisplayed())) {
throw new IllegalStateException("This is not Destination Input page");
}
}
catch (NoSuchElementException ne) {
System.out.println("In catch block to handle no such element");
ne.printStackTrace();
}
catch(Exception e) {
System.out.println("In catch block to handle Generic exception");
Exception e.printStackTrace();
}
если вы все еще видите проблемы, вы можете попробовать использовать findElements
и проверить его размер в блоке if.