2016-01-23 82 views
1

nightmare.js中的類型方法將文本分配給輸入控件的value屬性。由於這個實現keydown,keypress事件不會觸發您正試圖抓取的頁面上。任何方式發送'類型'後的keydown事件?在nightmare.js中發送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等效的鍵作爲類型方法的參數以某種方式調用附加的事件,不完全確定這種黑客的工作方式,但它的工作原理!

這裏是例 - 工作

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); 
} 

回答

1

你可以評價一個網頁和發送使用純JS或jQuery的一個keydown事件,jQuery是最簡單的方式,但它最被注入。

使用jQuery:

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

編輯:看起來有支持噩夢射擊的關鍵事件。看看https://github.com/segmentio/nightmare/issues/244https://github.com/segmentio/nightmare/issues/147

EDIT2:不,應該是.type('document', '\u000d')。得到了錯誤的unicode字符。

+1

感謝您的回覆。我嘗試了你提出的兩個選項,既不適用於我,也不檢查我上面添加的實現你的建議的示例。 –

+0

我已經更新了答案,我使用了錯誤的unicode字符。 – Evers