2016-08-14 41 views
2

我有以下的DOM結構:獲取元素的個數在列表中從Nightwatch

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

由於elementIdElements要求是elementId第一個參數。在你的情況下它的一個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