Dans l'un des tests, nous devons affirmer que l'un des 3 éléments est présent. Actuellement, nous le faisons en utilisant le protractor.promise.all()
et Array.reduce()
:
var title = element(by.id("title")), summary = element(by.id("summary")), description = element(by.id("description")); protractor.promise.all([ title.isPresent(), summary.isPresent(), description.isPresent() ]).then(function (arrExists) { expect(arrExists.reduce(function(a,b) { return a || b; })).toBe(true); });
Y a-t-il une meilleure façon de le résoudre avec Jasmine sans résoudre les promesses explicitement? Aurions-nous besoin d'un matcher personnalisé ou il est possible de résoudre avec les allumettes intégrées?
Vérifie ça:
let EC = protractor.ExpectedConditions; let title = EC.visibilityOf($("#title")), summary = EC.visibilityOf($("#summary")), description = EC.visibilityOf($("#description")); expect(EC.or(title, summary, description)() ).toBeTruthy('Title or summary or description should be visible on the page')
Notez que j'exécute la fonction que ExpectedCondition renvoie – donc je reçois le résultat de cette fonction (Promesse qui sera résolu à boolean) au lieu de fonction.
Vous pouvez utiliser .présenceOf () si vous en avez besoin à la place .visibilityOf ()
http://www.protractortest.org/#/api?view=ExpectedConditions.prototype.or
Vous pouvez simplement obtenir tous les éléments avec un seul sélecteur et affirmer que le nombre est supérieur à zéro:
var title_summary_description = element.all(by.css("#title, #summary, #description")); expect(title_summary_description.count()).toBeGreaterThan(0);