Отправка нажатия клавиши, нажатие клавиши при вводе в кошмар.js

Метод type в кошмаре.js присваивает текст свойству value элемента управления вводом. Из-за этой реализации keydown событие нажатия клавиши не запускается на странице, которую вы пытаетесь очистить. Любой способ отправить событие нажатия клавиши после «типа»?

Изменить 1-

Вот пример отправки события с помощью jQuery, который тоже не работает:

var Nightmare = require('nightmare');
var vo = require('vo');
var nightmare = Nightmare();

vo(run)(function(err, result) {
  if (err) throw err;
});

function *run() {

  var title = yield nightmare
    .goto('http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes')
    .type('#txtChar','\n')
    .evaluate(function() {
      var e = $.Event( "keypress", { which: 13 } );
        $('#txtChar').trigger(e);
        return "Key you pressed is : " + $('#txtChar').val();
    });

  yield  nightmare.pdf('type.pdf');
  setTimeout(function () {
    console.log( ' ' + title);
    nightmare.end();
    process.exit();
  },2000);
}

Изменить 2-

Использование Unicode-эквивалента ключей в качестве параметра для метода type каким-то образом вызывает прикрепленные события, не совсем уверен, как работает этот хак, но он работает!

Вот рабочий пример-

var Nightmare = require('nightmare');
var vo = require('vo');
var nightmare = Nightmare();

vo(run)(function(err, result) {
  if (err) throw err;
});

function *run() {

  var title = yield nightmare
    .goto('http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes')
    .type('#txtChar','1') //so we have focus on textbox
    .type('document', '\u000d')
    .evaluate(function() {
        return "Key you pressed is : " + $('#txtChar').val();
    });

  yield  nightmare.pdf('type.pdf');
  setTimeout(function () {
    console.log( ' ' + title);
    nightmare.end();
    process.exit();
  },2000);
}

person lame_coder    schedule 23.01.2016    source источник


Ответы (1)


Вы можете оценить страницу и отправить событие нажатия клавиши, используя простой JS или jQuery, jQuery — это простой способ, но его чаще всего вводят.

Использование jQuery:

.inject('js', '/jquery-2.1.4.min.js')
.evaluate(function () {
    var e = $.Event( "keypress", { which: 13 } );
    $('#yourInput').trigger(e);
});

РЕДАКТИРОВАТЬ: Похоже, что в Nightmare есть поддержка запуска ключевых событий. Взгляните на https://github.com/segmentio/nightmare/issues/244. и https://github.com/segmentio/nightmare/issues/147.

EDIT2: Нет, должно быть .type('document', '\u000d'). Получил неправильный символ юникода.

person Evers    schedule 23.01.2016
comment
Спасибо за ваш ответ. Я попробовал оба варианта, которые вы предложили, ни один из них не работает для меня, проверьте пример, который я добавил выше, который реализует ваше предложение. - person lame_coder; 24.01.2016
comment
Я обновил ответ, я использовал неправильный символ юникода. - person Evers; 24.01.2016