web-dev-qa-db-fra.com

Quelle est la différence entre les méthodes isPresent et isDisplayed

Je viens de commencer à utiliser Protractor pour écrire des tests. Je me demande quelle est la différence entre les méthodes isPresent() et isDisplayed().

Les définitions d'API

  1. isPresent

  2. est affiché

Alors ... dans quels cas sont-ils différents?

32
翁鹏飞

isPresent est vrai si l'élément existe dans une page (dans DOM), mais peut être masqué (affichage: aucun en CSS) isDisplayed n'est vrai que si isPresent est vrai et l'élément est visible

46
sap1ens

isDisplayed résout si l'élément est visible ou non, mais lève une exception s'il n'est pas dans le DOM.

isPresent décide s'il est présent dans le DOM ou non, qu'il soit réellement visible ou non. Cela ne fait pas exception.

Le code suivant peut être utilisé pour éviter l'exception lancée par isDisplayed si l'élément n'est pas trouvé dans le 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;
}

Même un objet avec à la fois la visibilité et la présence peut être transmis lors de la résolution, par exemple:

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

Cependant, cela ne fonctionnera pas bien avec les instructions expect.

9
abhishek89m

Si vous obtenez une erreur lors de l'appel de isDisplayed() parce que l'élément n'est pas sur la page, c'est-à-dire que vous obtenez NoSuchElementError: No element found using locator, Procédez comme suit:

Enveloppez simplement .isDisplayed() dans votre propre méthode et gérez unresolved/rejected promise comme ci-dessous:

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

J'espère que cela aide quelqu'un là-bas!

3
pelican

IsPresent (): retourne TRUE si l'élément existe dans DOM sinon retourne faux

Est affiché():

  • Renvoie TRUE si l'élément existe dans DOM ET est visible.
  • Renvoie FALSE si l'élément existe dans DOM et est masqué.
  • Lève une exception si l'élément n'existe pas dans le DOM
2
bsk

Il existe une différence majeure entre isDisplayed () et isPresent ().

isDisplayed () - Votre élément est présent sur la page mais il est affiché.

isPresent () - Votre élément est présent dans tout le DOM de la page. Elle peut probablement être masquée ou non désactivée, mais présente.

Vous ne devez pas utiliser isPresent () lorsque vous devez valider sur un élément spécifique que vous recherchez, vous pouvez plutôt l'utiliser pour valider d'autres vérifications en fonction de la présence de cet élément.

0
mashkurm