2013-07-29 16 views
10

mam prosty kod poniżej:Jak uzyskać kod http.status casper.js?

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(); 
}); 

Czy istnieje sposób, aby złapać kod http.status niezależnie od tego, co to jest? Teraz widzę w dokumencie, pokazujący sposób na złapanie określonego zdarzenia kodu. Co jeśli chcę tylko zobaczyć, co to jest?

Odpowiedz

10

Jak na ten temat (z 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

Czy istnieje sposób, aby uzyskać "load.failed" statusu chociaż? Wiem, że to nie jest w http.status, ale starałem się dowiedzieć, jak się dowiedzieć, kiedy nie ma połączenia z siecią. Mogę zrobić zdarzenie casper.on, ale lubię obsługiwać logikę wewnątrz funkcji thenOpen(). –

+0

Nie jestem pewien, jak byś to zrobił. Możesz zrobić coś takiego, jeśli (response.status> = 400) Czy to byłoby zgodne z tym, czego szukasz? – thtsigma

+0

Gdy nie ma połączenia sieciowego, odpowiedź == nieokreślona w systemie Windows. Ale nie jestem pewien co do innego systemu operacyjnego. –

3

myślę, że jest to nieco łatwiejsze od 1,0.

ten sposób i osiągnąć go:

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

Czy to też działa na 404? –

+0

Nawiasem mówiąc, 'casper.open' powinien prawdopodobnie być' casper.thenOpen' –

+0

@ArtjomB. Tak jest (aby odpowiedzieć na twoje pierwsze pytanie). Dlaczego powinienem użyć .thenOpen()? – swifty

3

Moduł testowy ma metodę assertHttpStatus. 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();