我已经成功导航到想要选择多个元素并单击一个按钮进行确认的相应页面。元素的选择起作用了,我已经通过屏幕快照确认了这一点,但是在 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;
            }
        }
    })

最佳答案

没有看到完整的代码,我不能肯定地说,但是最可能的答案是,在评估您的 Nightmare 代码的情况下(.click())将无法运行,因为它无法访问原始的 Nightmare 功能。您可能需要使用nightmare.click("bTags[i]")或使用.then(function(result){ if(result === "Confirm"){ nightmare.click("bTags[i])" }
最重要的是-您正在使用for循环来调用 Nightmare 行动!这将导致一些问题。 Nightmare 在执行前发出 promise 。这意味着您试图同时运行多个 Electron 实例,因为promise与for循环同时执行。他们不是在排队,而是在争夺统治地位,导致崩溃。您可能应该使用生成器来管理诸如vo或co之类的异步代码。

资源:
Common nightmare.js pitfalls

关于javascript - 无法在nightmare.js中单击按钮,但可以在控制台中使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40203305/

10-09 22:09