org.openqa.селен.Исключение NoSuchElementException: Элемент не может быть расположен на странице с использованием заданных параметров поиска при проверке, если условие

#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 вещи.

  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.