J'ai un paramètre dans mon site Web angulaire qui active et désactive un menu déroulant. S'il est éteint, il ne s'affiche pas sur la page principale.
Avec Protractor, je dois vérifier si cet élément n’est pas présent lorsque le commutateur est désactivé. Cependant, je ne devrais pas être jeté dans Element Not Found Error, car il s’agit d’un test parmi plusieurs. Comment dois-je faire cela?
J'ai essayé de faire:
expect($$('.switch').count()).to.equal(0).and.notify(next);
Mais je reçois une AssertionError avec ceci ...
La chose fonctionne en utilisant quelque chose que j'ai trouvé dans la documentation:
expect(element(by.css('.switch')).isPresent()).to.become(false).and.notify(next);
Utilise aussi des assertions pour ne pas casser les concombres.
Une autre option qui a un peu mieux fonctionné pour moi et utilise le moyen de rapporteur de faire les choses http://angular.github.io/protractor/#/api?view=ElementArrayFinder.prototype.all
element.all(by.css('.k-loading-image')).then(function(items) {
expect(items.length).toBe(0);
});
(Je voulais vérifier qu'un indicateur de chargement avait disparu)
Je l'ai obtenu en faisant ceci:
expect(element(by.css('css')).isPresent()).toBeFalsy();
aucune de ces réponses incluant count()
n'a fonctionné pour moi;
le type de $$ ('. sélecteur'). count () est
'object'
vous devez utiliser la promesse pour extraire la valeur count
comme ceci.
const nameSelector = '[data-automation="name-input"]';
const nameInputIsDisplayed = () => {
return $$(nameSelector).count()
.then(count => count !== 0)
}
it('should not be displayed', () => {
nameInputIsDisplayed().then(isDisplayed => {
expect(isDisplayed).toBeFalsy()
})
})
Ces réponses n'attendent pas que l'élément disparaisse. Pour attendre sa disparition, vous devez utiliser ExpectedConditions comme ci-dessous. InvisibilityOf détecte si un élément a quitté le DOM. Voir la documentation ici: https://www.protractortest.org/#/api?view=ProtractorExpectedConditions .
export const invisibilityOf = (el) =>
browser.wait(ExpectedConditions.invisibilityOf(el) as any, 12000,
'Element taking too long to disappear in the DOM')
const el = element(by.css(arg1))
return invisibilityOf(el)
stalenessOf
peut être un bon moyen d’aller: Rapporteur - ExpectedConditions.stalenessOf
Par exemple, vous avez un modal actuellement ouvert. Vous le fermez et vous attendez à ce qu'il ne soit pas présent:
element(by.css('.modal-dialog .cancel-button')).click();
browser.wait(EC.stalenessOf(element(by.css('.modal-dialog')), 60000);
expect(element(by.css('.modal-dialog')).isPresent()).toBeFalsy();