2013-07-29 30 views
10

tôi có mã đơn giản dưới đây:Làm cách nào để lấy mã casper.js http.status?

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

Có cách nào để bắt http.status đang bất kể nó là gì? Ngay bây giờ tôi có thể thấy trong tài liệu cho thấy cách để nắm bắt sự kiện mã cụ thể. Nếu tôi chỉ muốn xem nó là gì?

Trả lời

10

Làm thế nào về vấn đề này (từ 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

Có cách nào để có được "load.failed" tình trạng mặc dù? Tôi biết nó không phải trong http.status nhưng tôi đã cố gắng tìm ra cách để biết khi nào không có kết nối mạng. Tôi có thể làm casper.on sự kiện nhưng tôi muốn xử lý logic trong thenOpen() chính nó. –

+0

Tôi không chắc bạn sẽ làm thế nào. Bạn có thể làm một cái gì đó như nếu (response.status> = 400) Nó sẽ được dọc theo dòng của những gì bạn đang tìm kiếm? – thtsigma

+0

Khi không có kết nối mạng, phản hồi == không xác định trong Windows. Nhưng tôi không chắc chắn về hệ điều hành khác. –

3

Tôi nghĩ rằng đây là một chút dễ dàng hơn vì 1.0.

Đây là cách tôi đạt được nó:

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

Điều này cũng làm việc cho 404? –

+0

Nhân tiện, 'casper.open' có thể là' casper.thenOpen' –

+0

@ArtjomB. Có (để trả lời câu hỏi đầu tiên của bạn). Tại sao tôi nên sử dụng .thenOpen()? – swifty

3

Các module thử nghiệm có một phương pháp 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();