waitForUrl()
中有Casper.js
个功能,但是waitForUrlChange()
中的Casper.js
是否有可能?
我的意思是检测this.getCurrentUrl()
值的变化。我无法预测新的网址值。它可以是任何东西。
答案 0 :(得分:8)
它有一个事件处理程序
casper.on('url.changed',function(url) {
casper.echo(url);
});
以下是它的文档:http://casperjs.readthedocs.org/en/latest/events-filters.html#url-changed
然而,正如Artjom B.所提到的,这不会涵盖功能扩展将处理的所有情况。当你不需要它作为控制流的一部分时,它才真正合适,但只是想在它发生时反应性地刮掉一些值。
答案 1 :(得分:7)
不是内置的,但你可以写自己很容易:
casper.waitForUrlChange = function(then, onTimeout, timeout){
var oldUrl;
this.then(function(){
oldUrl = this.getCurrentUrl();
}).waitFor(function check(){
return oldUrl === this.getCurrentUrl();
}, then, onTimeout, timeout);
return this;
};
这是一个正确的函数扩展,因为它与其他wait*
函数具有相同的语义(参数是可选的并且它等待)并且它支持构建器模式(也被某些人称为promise模式)。
作为Darren Cook的mentioned,可以通过检查CasperJS中是否已存在waitForUrlChange
并使用CasperJS更改其API的动态参数列表来进一步改善这一点:
if (!casper.waitForUrlChange) {
casper.waitForUrlChange = function(){
var oldUrl;
// add the check function to the beginning of the arguments...
Array.prototype.unshift.call(arguments, function check(){
return oldUrl === this.getCurrentUrl();
});
this.then(function(){
oldUrl = this.getCurrentUrl();
});
this.waitFor.apply(this, arguments);
return this;
};
}