Ruby Обработка ошибок Capybara Element not found - PullRequest
2 голосов
/ 16 июня 2020

inte rnet .find (: xpath, '/ html / body / div [1] / div [10] / div [2] / div [2] / div [1] / div [1] / div [1] / div [5] / div / div [2] / a '). Text

Я просматриваю серию страниц, и иногда этот xpath будет недоступен. Как мне перейти к следующему URL-адресу вместо того, чтобы выдавать ошибку и останавливать программу? Спасибо.

Ответы [ 2 ]

2 голосов
/ 16 июня 2020

Во-первых, перестаньте использовать такие xpaths - они будут очень ужасными agile, и их будет ужасно читать. Не видя HTML, я не могу дать вам лучшего, но, по крайней мере, на полпути должен быть элемент с id, на который вы можете настроить таргетинг.

Затем вы можете поймать исключение, возвращенное из find, и игнорировать его, или еще лучше, вы можете проверить, есть ли на странице первый элемент

if internet.has_xpath?(...)
  internet.find(:xpath, ...).text
   ...
else
   ... whatever you want to do when it's not on the page
end
1 голос
/ 17 июня 2020

В качестве альтернативы принятому ответу вы можете рассмотреть метод #first, который принимает аргумент count в качестве количества ожидаемых совпадений или null, чтобы разрешить также пустые результаты

internet.first(:xpath, ..., count: nil)&.text

, который возвращает элемент текст, если он найден, и nil в противном случае. И нет необходимости игнорировать спасенное исключение

См. Документы Capybara

...