2017-04-19 84 views
0

我不知道這是否可能,但我想分支我的代碼,並且只對元素執行操作(如果它存在於DOM中),否則我想要測試繼續正常,像這樣:如何僅在元素可見的情況下執行邏輯

def reset_filters() 
    clear_filters() if find(:filter_icon_button).exists? 
end 

每當我這樣做,是因爲它無法找到的選擇,這是我想測試的東西測試總是失敗。

我該如何做這項工作?

+0

我們不關心你是否是一個新的語言。我們只關心你已經研究過這個問題,並努力解決這個問題,然後問一個簡明而又充分問的問題。 「[問]」,「[mcve]」及其鏈接頁面,以及「[Stack Overflow用戶需要多少研究工作?](http://meta.stackoverflow.com/questions/261592)」。 –

回答

1

您需要使用的has_xxx?方法,返回布爾結果而不是提高的,如果它不能找到 - http://www.rubydoc.info/gems/capybara/Capybara/Node/Matchers#has_selector%3F-instance_method

def reset_filters() 
    clear_filters() if page.has_selector?(:filter_icon_button) 
end 

注意:這將等待Capybara.default_max_wait_time秒匹配元素在頁面上可見(然後如果它永遠不會返回false)。如果你只是想讓它立即決定沒有可能的等待,你可以做

page.has_selector?(:filter_icon_button, wait: 0) # or wait: false 
相關問題