[英]Wait for URL change in Casper.js?
有一個waitForUrl()
在功能Casper.js
,但有可能waitForUrlChange()
在Casper.js
?
我的意思是檢測this.getCurrentUrl()
值的變化。 我無法預測新的網址值。 它可以是任何東西。
它有一個事件處理程序
casper.on('url.changed',function(url) {
casper.echo(url);
});
這是它的文檔: http : //casperjs.readthedocs.org/en/latest/events-filters.html#url-changed
但是,正如Artjom B.所提到的,這不會涵蓋函數擴展將處理的所有情況。 當你不需要它作為控制流程的一部分時,它才真正合適,但只是想在它發生時反應性地刮掉一些值。
不是內置的,但你可以寫自己很容易:
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所提到的,可以通過檢查waitForUrlChange
是否已存在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;
};
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.