Ruby Capybara Element not found错误处理

Ruby Capybara Element not found error handling

internet.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 而不是抛出错误并停止程序?谢谢。

首先,停止使用那样的 xpaths - 它们将非常脆弱且难以阅读。没有看到 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

作为已接受答案的替代方案,您可以考虑接受 count 参数作为预期匹配数的 #first 方法,或者 null 也允许空结果

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

如果找到 returns 元素的文本,否则 nil。而且没有必要忽略获救的异常

Capybara docs