当find无法找到元素时,如何创建设计器异常?

时间:2016-11-27 00:02:28

标签: ruby capybara

我想在找不到元素时发出自定义错误消息...

if find(:xpath, '*[@id="broken_path"]/div/a') == nil #or false?
   raise 'designer error message'
end

我需要尝试抓住吗?

2 个答案:

答案 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)