2016-11-27 15 views

答えて

2

カピバラfindどちらかが要素を返すか、例外を発生させます。あなたはwithinブロック(またはその他の同期カピバラブロック)内のようにメソッドを呼び出した場合、それはカピバラので、待機/再試行の動作の一部を倒すことが救助

def find_my_element 
    find(:xpath, '*[@id="broken_path"]/div/a') 
rescue Capybara::ElementNotFound 
    raise 'designer error message' 
end 

注意を使用する必要があるだろうことをキャッチするために、 ElementNotFoundエラーが表示されます。あなたはカピバラのメッセージで返されます、あなた自身の説明を指定することができ、独自のセレクタを登録したほうが良いかもしれ:: ElementNotFoundは(参照 - https://github.com/teamcapybara/capybara/blob/master/lib/capybara/selector.rb#L67を - カピバラが例としてセレクタを提供するために)

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) 
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 
+0

方法を最初にデフォルトの例外を呼び出さないようにするにはどうすればいいですか? – TangibleDream

+1

例外を「レスキュー」して自分自身を再起動する必要があります。 – tadman

関連する問題