我喜欢保持干燥,这就是为什么我希望在我的一个步骤中有以下内容:
if first(:css, "#blabla") != nil
find_by_id(blabla).click
end
find_by_id(....)
....
这意味着,它将查找某个元素,如果存在,它将单击它。如果没有,我不会浪费时间(我的默认等待时间是20秒,如果我在那里放find
而不是first
,将会使用。
主要问题是我不想在这种情况下检查某个元素时浪费时间,但我也想知道这是否是一个好方法。
答案 0 :(得分:20)
我发现问题是您的代码对浏览器进行了不必要的第二次查询(您已经first(:css, "#blabla")
,因此无需执行find_by_id(blabla)
)
我建议你使用一个查询找到元素:
el = first('#blabla')
el.click unless el.nil?
请注意,此处没有丢失时间,因为first
没有阻止。
但是,first
并未检查页面上是否没有其他元素。您可以添加:maximum
进行检查:
el = first('#blabla', maximum: 1)
el.click unless el.nil?
答案 1 :(得分:0)
使用#find
来确定元素是否存在时,应该减少该调用的等待时间:
if page.has_css?('#blabla', wait: 0)
# Do something
end
但是,在您的特殊情况下,建议的解决方案甚至更好,因为它可以节省您对同一元素的多次“查找”调用。