Подтвердить что ты не робот

В чем разница между методами isPresent и isDisplayed

Я только начал использовать Protractor для написания тестов. Мне интересно, какая разница между методами isPresent() и isDisplayed().

Определения API

Итак... в каких случаях они отличаются?

4b9b3361

Ответ 1

isPresent является истинным, если элемент существует на странице (в DOM), но может быть скрыт (display: none in css) isDisplayed истинно, только если isPresent является истинным, а элемент виден

Ответ 2

'isDisplayed' разрешает, является ли элемент видимым или нет, но генерирует исключение, если оно не находится в DOM. 'isPresent' разрешает, находится ли он в DOM или нет, независимо от того, действительно ли он виден или нет.

Следующий код можно использовать, чтобы избежать исключения, которое является отображенным, если элемент не найден в DOM:

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
});

Однако это будет плохо работать с операторами ожидания.

Ответ 3

Если вы вызываете ошибку при вызове 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;
});  };

Надеюсь, это поможет кому-то там!

Ответ 4

IsPresent(): возвращает TRUE, если элемент существует в DOM else, возвращает false

IsDisplayed():

  • Возвращает TRUE, если элемент существует в DOM И отображается.
  • Возвращает FALSE, если элемент существует в DOM и скрыт.
  • Выдает исключение, если элемент не существует в DOM

Ответ 5

Существует большая разница между isDisplayed() и isPresent().

isDisplayed() - Ваш элемент присутствует на странице, но отображается.

isPresent() - Ваш элемент присутствует во всей DOM страницы. Вероятно, это может быть скрыто или не отключено, но присутствует.

Вы не должны использовать isPresent(), когда вам нужно проверить на конкретный элемент, который вы ищете, вместо этого вы можете использовать его для проверки некоторых других проверок на основе присутствия этого элемента.