Транспортировщик находит элемент внутри ретранслятора

Ниже моя разметка

<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>

Я пытаюсь получить элемент с классом title.

Код, который я использую для доступа к репитеру, это:

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

Есть ли способ получить элемент, выполнив в jQuery что-то вроде следующего:

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

Есть ли способ сделать что-то похожее на это с помощью транспортира?

Ответы

Ответ 1

это должно работать для вашего примера:

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

Ответ 2

Ответ от nilsK помог мне, но не работал полностью. Код ниже сделал трюк:

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

Ответ 3

вам нужно найти элемент внутри массива, как описано здесь 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

Еще лучшее решение:

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