我在页面上有一个ExtJs文本字段。我在casper.js中填写了一些值,它工作正常
然后我想关注这个字段并按 Enter 键,因为它周围没有<form>
提交。
我尝试的是:
casper.then(function() {
// the text field is filled with the string
this.sendKeys('#searchfield', 'some text');
this.evaluate(function() {
// this does not put the field in focus
document.querySelector('#searchfield').focus();
// so 'pressing' enter has no effect at all
var evt = document.createEvent('KeyboardEvent');
evt.initKeyboardEvent('keypress', true, true, window, 0, 0, 0, 0, 0, 13);
document.dispatchEvent(evt);
});
});
你知道怎么做到这一点吗?
答案 0 :(得分:1)
你的代码
evt.initKeyboardEvent('keypress', true, true, window, 0, 0, 0, 0, 0, 13);
看看第四个参数,我想它应该是触发元素。这应该是document.querySelector('#searchfield')
。
一个提示:在casper evaluate中,在final中返回true,然后如果在evaluate中有任何错误,你将得到null。
var result = this.evaluate(function(){ /*code is here*/ return true;})
检查结果,如果成功
答案 1 :(得分:0)
2条建议:
第一个:尝试this.thenEvaluate
而不是evaluate
。然后需要确保异步序列正常工作。
第二个:这可能是客户端问题。在浏览器中,你可以检查js控制台,但不是在这里。所以你应该添加一些调试助手。
casper.on('log.message', function(msg){
console.log(msg);
}
哪会将您的远程控制台消息传输到您的控制台。现在,您可以使用console.log()
调试远程上下文,并查看它在哪里(以及是否)中断。
您还应该设置verbose=true
和logLevel="debug"
才能生效。