recherche un élément dans un répéteur contenant un texte spécifique à l'aide de rapporteur
Comment pourrais-je recherche un élément à partir d'un répéteur contenant un texte spécifique ?
J'ai essayé des choses comme ça :
element(by.repeater('item in array')).all(by.cssContainingText('.xyz','my item title')); //only gets the first element
Je pourrais chercher par moi-même à l'aide de .then
après element.all
mais je me demandais si il existe quelque chose de plus simple comme cssContainingText
mais pour les redoublants :
element(by.repeaterContainingText('item in array','my item title'))
ou un élément de chaînage comme ça :
element.all(by.repeater('item in array')).element(by.cssContainingText('.xyz','my item title'));
Une solution avec filtre (mais très lent)
element.all(by.repeater('item in array')).filter(function(elem){
return elem.getText().then(function(text){
return text.indexOf('my item title') > -1;
});
}).then(function(filteredElements) {
return filteredElements[0];
})
- veuillez envisager d'accepter une réponse.
Vous devez vous connecter pour publier un commentaire.
Rapporteur permet d'ajouter des locators.. je suis en utilisant la suite de la mise en œuvre (javascript) avec succès dans un projet avec 20 tests ou si.
Voici une solution à l'aide de lodash et jquery.
Ci-dessous, il est également un pur javascript.
https://gist.github.com/GuyMograbi/7a5f5e580bcf8d7da58a
et l'utiliser avec
ou
N'oubliez pas les points suivants à propos du rapporteur et des localisateurs
Je viens de passer 2 heures de briser mon cerveau pourquoi mon locator ne fonctionne pas. n'oubliez pas:
getOuterHtml().then..
Pur JavaScript
C'est la façon dont il en sera de même de regarder sans jquery et lodash
isVisible
partie a finalement été prise à partir de jquery sources. voir réponse à: https://stackoverflow.com/a/33456469/1068746Remarque importante - ou - pourquoi cela devrait être la bonne réponse
À l'aide de
filter
vous obtenez une promesse. grâce à cette solution, vous obtenez un élément. Donc au lieu d'avoir ungetByText(..).then(function(e){ e.click() })
vous aurezgetByText(...).click()
- sweeet!Limites et améliorations possibles
dans votre cas, le relais localisateur ne peut pas être utilisé, qui est une déception, sauf si vous modifiez l'emplacement au lieu de
text
êtretextInRepeater
puis ont'[ng-repeat=' + repeater + ']'
en quelque sorte ajouté dans le code.Une autre chose que vous pourriez vouloir améliorer ce qui est très utile.
Parfois, vous voulez obtenir un élément qui CONTIENT du texte, ou éventuellement contient un enfant avec le texte, mais vous voulez vraiment pour sélectionner le parent.
Oui, vous pouvez enchaîner les éléments du Rapporteur.
rapporteur-Localisateurs.md
Je sais que vous avez probablement n'avez pas besoin d'une réponse plus mais je mais je voudrais le mettre à jour au cas où quelqu'un d'autre a eu ce même problème. Vous pouvez utiliser