从Watir API中,我发现了两个断言(当然可能不正确):
exists?
。我不在乎它是否可见。visible?
。那么,我什么时候使用present?
?
在我看来,我可以回答我自己的问题:
present?
,但我不希望它在HTML中。 所以,如果我使用记号笔在屏幕上写东西,那会是present?
吗?
(对不起,如果我似乎不敬。)
所以 - 在标题中提问的另一种方式 - 我应该何时使用visible?
,何时应该使用present?
?
答案 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?
的比较。