2012-05-10 10 views
6

Soy nuevo en PhantomJS y Javascript y estoy trabajando en una secuencia de comandos que prueba el tiempo de carga y me gustaría que detectara si se encontró un error 404/500 al probarlo y mostrar y enviar mensajes en la consola .Iniciar sesión. El código es el siguiente:¿Cómo puedo probar que una página web devuelve 404/500 usando PhantomJS?

var page = require('webpage').create(), t, address; 
t = Date.now(); 

var testArray = 
['someURL']; 

function loadTest(testURL) 
{ 
address = testURL; 
page.open(address, function (status) { 
    if (status !== 'success') { 
     console.log('FAIL to load the address' + address); 
return; 
    } 

}); 
} 

for(var i = 0; i < testArray.length; i++) 
{ 
loadTest(testArray[i]); 
t = Date.now() - t; 
console.log('Testing ' + testArray[i]); 
console.log('Loading time ' + t + ' msec\n'); 
} 
phantom.exit(); 

La ayuda es muy apreciada. Gracias

Respuesta

8

Es posible que desee echar un vistazo a la devolución de llamada onResourceReceived al objeto de la página, debería poder obtener lo que necesita desde allí. (API docs...)

Esto es un poco un ejemplo artificial, y devolverá el código de estado para cada recurso recuperado como parte de la solicitud, pero el primero será la página en sí (es decir, en oposición a apoyar JS o CSS, etc.):

var page = require('webpage').create(); 

page.onResourceReceived = function(res) { 
    if (res.stage === 'end') { 
    console.log('Status code: ' + res.status); 
    } 
}; 

page.open('http://some.url/that/does-not-exist', function() { 
    phantom.exit(); 
}); 

por supuesto, esto supone que el servidor va a volver realidad un 404 (en contraposición a un 200 enmascarado como un 404, por ejemplo) -, sino algo a lo largo estas líneas deberían darte lo que quieres.

+0

Un apéndice: cuando digo "cada recurso recibido", también estoy asumiendo que solo está cargando una página por proceso PhantomJS. He observado una peculiaridad interesante en la que PhantomJS no informa las solicitudes de recursos que recupera de su caché. (es decir, si tiene un proceso PhantomJS que carga una página y luego otro del mismo sitio, solo informará un único activo estático (por ejemplo, jquery.js) en la primera página donde se encuentra ese activo). – founddrama

0

No creo que PhantomJS admita la devolución de códigos de respuesta HTTP actualmente. Para que esto sea posible, el objeto WebPage necesitaría exponer el objeto QNetworkReply y obtener su código de respuesta HTTP.

El código de respuesta HTTP se puede obtener como este en el código C++:

int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); 

Hasta que esto se integra en PhantomJS 'fuente, creo que sólo tendrá que probar el 'éxito' o' fracaso '. Si realmente necesita ver el código de respuesta HTTP, puede ejecutar un script CURL para verificar la respuesta del servidor. Sospecho que 'éxito' o 'fallido' estarán bien para tus propósitos.

0

complementando @founddrama respuesta, si usted tiene una página de estilo 404 y cargar algunos activos, onResourceReceived se indicará el estado de todos los activos, por lo que recomiendo que cambiar su código a algo así como

var definedStatus = false; 
page.onResourceReceived = function(res) { 
    if (res.stage === 'end' && definedStatus === false) { 
     definedStatus = res.status; 
    } 
}; 

page.open(url, function(status) { 
    if (status == 'success' && definedStatus == 200) {  
     // do something 
     phantom.exit(); 
    } else { 
     console.log("Erro") 
     phantom.exit(1); 
    } 
}); 

por lo que solo tendrá el estado de la página solicitada

Cuestiones relacionadas