web-dev-qa-db-fra.com

Protractor, avec isDisplayed () J'obtiens NoSuchElementError: Aucun élément trouvé avec le localisateur

Dans le rapporteur 2.0, je vérifie dans expect() si un élément est affiché. Je m'attends à un faux, mais la chose étrange est que je reçois l'erreur suivante:

NoSuchElementError: Aucun élément trouvé avec le localisateur: By.id ("userForm")

Mon code est:

describe('closeModal', function() {
    it('should close the alert that appears after registration.', function(){
        element(by.id('closeAlertModalButton')).click();
        expect(element(by.id('userForm')).isDisplayed()).toBeFalsy();
    });
});

Je comprends que je reçois cette erreur parce que l’élément n’est plus sur la page (c’est ce que je veux confirmer), mais ne devrais-je pas obtenir une erreur fausse et non une erreur?

23
Mikel

isDisplayed() vérifiera si un élément est visible ou non, mais vous devez vérifier si un élément est présent dans DOM ou non, utilisez isElementPresent() ou isPresent() :

expect(browser.isElementPresent(element(by.id('userForm')))).toBe(false);
expect(element(by.id('userForm')).isPresent()).toBe(false);

Voir également:

32
alecxe

Cette erreur fait partie du comportement de WebDriver. Dans de tels cas, mieux vaut utiliser isPresent ou isElementPresent

2
Vasiliy Vanchuk

Si l'élément visible fait A s'il n'est pas visible B, ignore l'exception si l'élément n'est pas trouvé:

element.isDisplayed().then(function(visible){
    if (visible) {
        // do A when element visible
    }else{
        // do B when element not visible 
    }
}, function () {
    //suppress exception if element is not found on page
});
1
Sergiy Podgorniy