0

タイトルに基づいて商品リストから商品を選択しようとしています。

私がやりたいのは、「リストのアイテムに「鶏の胸肉(200g)」に一致するタイトルがある場合は、ボタンをクリックします.

分度器でこれを書く方法を知っている人はいますか?

どの時点で何が返されるのか、何が約束で何がそうでないのか、そして何かをする前に結果が出るまで待つ方法を理解するのに苦労しています。

dom構造は次のようになります

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

2 に答える 2

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(){}()); を追加したことがわかります。ラッパーなので、Webstorm によってスローされた「ミュータブル変数はクロージャーからアクセスできます」というエラーを乗り越え、その中で製品を初期化しました。

于 2015-07-18T09:50:08.880 に答える