刚刚开始编写代码,所以我仍然很难理解一些东西。因此,我创建了一个脚本Nightmare,该脚本使用库进行自动测试,但是我不明白为什么我的变量value
不是全局变量。
1]如何从“如果条件”中导出“ value
”并在控制台中显示?现在,我得到的结果是1
。
2)如何推迟显示value
变量,直到测试完成?我认为setTimeout function
对此不利。
const Nightmare = require('nightmare');
const nightmare = Nightmare({ show: true });
let value = '1';
nightmare
.goto('some-link-here')
.type('input#register-form-promo','111112')
.insert('input#register-form-username','Test')
.insert('input#register-form-email','[email protected]')
.insert('input#register-form-password','Password123456')
.evaluate(() => {
var allButtons = document.getElementsByTagName('button');
for (var i = 0; i < allButtons.length; i++) {
if (allButtons[i].innerText == 'Зарегистрироваться') allButtons[i].id = 'loginbutton';
}
})
.click('button[id=loginbutton]')
.evaluate(function (value) {
var element = document.getElementsByClassName('help-block')[3];
if (element.innerHTML == "Значение «Promo» неверно.") {
value = true;
console.log(value) }
else {
value = false;
console.log(value)
}
}
)
.wait(1000)
.end()
.then(result => {
});
setTimeout(function (){
console.log(value);
}, 10000);
您编写的代码是异步的。因此,如果您在setTime out中写入console.log(value)
,则您预计上述代码集将在10000毫秒内完成。这是错误的方法,因为如果操作花费超过10000毫秒会发生什么,您将无法在console.log中看到更新的值。因此,您应该在then()
函数和[]之后添加另一个evaluate
const Nightmare = require('nightmare');
const nightmare = Nightmare({ show: true });
let value = '1';
nightmare
.goto('some-link-here')
.type('input#register-form-promo','111112')
.insert('input#register-form-username','Test')
.insert('input#register-form-email','[email protected]')
.insert('input#register-form-password','Password123456')
.evaluate(() => {
var allButtons = document.getElementsByTagName('button');
for (var i = 0; i < allButtons.length; i++) {
if (allButtons[i].innerText == 'Зарегистрироваться') allButtons[i].id = 'loginbutton';
}
})
.click('button[id=loginbutton]')
.evaluate(function (value) {
var element = document.getElementsByClassName('help-block')[3];
if (element.innerHTML == "Значение «Promo» неверно.") {
value = true;
}
else {
value = false;
}
return value
})
.then(value => {
// do something here
console.log(value)
})
.wait(1000)
.end()
.then(result => {
});