问题描述
我是 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)
}
})