2016-11-22 4 views
2

В моих тестах мне нужно сначала найти конкретный продукт, а затем выполнить некоторые операции над некоторыми подэлементами этого продукта. Есть много продуктов.транспортир: не удается найти элементы элемента

Это мои первые сценарии транспортира, так что несите меня.

var prod = element.all(by.css('singleproduct')).get(1); 

singleproduct - это директива. Это часть скриптов, нарушающий:

prod.element(by.css(".product-ordering ul li")).each(function(elem) { 

}) 

Однако, я всегда получаю element(...).each is not a function

HTML:

<singleproduct ng-repeat="item in vm.products" item="::item" class="col-xs-12 col-sm-6 col-md-4 product_tile ng-scope ng-isolate-scope"> 
    <article ng-class="{'product--active': isSelected}" class="product"> 
     <section ng-click="toggleDetails()" class="product-content"> 
     <!-- some prod info --> 
     </section> 
     <section>    
     <div class="product-ordering"> 
      <ul class="product-quantities"> 
       <!-- ngRepeat: option in ::priceList --> 
       <li ng-repeat="option in ::priceList" class="ng-scope"> 
        <!-- this is the LI I want to catch... 
       </li> 
       <!-- end ngRepeat: option in ::priceList --> 
       <li ng-repeat="option in ::priceList" class="ng-scope"> 
        <!-- this is the LI I want to catch... 

       </li> 
       <!-- end ngRepeat: option in ::priceList --> 
       <li ng-repeat="option in ::priceList" class="ng-scope"> 
        <!-- this is the LI I want to catch... 
       </li> 
       <!-- end ngRepeat: option in ::priceList --> 
      </ul> 
     </div> 
     </section> 
    </article> 
</singleproduct> 
+2

Хорошая проблема у вас есть, это вдохновило, чтобы добавить новое правило eslint для этого, по этой проблеме GitHub, если интересно: https://github.com/alecxe/eslint-plugin-protractor/issues/57 , Благодарю. – alecxe

+0

@alecxe Я не знал, что ваш плагин существует, выглядит очень полезно! – faboolous

+0

Я идиот, я понял, что это правило реализовано: см. Https://github.com/alecxe/eslint-plugin-protractor/blob/master/docs/rules/no-array-finder-methods .md. Благодарю. – alecxe

ответ

3

each() функция будет работать только с массивами. но prod.element(by.css(".product-ordering ul li")) вернет вам ElementFinder, а не ElementArrayFinder. вам нужно использовать product.all() вместо product.element(). Посмотрите ниже пример.

prod.all(by.css(".product-ordering ul li")).each(function(elem) { 

}) 
+0

Я просто собирался ответить на свой вопрос, как только узнал. Спасибо! – faboolous

Смежные вопросы