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();
};
});
};
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();
};