“可见?”和“现在”之间的区别是什么?

时间:2014-09-16 20:06:48

标签: watir

从Watir API中,我发现了两个断言(当然可能不正确):

  • 如果我只是想验证元素是否在HTML中,我可以使用exists?。我不在乎它是否可见。
  • 如果我希望能够在页面上看到它,我可以使用visible?

那么,我什么时候使用present?

在我看来,我可以回答我自己的问题:

  • 如果我希望能够在页面上看到它,我可以使用present?,但我不希望它在HTML中。

所以,如果我使用记号笔在屏幕上写东西,那会是present?吗?

(对不起,如果我似乎不敬。)

所以 - 在标题中提问的另一种方式 - 我应该何时使用visible?,何时应该使用present?

1 个答案:

答案 0 :(得分:7)

visible?present?之间的区别在于HTML中不存在该元素。

当元素不在HTML中时(即exists?为false):

  • visible?会抛出异常。
  • present?将返回false。

我倾向于坚持present?,因为我只关心用户是否可以看到该元素。我不在乎是否因为它被样式隐藏而无法看到,例如display:none;,或者不在DOM中,例如它被删除了。我只会使用visible?如果应用程序实际上将不在DOM中的元素视为与DOM不同但不可见的含义。

例如,给定页面:

<html>
  <body>
    <div id="1" style="block:display;">This text is displayed</div>
    <div id="2" style="block:none;">This text is not displayed</div>
  </body>
</html>

在寻找不在页面上的div时,您可以看到区别:

browser.div(:id => '3').visible?
#=> Watir::Exception::UnknownObjectException

browser.div(:id => '3').present?
#=> false

对于页面上的元素,两种方法将是相同的:

browser.div(:id => '1').visible?
#=> true
browser.div(:id => '1').present?
#=> true

browser.div(:id => '2').visible?
#=> false
browser.div(:id => '2').present?
#=> false

可以在Watirways book中找到这两种方法与exists?的比较。