isPresent和isDisplayed方法之间有什么区别

时间:2015-01-23 21:34:52

标签: javascript angularjs protractor

我刚开始使用Protractor编写测试。我想知道isPresent()isDisplayed()方法之间有什么区别。

API定义

  1. isPresent

  2. isDisplayed

  3. 那么......在什么情况下它们不同?

5 个答案:

答案 0 :(得分:46)

isPresent 如果元素存在于页面中(在DOM中),则为true,但可以隐藏(在css中显示:none) 仅当 isPresent 为true时, isDisplayed 才为真并且元素可见

答案 1 :(得分:9)

isDisplayed解析元素是否可见,但如果不在DOM中,会抛出异常。

isPresent解析它是否存在于DOM中,无论它是否实际可见。它没有抛出异常。

如果在DOM中找不到该元素,可以使用以下代码来避免isDisplayed引发的异常:

function isVisible(e) {
  var deferred = protractor.promise.defer();

  if (e) {
    e.isDisplayed().then(

      // isDisplayed Promise resolved
      function(isDisplayed) {
        deferred.fulfill(isDisplayed);
      },

      // Silencing the error thrown by isDisplayed.
      function(error) {
        deferred.fulfill(false);
      }
    );
  }
  else {
    deferred.reject(new Error('No element passed'));
  }    

  return deferred.promise;
}

即使是具有可见性和存在感的对象也可以在解析时传递,例如:

deferred.fulfill({
  visible: isDisplayed,
  present: true
});

然而,这对期望陈述不会很好。

答案 2 :(得分:2)

如果在调用isDisplayed()时收到错误,因为该元素不在页面上,即您获得NoSuchElementError: No element found using locator,请执行以下操作:

只需将.isDisplayed()包裹在您自己的方法中,然后按照以下方式处理 unresolved/rejected promise

function isTrulyDisplayed (elementToCheckVisibilityOf) {
  return elementToCheckVisibilityOf.isDisplayed().then(function (isDisplayedd) {
       return isDisplayedd;
}).then(null, function (error) {
  console.log('A NoSuchElement exception was throw because the element is NOT displayed so we return false');
  return false;
});  };

希望这有助于那里的人!

答案 3 :(得分:2)

IsPresent():如果DOM中存在元素,则返回TRUE,否则返回false

IsDisplayed():

  • 如果DOM中存在元素并且可见,则返回TRUE。
  • 如果DOM中存在元素并且已隐藏,则返回FALSE。
  • 如果DOM中不存在元素
  • ,则抛出异常

答案 4 :(得分:0)

isDisplayed()和isPresent()之间存在重大差异。

isDisplayed() - 您的元素出现在页面上但会显示。

isPresent() - 您的元素出现在页面的整个DOM中。可能它可以隐藏或不禁用,但存在。

当您需要验证要搜索的特定元素时,不应使用isPresent(),而是可以使用它来根据该元素的存在来验证其他一些检查。