web-dev-qa-db-fra.com

Rapporteur - Échec: référence d'élément périmée: l'élément n'est pas attaché au document de page

J'ai une fonction dans mon objet de page rapporteur e2e qui décoche plusieurs options dans un menu déroulant. Cela avait précédemment fonctionné correctement, mais maintenant j'obtiens l'erreur suivante:

Échec: référence d'élément périmé: l'élément n'est pas attaché au document de page

J'ai essayé de récupérer les éléments à chaque itération de la boucle for, mais la boucle for s'exécute avant que la promesse ne soit résolue la première fois, ce qui signifie que la valeur "limite" pour x est passée à plusieurs reprises, et le test clique simplement sur la même liste déroulante option plusieurs fois.

this.uncheckColumns = function(limit) {
    element(by.className('fa-cog')).click();
    element.all(by.className('multiSelectLi')).then(function(options) {
        for (x = 1; x < limit; x++) {
            options[x].click();
        };
    });
};
12
Daniel Bogart

Que diriez-vous d'utiliser each(element, index) :

element.all(by.className('multiSelectLi')).each(function(option, index) {
    if (index < limit) {
        option.click();
    }
});

Ou, en conjonction avec filter(element, index) :

element.all(by.className('multiSelectLi')).filter(function(option, index) {
    return index < limit;
}).each(function(option) {
    option.click();
});

Aussi, une approche naïve pour résoudre le problème (appeler element.all() en continu dans la boucle):

for (var index = 0; index < limit; index++) {
    var option = element.all(by.className('multiSelectLi')).get(index);
    option.click();
};
12
alecxe