如何仅在元素可见时才执行逻辑

时间:2017-04-19 23:08:25

标签: ruby selenium capybara

我不知道这是否可行但是我想分支我的代码并且只对元素执行操作(如果它存在于DOM中),否则我希望测试继续正常,如下所示:

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

每当我这样做时,测试总是失败,因为它找不到选择器,这是我试图测试的东西。

我该如何做到这一点?

1 个答案:

答案 0 :(得分: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
相关问题