Не могу нажать кнопку в кошмаре.js, но работает в консоли

Я успешно перешел на соответствующую страницу, где хочу выбрать несколько элементов и нажать кнопку для подтверждения. Выбор элементов работает, я подтвердил это скриншотом, но нажатие кнопки в кошмаре не работает. Когда я запускаю сегмент в консоли, все работает нормально. Кнопка имеет случайно определенный идентификатор, и все остальное, кроме 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;
            }
        }       
    })

person pimmen    schedule 23.10.2016    source источник
comment
Электрон, это кошмар 2.6.1. Я обновил теги вопроса.   -  person pimmen    schedule 23.10.2016
comment
Вы уверены, что достаточно ждали, чтобы щелчок вступил в силу?   -  person Artjom B.    schedule 23.10.2016
comment
Да, мы пытались подождать две секунды. Когда мы запускаем код как есть в консоли браузера (конечно, не с кодом, специфичным для кошмара), он работает нормально, без ожидания.   -  person pimmen    schedule 23.10.2016


Ответы (1)


Не видя вашего полного кода, я не могу сказать наверняка, но наиболее вероятным ответом будет то, что в контексте оценки кода вашего кошмара ( .click() ) он не будет работать, потому что у него нет доступа к исходному кошмару. функция. Вам нужно либо использовать nightmare.click("bTags[i]"), либо использовать .then(function(result){ if(result === "Confirm"){ nightmare.click("bTags[i])" }

Вдобавок ко всему этому вы используете цикл for для вызова кошмарного действия! Это вызовет некоторые проблемы. Кошмар выдает обещания перед выполнением. Это означает, что вы пытаетесь запустить несколько экземпляров электрона одновременно, потому что промисы выполняются одновременно с циклом for. Вместо того, чтобы стоять в очереди - они борются за господство, вызывая крах. Вероятно, вам следует использовать генератор для управления асинхронным кодом, таким как vo или co.

Ресурсы: Распространенные подводные камни Nightmare.js

person Kwestion    schedule 01.11.2016