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

How to execute logic only if an element is visible

我不知道这是否可行,但我想分支我的代码,并且只对 DOM 中存在的元素执行操作,否则我希望测试继续正常进行,像这样:

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

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

我怎样才能使这个工作?

您需要使用 has_xxx? 方法之一,该方法 return 一个布尔结果,而不是在找不到时引发 - 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 秒,直到匹配元素在页面上可见(然后 return false,如果它从未出现)。如果你只是想让它在没有可能等待的情况下立即决定,你可以这样做

page.has_selector?(:filter_icon_button, wait: 0) # or wait: false