2012-05-10 11 views
6

मैं फैंटॉमजेएस और जावास्क्रिप्ट में नया हूं और मैं एक स्क्रिप्ट पर काम कर रहा हूं जो लोडिंग समय का परीक्षण करता है और मैं यह जानना चाहता हूं कि परीक्षण करने के दौरान 404/500 त्रुटि हुई थी और कंसोल में प्रदर्शित और संदेश था लॉग। कोड इस प्रकार है:मैं कैसे परीक्षण कर सकता हूं कि एक वेबपृष्ठ PhantomJS का उपयोग कर 404/500 देता है?

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

सहायता की बहुत सराहना की जाती है। धन्यवाद

उत्तर

8

आप पेज ऑब्जेक्ट पर onResourceReceived कॉलबैक पर एक नज़र डालना चाहते हैं, तो आपको वहां से जो चाहिए उसे प्राप्त करने में सक्षम होना चाहिए। (API docs...)

यह एक संक्षिप्त उदाहरण है, और यह अनुरोध के हिस्से के रूप में पुनर्प्राप्त हर संसाधन के लिए स्टेटस कोड वापस देने जा रहा है, लेकिन पहला पृष्ठ स्वयं ही होगा (यानी, जैसा कि विरोध किया गया है जे एस या सीएसएस आदि) का समर्थन करने के लिए:

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

दी, इस मानता है कि सर्वर वास्तव में आप 404 करने जा रहा है (के रूप में 404 के रूप में मुखौटा धारण कर लिया एक 200 करने का विरोध किया, उदाहरण के लिए) - कुछ के साथ लेकिन इन लाइनों को आपको जो चाहिए वो देना चाहिए।

+0

एक परिशिष्ट: जब मैं "हर संसाधन प्राप्त" कहता हूं, तो मैं यह भी मान रहा हूं कि आप प्रति फंतामजेएस प्रक्रिया में केवल एक पृष्ठ लोड कर रहे हैं। मैंने एक दिलचस्प क्विर्क देखा है जिसमें फैंटॉमजेएस उन संसाधनों के अनुरोधों की रिपोर्ट नहीं करता है जो इसे अपने कैश से पुनर्प्राप्त करते हैं। (यानी, यदि आपके पास एक PhantomJS प्रक्रिया है जो एक पृष्ठ लोड करती है, और फिर एक ही साइट से दूसरे, तो यह केवल उसी पृष्ठ पर एक स्थिर स्थैतिक संपत्ति (उदा। jquery.js) की रिपोर्ट करेगा जहां उस संपत्ति का सामना किया जाता है।) – founddrama

0

मुझे विश्वास नहीं है कि फ़ैंटॉमजेएस वर्तमान में HTTP प्रतिक्रिया कोड लौटने का समर्थन करता है। इसके लिए, WebPage ऑब्जेक्ट को QNetworkReply ऑब्जेक्ट का पर्दाफाश करने और इसके HTTP प्रतिक्रिया कोड प्राप्त करने की आवश्यकता होगी।

HTTP प्रतिक्रिया कोड सी ++ कोड में इस तरह प्राप्त किया जा सकता:

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

जब तक यह PhantomJS में एकीकृत है 'स्रोत, मुझे लगता है कि तुम सिर्फ पर परीक्षण करने के लिए की आवश्यकता होगी' सफलता 'या' विफल '। यदि आपको वास्तव में HTTP प्रतिक्रिया कोड देखने की आवश्यकता है, तो आप सर्वर से प्रतिक्रिया की जांच करने के लिए एक curl स्क्रिप्ट चला सकते हैं। मुझे संदेह है कि 'सफलता' या 'असफल' हालांकि आपके उद्देश्यों के लिए ठीक रहेगा।

0

@founddrama जवाब के पूरक है, अगर आप आप एक स्टाइल 404 पेज कुछ संपत्ति है और लोड, onResourceReceived उन सभी परिसंपत्तियों की स्थिति दिखाएगा, तो मैं

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

की तरह कुछ करने के लिए अपने कोड को बदलने के लिए सिफारिश करेंगे तो आपके पास केवल उस पृष्ठ का दर्जा होगा जिस पर आपने अनुरोध किया था

संबंधित मुद्दे