2017-04-19 47 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 
相关问题