5

我在页面上有一个 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);
  });
});

你知道如何做到这一点吗?

4

2 回答 2

1

你的代码

evt.initKeyboardEvent('keypress', true, true, window, 0, 0, 0, 0, 0, 13);

看第四个参数,我猜应该是触发元素。这里应该是document.querySelector('#searchfield')

一个提示:在casper评估中,在final中返回一个true,然后如果评估有任何错误,你将得到null。

var result = this.evaluate(function(){ /*code is here*/ return true;})

检查结果,如果成功

于 2013-11-21T08:04:13.023 回答
0

2条建议:

第一个:尝试this.thenEvaluate而不是evaluate. 然后需要确保异步序列正常工作。

第二个:这可能是客户端 js 问题。在浏览器中,您可以只检查 js 控制台,但不是在这里。所以你应该添加一个小调试助手。

casper.on('log.message', function(msg){
  console.log(msg);
}

这会将您的远程控制台消息传输到您的控制台。现在您可以调试远程上下文console.log()并查看它在哪里(以及是否)中断。

您还应该设置verbose=truelogLevel="debug"为此工作。

祝你好运!

于 2013-09-29T12:59:55.067 回答