12

我喜欢保持干燥,这就是为什么我想在我的步骤之一中包含以下内容:

if first(:css, "#blabla") != nil
    find_by_id(blabla).click
end
find_by_id(....)
....

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

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

4

2 回答 2

21

我看到您的代码对浏览器进行不必要的第二次查询的问题(您已经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?
于 2013-03-21T21:01:25.323 回答
0

当您#find用来决定元素是否存在时,您应该减少该调用的等待时间:

if page.has_css?('#blabla', wait: 0)
  # Do something
end

但是,在您的特殊情况下,建议的解决方案甚至更好,因为它可以为您节省对同一元素的多次“查找”调用。

于 2019-07-01T13:53:42.363 回答