我想在找不到元素时发出自定义错误消息...
if find(:xpath, '*[@id="broken_path"]/div/a') == nil #or false?
raise 'designer error message'
end
我需要尝试抓住吗?
答案 0 :(得分:2)
只需创建自己的异常类:
class MyFancyException < StandardError
end
然后你可以raise
:
raise MyFancyException, "Fancy error message"
Ruby中不需要try
/ catch
。您使用rescue
:
def example
do_stuff
rescue MyFancyException => e
# e contains exception with message
end
答案 1 :(得分:2)
Capybaras find
要么返回元素,要么引发异常。要抓住你需要使用救援
def find_my_element
find(:xpath, '*[@id="broken_path"]/div/a')
rescue Capybara::ElementNotFound
raise 'designer error message'
end
请注意,如果在within
块(或任何其他同步Capybara块)内调用此类方法,则可能会失败一些等待/重试行为,因为Capybara希望看到ElementNotFound错误。你可能最好注册你自己的选择器,它允许你指定你自己的描述,这些描述将在Capybara :: ElementNotFound的消息中返回(参见 - https://github.com/teamcapybara/capybara/blob/master/lib/capybara/selector.rb#L67 - 以Capybara提供的选择器为例)
Capybara.add_selector(:my_selector) do
xpath { |_unused| '*[@id="broken_path"]/div/a' }
# could also be written as
# css { |_unused| '#broken_path div a' }
describe do |_options|
"my description"
end
end
find(:my_selector)