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

翁鹏飞*_*翁鹏飞 32 javascript angularjs protractor

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

API定义

  1. 存在

  2. 被展示

那么......它们在哪些情况下有所不同?

sap*_*ens 46

isPresent:如果在一个网页(DOM)存在的元素,但可以隐藏(没有在CSS中显示)为真 isDisplayed是真的只有isPresent是真实的元素可见

  • 实际上,如果元素不存在,isDisplayed将抛出异常 (12认同)

小智 11

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

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

deferred.fulfill({
  visible: isDisplayed,
  present: true
});
Run Code Online (Sandbox Code Playgroud)

但是,这与expect语句不兼容.


bsk*_*bsk 5

IsPresent():如果元素存在于 DOM 中,则返回 TRUE(可能隐藏也可能不隐藏),否则返回 false

被陈列():

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