2015-07-16 2 views
0

Я пытаюсь выбрать продукт из своего списка продуктов на основе его названия.С помощью Protractor, как я могу выбрать объект DOM в списке на основе текста?

То, что я хочу сделать, это сказать: «Если элемент из списка имеет название, которое соответствует„куриной грудки (200 г)“, а затем нажмите кнопку.

Кто-нибудь знает, как писать это в транспортира?

Я изо всех сил, чтобы выяснить, что возвращается в какой момент, какие обещания, а что нет и как ждать, пока у меня есть результат, прежде чем делать что-нибудь.

структура дом выглядит

<li ng-repeat="item in filteredItems" class="ng-scope"> 
    <div class="product"> 
    <h3 class="product-title text-uppercase ng-binding" ng-bind="item.name">Chicken Breast (200g)</h3> 
    <div class="pad-top-10"> 
     <button class="btn btn-default btn-xs" type="button" ng-click="addItem(item)"> 
     <span class="product-add-label">Add Item</span> 
     </button> 
    </div> 
    </div> 
</li> 

Я попытался это до сих пор:

this.Given(/^I can see "([^"]*)" on the page$/, function (productName, done) { 
    element.all(by.repeater('item in filteredItems')).then(function (products) { 
    for(var i = 0; i < products.length; i++){ 
     var title = products[i].element(by.css('.product-title')); 
     title.getText().then(function (text) { 
     if (text.toLowerCase() === productName.toLowerCase()) { 
      console.log(text); 
      // products[i] shows as undefined 
      console.log(products[i]); 
      done(); 
     } 
     }) 
    } 
    }); 
}); 

ответ

0

После дальнейшего изучения и некоторый код, предложенный phylax, я обнаружил, что это был лучший раствор:

this.Given(/^I can see "([^"]*)" on the page$/, function (productName, done) { 
    element.all(by.repeater('item in filteredItems')).then(function (products) { 
    for (var i = 0; i < products.length; i++) { 
     (function() { 
     var title = products[i].element(by.css('.product-title')); 
     var product = products[i]; 
     title.getText().then(function (text) { 
      if (text.toLowerCase() === productName.toLowerCase()) { 
      console.log(text); 
      console.log(product); 
      done(); 
      } 
     }) 
     })(); 
    } 
    }); 
}); 

Вы можете видеть, что я добавил (function() {}()); обертка, так что переходите на ошибку «Mutable variable is available from clos», выпущенную Webstorm, и я инициализировал ее.

0

Это untestet, но может помочь:

var search = "Chicken Breast (200g)"; 
var h3 = element(by.cssContainingText('h3.product-title', search)); 
var button = h3.element(by.xpath('..')).element(by.css('button')); 
button.click(); 
Смежные вопросы