检查元素是否存在而不会在Capybara中浪费时间

Tra*_*ash 11 automated-tests cucumber capybara

我喜欢保持干燥,这就是为什么我希望在我的一个步骤中有以下内容:

if first(:css, "#blabla") != nil
    find_by_id(blabla).click
end
find_by_id(....)
....
Run Code Online (Sandbox Code Playgroud)

这意味着,它将查找某个元素,如果存在,它将单击它.如果没有,我也不会浪费时间(我的默认等待时间为20秒,如果我把将要使用的find ,而不是first在那里.

主要问题是我不想在这种情况下检查某个元素时浪费时间,但我也想知道这是否是一个好方法.

And*_*lov 20

我看到你的代码对浏览器做了不必要的第二次查询的问题(你已经first(:css, "#blabla")没有必要这么做了find_by_id(blabla))

我建议你使用一个查询找到元素:

el = first('#blabla')
el.click unless el.nil?
Run Code Online (Sandbox Code Playgroud)

请注意,这里没有丢失时间,因为first没有阻止.

但是,first不检查页面上是否没有其他元素.您可以添加:maximum以检查它:

el = first('#blabla', maximum: 1)
el.click unless el.nil?
Run Code Online (Sandbox Code Playgroud)