2017-03-15 76 views
2

我需要幫助列出/計算父母的子元素的數量。 請參閱附件的代碼,我期待算列表子元素使用守夜js

<div class="media"> ... </div>

究竟有多少父

<div id="draft_studies" class="xyz"><div id="open_studies" class="xyz">

我新來的守夜,我確實看着夜間參考但沒有發現任何有用的東西,可能是我錯過了一些東西。

任何幫助表示讚賞。

<div class="tab-content"> 
     <div id="draft_studies" class="xyz"> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div>    
    </div> 
    <div class="tab-content"> 
     <div id="draft_studies" class="xyz"> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div>    
    </div>   
    <div class="tab-content"> 
     <div id="draft_studies" class="xyz"> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div> 
     <div class="media"> ... </div>    
    </div> 

我曾嘗試到現在爲止是:

listElements: function(list) { 
    return this 
    .api.elements('css selector','draft_studies',function(result){ 
    OR .api.elementIdElements('draft_studies', 'css selector', ".media" ,function(result) { 
     console.log("Element is ... " + result.value);// --> LOGS - Element is ... [object Object] 
     console.log("Element is ... " + result.value.length);// --> LOGS - Element is ... undefined 
     result.value.forEach(function (value) { //Fails with error - TypeError: result.value.forEach is not a function(Which i think is correct, as we cant have forEach here) 
     console.log(value); 
     var elementID = value.ELEMENT; 
     console.log('Checking Element - ' + elementID); 
     }) 
    }); 
    }, 

 listElementsNew: function(list) { 
    return this 
    .api.perform(function() { 
     var childNodes = []; 
     childNodes.push(document.getElementById('@studyListTable2').childNodes); 
    });// Fails with error - Error while running perform command: document is not defined 

- 穆克什

回答

1
var assert = require('assert'); 

module.exports = { 
    'foobar': function (browser) { 
     browser 
      .url('http://localhost:3000') 
      .waitForElementVisible('body', 1000); 

     var numElements = 9; 
     browser.execute(function(){ 
      var draftStudies = document.getElementById('draft_studies'); 
      return draftStudies.getElementsByTagName('div').length; 
     }, [], function(result){ 
      assert.equal(result.value, numElements, 'Incorrect number of children'); 
     }); 



     browser.end(); 
    } 
} 

我們正在使用的執行函數運行某些客戶端方JS獲取ch的數量ild元素。在回調函數中,我們使用斷言庫(Nightwatch延伸以便可用)來檢查我們是否有正確數量的子節點。如果沒有合適的孩子數量,測試將會出錯並失敗。不幸的是,如果測試通過,將不會有控制檯輸出。

+0

非常感謝「DERP」的答案 –

3

以下解決方案爲我在其他一些團體發表人:

browser.elements('css selector','#draft_studies > .media', function(result) { 
    result.value.forEach(function (value) { 
    var elementID = value.ELEMENT; 
    console.log('Checking Element - ' + elementID); 
    }); 
}); 
+0

這不是爲我工作。你可以分享更多的規格文件和/或配置嗎? – mchandleraz