【问题标题】:What's the difference between `visible?` and `present?`?`visible?` 和 `present?` 有什么区别?
【发布时间】:2014-09-16 20:06:48
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: watir


    【解决方案1】:

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

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

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

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

    例如,给定页面:

    <html>
      <body>
        <div id="1" style="display:block;">This text is displayed</div>
        <div id="2" style="display: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? 的比较。

    【讨论】:

    • 这篇文章的结合,以及《水道》中给出的描述,为我提供了完整的答案。
    • 请注意,Watir v7.0 的计划是使 #visible? 的行为与 #present? 完全相同。
    • 你会用什么来验证元素是否在 DOM HTML 中可用,而不是在 UI 页面中。
    • @AshokkumarGanesan,你会使用#exists?
    猜你喜欢
    • 2014-03-08
    • 2012-10-22
    • 2014-12-04
    • 2016-06-18
    • 1970-01-01
    • 2010-11-11
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    相关资源
    最近更新 更多