无法在nightmare.js中单击按钮,但在控制台中工作

时间:2016-10-23 13:10:20

标签: javascript javascript-events electron nightmare

我已成功导航到我想要选择多个元素的相应页面,然后单击按钮进行确认。元素的选择工作,我用截图确认了这一点,但点击噩梦中的按钮不起作用。当我在控制台中运行该段时,一切正常。该按钮具有随机定义的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;
            }
        }       
    })

1 个答案:

答案 0 :(得分:1)

在没有看到完整代码的情况下,我无法肯定地说,但最可能的答案是,在评估您的恶梦代码(.click())的情况下,因为它没有#&# 39;可以访问原始的噩梦功能。您可能需要使用nightmare.click("bTags[i]")或使用 .then(function(result){ if(result === "Confirm"){ nightmare.click("bTags[i])" }

除此之外 - 你还在使用for循环调用噩梦动作!这会引起一些问题。梦魇在执行前发出承诺。这意味着您正在尝试同时运行多个电子实例,因为promises与for循环同时执行。而不是排队 - 他们争取支配地位,导致崩溃。您应该使用生成器来管理异步代码,例如vo或co。

资源: Common nightmare.js pitfalls