我已成功导航到我想要选择多个元素的相应页面,然后单击按钮进行确认。元素的选择工作,我用截图确认了这一点,但点击噩梦中的按钮不起作用。当我在控制台中运行该段时,一切正常。该按钮具有随机定义的ID,除了按钮的innerHTML之外的所有其他内容都不是唯一的,因此我会迭代所有按钮以根据内容进行匹配。
这是与此相关的代码段。
.evaluate(function(){
//Select all the "elements" for room.
var elemArr = document.getElementById("L210").getElementsByTagName("td");
document.getElementById("resRoom").innerHTML = "L210";
document.getElementById("resStartTime").innerHTML = "08:00";
document.getElementById("resEndTime").innerHTML = "19:00";
for(var i = 0; i < elemArr.length; i++){
elemArr[i].className += " selected"
}
//Here select and click the button
var bTags = document.getElementsByTagName("button");
var searchText = "Confirm";
for (var i = 0; i < bTags.length; i++) {
if (bTags[i].innerHTML == searchText) {
bTags[i].click();
break;
}
}
})
答案 0 :(得分:1)
在没有看到完整代码的情况下,我无法肯定地说,但最可能的答案是,在评估您的恶梦代码(.click())的情况下,因为它没有#&# 39;可以访问原始的噩梦功能。您可能需要使用nightmare.click("bTags[i]")
或使用
.then(function(result){
if(result === "Confirm"){
nightmare.click("bTags[i])"
}
除此之外 - 你还在使用for循环调用噩梦动作!这会引起一些问题。梦魇在执行前发出承诺。这意味着您正在尝试同时运行多个电子实例,因为promises与for循环同时执行。而不是排队 - 他们争取支配地位,导致崩溃。您应该使用生成器来管理异步代码,例如vo或co。