web-dev-qa-db-fra.com

Vérification du rapporteur si n'existe pas

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 ...

26
Sakamoto Kazuma

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.

23
Sakamoto Kazuma

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)

30
Carl

Je l'ai obtenu en faisant ceci: 

expect(element(by.css('css')).isPresent()).toBeFalsy();
4
Daniel

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()
    })
})
3
activedecay

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)
1
evanjmg

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();
0
Boris Yakubchik