2014-10-24 3 views
0

Сегодня вечером я экспериментировал с ночными кошмарами, и мне нужно было сделать шаг во время выполнения, требующий ввода пользователя. Есть ли способ заставить кошмары позволить что-то вроде этого? Я изменил метод type(), который поставляется с lib, и я смог остановить выполнение, чтобы ввести какой-либо текст. Сценарий даже заканчивается, но я не вижу ввода, который я набрал, отображается в текстовом поле, в которое он должен войти. Я уверен, что селектор dom правильный, потому что, когда я использую тот же метод и встроенный метод type(), существует статический текст. В приведенном ниже коде, подскажите (MSG) представляет собой метод из sync-prompt Вот метод, который я написал, но не обновляет элемент на странице:Почему этот патч-асинхронный ввод не работает в Nightmarejs?

exports.type_async = function(selector, msg, done) { 
    this.page.evaluate(function(selector) { 
    return document.querySelector(selector); 
    }, function(element){ 
    text = prompt(msg); 
    element.text = text; 
    done(); 
    }, selector); 
}; 

Что я делаю неправильно?

ответ

1

Оригинал type содержит строку element.value = text; в контексте страницы (внутри оценки, но не результат обратного вызова), но у вас есть element.text = text;.

Кроме того, значение должно быть установлено после, которое было предложено для ввода.

exports.typeAsync = function(selector, done) { 
    var text = prompt('dynamic, blocking input:'); 
    debug('.type() %s into %s', text, selector); 
    this.page.evaluate(function(selector, text) { 
    var element = document.querySelector(selector); 
    element.value = text; 
    }, done, selector, text); 
}; 

и это называется так:

nightmare.typeAsync('#foo') 
+0

Вот почему я полностью удалить 'Text' полностью из сигнатуры функции. Я думаю, вы можете так назвать это, но я не пробовал: 'nightmare.typeAsync ('# foo')'. Повторите попытку, потому что это сделает функцию более разумной. –

Смежные вопросы