2012-05-10 1 views
6

私はPhantomJSとJavascriptで初めてです。私は、読み込み時間をテストするスクリプトを作成しています。テスト中にエラー404/500が検出されたかどうかを検出し、コンソールに表示してメッセージを表示したいのですが。ログ。コードは次のようになります。PhantomJSを使用してWebページが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...

これは少し複雑な例であり、要求の一部として取得されたすべてのリソースのステータスコードを戻しますが、最初のものはページ自体です)等のJSやCSSをサポートする:

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とは対照的に、あなたを返すために起こっていることを前提としています - しかし沿って何かこれらの行は、あなたが望むものを与えるはずです。あなたがスタイル404ページを持っているし、いくつかの資産をロードする場合@founddramaの答えを補完

+0

補足:私が「すべてのリソースを受け取った」と言うとき、PhantomJSプロセスごとに1ページしか読み込んでいないと仮定しています。私は、PhantomJSがキャッシュから取得するリソースの要求を報告しないという興味深い特質を見ました。つまり、ページを読み込んだPhantomJSプロセスと、同じサイトから別のページを読み込んだ場合、そのアセットに遭遇した最初のページに1つの静的アセット(例:jquery.js)しか報告されません。 – founddrama

0

現在、PhantomJSがHTTP応答コードを返すことをサポートしているとは思われません。これを可能にするには、WebPageオブジェクトでQNetworkReplyオブジェクトを公開し、HTTP応答コードを取得する必要があります。

HTTPレスポンスコードは、C++のコードに次のように求めることができる。

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

これはPhantomJSに統合されるまでは成功「ソース、私はあなただけでテストする必要があると思う 『』か」失敗しました' HTTPレスポンスコードが本当に必要な場合は、CURLスクリプトを実行してサーバーからの応答を確認できます。私はあなたの目的のために '成功'または '失敗'がうまくいくと思う。

0

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

ような何かにあなたのコードを変更することをお勧めしますあなたがリクエストしたページのステータスだけを持っています。

関連する問題