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
。而且没有必要忽略获救的异常
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
。而且没有必要忽略获救的异常