使用nightwatch js列出子元素

时间:2017-03-15 17:36:31

标签: parent-child nightwatch.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

- 穆克什

2 个答案:

答案 0 :(得分:6)

以下解决方案适用于我,由另一组人员发布:

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

答案 1 :(得分: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();
    }
}

我们使用execute函数来运行一些客户端JS以获取子元素的数量。在回调中,我们使用断言库(Nightwatch扩展以便它可用)来检查我们是否有正确数量的子节点。如果没有正确数量的孩子,那么测试将会出错并失败。不幸的是,如果测试通过,将没有控制台输出。