J'essaie de sélectionner un produit dans ma liste de produits en fonction de son titre.

Ce que je veux faire, c'est dire "Si un élément de la liste a un titre qui correspond à" Poitrine de poulet (200g) ", cliquez sur le bouton.

Est-ce que quelqu'un sait comment écrire cela en rapporteur?

J'ai du mal à déterminer ce qui est retourné à quel point, ce que sont des promesses et ce qui ne le sont pas et comment attendre d'avoir un résultat avant de faire quoi que ce soit.

La structure dom ressemble à

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

J'ai essayé jusqu'à présent:

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
chris31389 16 juil. 2015 à 10:07

2 réponses

Meilleure réponse

Après une enquête plus approfondie et un code suggéré par phylax, j'ai trouvé que c'était la meilleure solution:

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();
          }
        })
      })();
    }
  });
});

Vous pouvez voir que j'ai ajouté un (function () {} ()); wrapper afin de surmonter l'erreur «La variable mutable est accessible à partir de la fermeture» lancée par Webstorm et j'ai initialisé le produit à l'intérieur.

0
chris31389 18 juil. 2015 à 09:50

Ceci n'est pas testé, mais pourrait aider:

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();
0
phylax 16 juil. 2015 à 07:32