簡體   English   中英

等待Casper.js中的URL更改?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM