我在我的casperJS脚本中触发了一个更改事件,触发了这样的AJAX请求:
casper.evaluate(function(i) {
$("form:eq(2) select option:eq(" + i + ")").attr("selected", "selected").change();
},i);
如何让casperJS等到基础AJAX请求完成之后?已经尝试查看docs但我或多或少卡住了。谁能引导我走向正确的方向?
答案 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
使用新元素或waitForSelectorTextChange
或waitUntilVisible
等。
答案 1 :(得分:0)
你可能错过了 waitForResource
来自文档:http://casperjs.readthedocs.org/en/latest/modules/casper.html#waitforresource
casper.waitForResource("you url here", function()
{
// place your code here
});