2013-07-29 7 views
10

Ich habe einfach folgenden Code:Wie bekomme ich casper.js http.status code?

var casper = require("casper").create({ 
    }), 
    utils = require('utils'), 
    http = require('http'), 
    fs = require('fs'); 

casper.start(); 

casper.thenOpen('http://www.yahoo.com/', function() { 
    casper.capture('test.png'); 
}); 

casper.on('http.status.404', function(resource) { 
    this.echo('wait, this url is 404: ' + resource.url); 
}); 

casper.run(function() { 
    casper.exit(); 
}); 

Gibt es eine Möglichkeit http.status Code, unabhängig davon, zu fangen, was es ist? Im Moment kann ich in dem Dokument sehen, wie man bestimmte Code-Ereignisse abfängt. Was wenn ich nur sehen möchte was es ist?

Antwort

10

Wie wäre es damit (von der Docs):

var casper = require("casper").create({ 
    }), 
    utils = require('utils'), 
    http = require('http'), 
    fs = require('fs'); 

casper.start(); 

casper.thenOpen('http://www.yahoo.com/', function(response) { 
    casper.capture('test.png'); 
    utils.dump(response.status); 
    if (response == undefined || response.status >= 400) this.echo("failed"); 
}); 

casper.on('http.status.404', function(resource) { 
    this.echo('wait, this url is 404: ' + resource.url); 
}); 

casper.run(function() { 
    casper.exit(); 
}); 
+0

Gibt es eine Möglichkeit zu bekommen "load.failed" Status obwohl? Ich weiß, dass es nicht in http.status ist, aber ich habe versucht herauszufinden, wann es keine Netzwerkverbindung gibt. Ich könnte Casper.on-Ereignis tun, aber ich mag die Logik in ThenOpen() selbst behandeln. –

+0

Ich bin mir nicht sicher, wie du das machen würdest. Du könntest etwas wie if (response.status> = 400) tun. Wäre das genau nach dem, wonach du suchst? – thtsigma

+0

Wenn keine Netzwerkverbindung besteht, ist die Antwort in Windows == undefiniert. Aber ich bin mir nicht sicher über andere OS. –

3

Ich denke, dass dies seit 1.0 etwas einfacher ist.

Dies ist, wie ich es erreicht:

casper.test.begin("load google!", function (test) { 
    casper.start(); 

    casper.open("http://www.google.co.uk"); 

    casper.then(function() { 
     var res = this.status(false); 
     test.assert(res.currentHTTPStatus === 200, "homepage returns a 200 status code"); 
    }); 

    casper.run(function() { 
     this.test.done(); 
    }); 
}); 
+0

Funktioniert das auch für 404? –

+0

Übrigens sollte 'casper.open' wahrscheinlich' casper.thenOpen' sein –

+0

@ArtjomB. Ja ist (um deine erste Frage zu beantworten). Warum sollte ich .thenOpen() verwenden? – swifty

3

Das Testmodul hat eine assertHttpStatus Methode. From the 1.1.0-DEV Documentation

casper.test.begin('casperjs.org is up and running', 1, function(test) { 
    casper.start('http://casperjs.org/', function() { 
     test.assertHttpStatus(200); 
    }).run(function() { 
     test.done(); 
    }); 
}); 
0
casper.start('http://google.fr/', function() { 
    var res = this.status(false); 
    this.echo(res.currentHTTPStatus); 
}); 

casper.run();