守夜人计数元素数

问题描述

我是 Nightwatch 的新手,我想计算元素的数量。我能够做到这一点,但我不明白如何解释变量,这里是我的代码

browser.elements('xpath','/html/body/div[1]/div[3]/div[2]/div/div[1]/div/div[3]/table/tbody/tr/td[2]',function (elements) {
                var nb = 0    
                elements.value.forEach(function (elementsObj,index) {   
                    browser.elementIdText(elementsObj.ELEMENT,function (result) {
                        if (result.value != "") {
                            nb = nb + 1
                            console.log(result.value)
                        }
                        //console.log("There are :  "  + nb)
                    })
                    //console.log("There are :  "  + nb)
                })

这会显示我想要的所有元素。输出是: 元素 1 元素 2 等等……

现在,我想要这个:

有X个元素: 元素 1 元素 2 等等……

但是我尝试打印我的变量“nb”但它不起作用......我如何存储和显示我的“nb”变量?

谢谢,

解决方法

我的猜测是那些没有评论的评论 console.log 在你的循环结束之前执行......因此它们很可能会返回: “有:0”

您是否尝试过“等待” forEach 循环结束?

也许是这样的:

browser.elements('xpath','/html/body/div[1]/div[3]/div[2]/div/div[1]/div/div[3]/table/tbody/tr/td[2]',function (elements) {
                var nb = 0    
                elements.value.forEach(async function (elementsObj,index) {   
                   await browser.elementIdText(elementsObj.ELEMENT,function (result) {
                        if (result.value != "") {
                            nb = nb + 1
                            console.log(result.value)
                        }
                        //console.log("There are :  "  + nb)
                    })
                    console.log("There are :  "  + nb)
                })
,

您可以将值存储在数组中。然后在forEach循环完成后解析长度。像这样:

browser.elements('xpath',function (elements) {
     var nb = []
     elements.value.forEach(function (elementsObj,index) {
       browser.elementIdText(elementsObj.ELEMENT,function (result) {
         if (result.value != "") {
           console.log(result.value)
           nb.push(result.value)
         }
       })
     })
     console.log('There are ' + nb.length() + 'elements')
     for (const nbItem of nb) {
       console.log(nbItem)
     }
   })