Поиск местоположений xpath или cssSelector для всех - PullRequest
0 голосов
/ 03 июля 2018

Я относительно новичок в разработке, поэтому, пожалуйста, прости меня, если что-то из этого кажется довольно любительским. Одна из причин, по которой я написал этот вопрос, - помочь мне подтолкнуть меня к ответу, а другая - убедиться, что я следую хорошей практике кодирования.

Задача -

Я использую Java & Selenium для проверки очень большой, динамически заполненной таблицы. Мне нужно найти конкретный список элементов, где текст соответствует регистрозависимой строке -

List<WebElement> AllPaths = getCurrentDriver().findElements(By.xpath("//*[text()[contains(.,'" + fixedString + "')]]"));

Таблица, которую я проверяю, в основном представляет собой большую сетку в стиле календаря. Если я не нахожу доказательств fixedString, то я хочу выполнить итерацию по одному месяцу за раз, пока не НАЙДУ Фиксированную строку.

Проблема -

Приведенный выше код возвращает исключение, если не удается найти элемент. Моей первой мыслью было настроить цикл while, пытаясь / перехватывая исключение, а затем повторяя, пока исключения не прекратились. Однако это кажется мне неправильным - я не думаю, что я должен по сути «проглатывать» исключения. Тем не менее, я не уверен, как правильно найти этот элемент, который не приводит к исключению, если он не может его найти.

Прав ли я, считая плохой идеей писать код, который, как вы знаете, вызывает исключение, а затем просто проглотить его и двигаться дальше?

Надеюсь, это имеет смысл, поскольку я говорю, что я новичок, поэтому, пожалуйста, будьте нежны:)

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Приведенный выше код возвращает исключение, если не удается найти элемент.

Документация гласит: findElements возвращает пустой список, когда элементы не найдены. Он не должен бросать никаких исключений в этом случае. Возможно ли, что вы по ошибке использовали findElement вместо findElements? Какой тип исключения генерируется и что это за сообщение?

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

0 голосов
/ 03 июля 2018

Вы можете попробовать что-то вроде -

if(AllPaths.size()>0){
  //logic when elements found with fixed string
}else{
//logic to iterate over another month
}

Кроме того, ваше утверждение мне кажется неверным. Должно быть -

List<WebElement> AllPaths = getCurrentDriver().findElements(By.xpath("//*[contains(text(),'" + fixedString + "')]"));

findElements не выбрасывает исключение таким образом. Он вернется пустым, если элементы не найдены. Кажется, исключение связано с неправильным оператором, который вы используете для поиска элементов.

...