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
Alors ... dans quels cas sont-ils différents?
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
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.
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!
IsPresent (): retourne TRUE si l'élément existe dans DOM sinon retourne faux
Est affiché():
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.