如何让casperJS等到.change()事件结束?

时间:2014-11-27 18:03:46

标签: javascript casperjs

我在我的casperJS脚本中触发了一个更改事件,触发了这样的AJAX请求:

casper.evaluate(function(i) {
    $("form:eq(2) select option:eq(" + i + ")").attr("selected", "selected").change();
},i);

如何让casperJS等到基础AJAX请求完成之后?已经尝试查看docs但我或多或少卡住了。谁能引导我走向正确的方向?

2 个答案:

答案 0 :(得分:1)

您始终可以使用casper.wait以静态方式执行此操作。

casper.thenEvaluate(function(i) {
    // change()
},i).wait(5000).then(function(){
    // further processing
});

并希望请求在5秒内完成,但也许你会在请求完成的时间超过5秒时失去一些时间。问题是,一旦请求完成,并不意味着页面已准备好/已更改。

另一种可能性是等待请求完成,但为了使其工作,您将需要以某种方式注册请求的成功事件。大多数情况下,您无法从全球范围访问此权限。如果你这样做,你可以使用

casper.thenEvaluate(function(i) {
    window._someUniqueVariable = false;
    registerSuccessEvent(function(data){
        window._someUniqueVariable = true;
    });
},i).waitFor(function check(){
    return this.evaluate(function(){
        window._someUniqueVariable = true;
    });
}, function(){
    // further processing
});

更麻烦的做法是使用casper.waitForResource,但之后你需要事先知道网址,或者至少能够从网页上推断出网址。

在一般情况下,当请求返回时,它会对您的页面执行某些操作。因此,您应该waitForSelector使用新元素或waitForSelectorTextChangewaitUntilVisible等。

答案 1 :(得分:0)

你可能错过了 waitForResource

来自文档:http://casperjs.readthedocs.org/en/latest/modules/casper.html#waitforresource

casper.waitForResource("you url here", function()
{
     // place your code here
});