2016-08-14 31 views
2

から、リスト内の要素の数を取得する:は、私は、次のDOM構造を持ってナイトウォッチ

<div data-qa-id="criteriaDisplay"> 
    <ul> 
     <li>...</li> 
     <li>...</li> 
     <li>...</li> 
    </ul> 
</div> 

私は上記のリスト内の項目数を返すコマンドを書きたいと思います。私はNightwatchの初心者です。これを行う私の試みはここにあります。私の考えは、criteriaDisplay要素の下にある<ul>で始まり、その下に<li>の項目を数えることです。だから私はelementIdElements APIを使用しようとしていますが、それが動作していません。

var criteriaDisplayCommands = { 
    getNumberOfItems: function(callback) { 
     var self = this; 
     console.log(this); 
     return this.api.elementIdElements('@myList', 'css selector', 'li', function(result) { 
      callback.call(self, result); 
     }); 
    } 
}; 

module.exports = { 
    url: function() { 
     return this.api.launchUrl + '/search'; 
    }, 

    sections: { 
     criteriaDisplay: { 
      selector: '[data-qa-id="criteriaDisplay"]', 
      commands: [criteriaDisplayCommands], 
      elements: { 
       myList: 'ul' 
      } 
     } 
    } 
}; 

誰かがこれを行うには正しい方法で私を助けてくださいことはできますか?

答えて

3

私はこれが正しいと思ういけない:

return this.api.elementIdElements('@myList', 'css selector', 'li', function(result) { 
    callback.call(self, result); 
}); 

elementIdElementselementIdすべき最初のパラメータを必要とするので。あなたの場合はCSSセレクターです。

セカンドapiでカスタムセレクタを使用していることがわかりません。 doc's section about defining-elementsから私は、これは働くつもりであると思ういけない(しかし、私はこのことについてはよく分からない)

:要素のプロパティを使用して

は、あなたが「@で、その名前によって要素を参照することができます要素コマンドとアサーションを呼び出すときに、セレクタではなくプレフィックスを使用します(クリックなど)。

あなたはコマンドやアサーションではなく、セレニウムAPIを使用しているので、有効な入力ではないと思います。

あなたの結果を得るにはelements、またはelementelementIdElementsの組み合わせを使用できます。

this.api.elements('css selector', 'ul li', function (result) { 
    console.log(result.value.length) //(if there are 3 li, here should be a count of 3) 
    callback.call(self, result); 
});` 
+0

感謝を@dominik:以下に示すように

簡単なものしかelementsを使用しています。 – Naresh