我正在做一些浏览器自动化工作,并且最近开始使用javascript。此刻,我对以下内容感到非常困惑:
module.exports = {
main_page(browser) {
var pos;
var tmp = []; //A
browser
.url(myUrl)
.waitForElementVisible('body', 1000)
.assert.elementPresent('#id > ul > li:nth-child(1)')
for (var i = 1 ; i <= 6; i+=1){
browser.getText(`#id > ul > li:nth-child(${i})`, function(result){
pos = result.value.substr(-1) //B
tmp.push(pos)
})
}
tmp.forEach(function(element) { //C
console.log(element);
});
...
browser.end();
},
}
我正在尝试将pos
推入数组tmp
中,以便以后可以使用它来做一些事情。
我不明白的是,为什么A
上的代码未更新我在B
上的数组。我在C
的forEach没有记录任何内容。有人可以帮助我了解正在发生的事情或解释如何正确进行吗?
欢迎任何输入,谢谢。
答案 0 :(得分:0)
此StackOverflow post的答案实际上可能就是您要寻找的。 p>
browser.getText返回一个promise,因此您应该执行类似的操作
browser.getText(`#id > ul > li:nth-child(${i})`).then(function(result){
pos = result.value.substr(-1) //B
tmp.push(pos)
})
承诺基本上与异步数据一起使用。查看此https://developers.google.com/web/fundamentals/primers/promises,以了解有关诺言的更多信息。