`visible?`和`present?'之间有什么区别?

Old*_*ian 3 watir

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

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

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

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

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

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

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

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

Jus*_* Ko 8

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>
Run Code Online (Sandbox Code Playgroud)

在查找页面上没有的div时,您可以看到区别:

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

browser.div(:id => '3').present?
#=> false
Run Code Online (Sandbox Code Playgroud)

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

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

browser.div(:id => '2').visible?
#=> false
browser.div(:id => '2').present?
#=> false
Run Code Online (Sandbox Code Playgroud)

这两种方法的比较exists?可以在Watirways书中找到.