Как найти элемент внутри ng-повтора в транспортире

#angularjs #protractor

#angularjs #транспортир

Вопрос:

У меня есть следующий html:

 <li ng-repeat="item in items">
    Some Test
    <span class="bubble-grey">
        {{ item }}
    </span>
</li>
 

Как найти диапазон «.bubble-grey» внутри первого элемента ng-repeat в транспортире?

Я пробовал:

 element.all(by.repeater('item in items')).get(0).findElement(by.css(".bubble-grey")).getText()
 

Но я получаю «TypeError: Object [объект object] не имеет метода ‘findElement'»

Ответ №1:

Вам не нужно «находить» элемент снова. Попробуйте использовать element explorer

Откройте проводник элементов и перейдите на нужную страницу:

 cd node_modulesprotractorbin
node ./elementexplorer.js <your url>
 

Затем попробуйте эту команду:

 element.all(by.repeater('item in items')).get(0).getText()
 

Я не думаю, что он покажет какой-либо текст, потому что в html нет текста.

Если вы хотите получить текст «Some Test», попробуйте:

 element(by.repeater('item in items')).getText()
 

Ответ №2:

Глядя на API, вместо:

 .findElement(by.css(".bubble-grey"));
 

вы хотите:

 .element(by.css(".bubble-grey"));
 

Ответ №3:

Присвойте вашим промежуткам атрибут id, используя $index из repeat, тогда вы сможете перейти прямо к ним.

 <span class="bubble-grey" id="item_{{$index}}">
    {{ item }}
</span>
 

Комментарии:

1. Да, это было бы возможно, но разумно ли добавлять что-то в (производственный) код, который необходим только для тестирования?

2. Вы можете утверждать, что это улучшает ваш код с точки зрения доступности (например, программы чтения с экрана и т. Д.). К сожалению, я недостаточно хорошо знаю сторону транспортира, чтобы исправить это в тесте, я просто знаю угловую сторону вещей.