web-dev-qa-db-fra.com

Élément de recherche de rapporteur à l'intérieur d'un répéteur

Voici mon balisage

<tr ng-repeat="post in posts">
  <td ng-click="activePost(post)" class="title">{{post.title}}</td>
  <td><button class="btn btn-danger" ng-click="delete(post)">Delete</button>
  </td>
</tr>

J'essaie d'obtenir l'élément avec la classe title.

Le code que j'utilise pour accéder au répéteur est:

postsList = element.all(by.repeater('post in posts'));

Existe-t-il un moyen d'obtenir l'élément en faisant quelque chose comme ceci dans jQuery:

var titleText = $("tr:first").find(".title").text();

Existe-t-il un moyen de faire quelque chose de similaire à cela avec un rapporteur?

20
Edgar Martinez

cela devrait fonctionner pour votre exemple:

element.all(by.repeater('post in posts')).then(function(posts) {
   var titleElement = posts[0].element(by.className('title'));
   expect(titleElement.getText()).toEqual('YourEnteredTitle');
});
29
nilsK

La réponse de nilsK m'a aidé, mais n'a pas fonctionné complètement. Le code ci-dessous a fait l'affaire:

element.all(by.repeater('post in posts')).then(function(posts) {
   var titleElement = posts[0].element(by.className('title'));
   expect(titleElement.getText()).toEqual('YourEnteredTitle');
});
20
ndequeker

vous devez trouver un élément à l'intérieur d'un tableau comme expliqué ici https://github.com/angular/protractor/issues/877

var items = element.all(by.repeater('userGroup in userGroups')).filter(function(item) {
     return item.element(by.binding('userGroup.name')).getText().then(function(label) {
           return label === 'MyGroupName';
     });
  });
items.get(0).element(by.css('.buttongochose')).click();
5
Silvio Troia

Depuis les documents: https://github.com/angular/protractor/blob/master/docs/locators.md

var clickable = element.all(by.repeater('post in posts')).first().all(by.tagName('td')).first();
4
pansay

Une solution encore meilleure:

expect( $$(by.repeater('post in posts')).get(0).$('.title').getText() ).toBe('Your title');

2