Как получить false, если элемент отсутствует на странице в веб-драйвере Selenium - PullRequest
0 голосов
/ 19 января 2019

Я работаю с автоматизацией, время от времени сталкиваюсь с проблемой. В общем, в моем коде есть логика, в которой мне нужно проверить наличие элемента, и следующий шаг будет зависеть от результата проверки. Но базовые инструменты Selenium возвращают только логическое значение true, иначе NoSuchElementException. Но мне нужно «ложь».

Как и в моем предыдущем проекте, сейчас я использую простую оболочку для решения этой проблемы:

private boolean isDisplayedOnPage(WebElementFacade wef){
    try{
        return wef.isDisplayed();
    } catch (NoSuchElementException nsee){
        return false;
    }
}

Работает отлично, но использование исключения меня смущает. Кроме того, я читал об «wait», но он также не возвращает false, только позволяет мне игнорировать исключение. Существуют ли встроенные инструменты для решения этой проблемы в Selenium? Или, может быть, кто-то может предложить более элегантный способ ее решения?

Ответы [ 2 ]

0 голосов
/ 19 января 2019
Boolean bool = my_driver.findElements(By.id("my element id")).size()>0;

это вам поможет.

0 голосов
/ 19 января 2019

Одним из основных принципов необработанного API WebDriver является ожидание того, что пользователь знает состояние DOM для автоматизируемой страницы.Это означает, что в логике API вызов findElement с использованием локатора несуществующего элемента является исключительным условием, что делает исключение совершенно законным.Хотя можно утверждать, что ожидание, встроенное в поведение API, ошибочно, это выходит за рамки этого ответа.Если вам нужна логическая логика для определения того, существует ли элемент, вам нужен метод-обертка, как вы уже обнаружили.В рамках этого метода оболочки у вас есть два варианта:

  1. Используйте findElement и поймайте NoSuchElementException.Обратите внимание, что использование WebDriverWait неявно ловит это исключение для вас, как и семантический эквивалент.

  2. Использовать findElements (обратите внимание на "s"), который возвращает пустой список без исключения, если элемент не существует.

...