如何使用 PhantomJS 测试网页是否返回 404/500
How can I test that a webpage returns 404/500 using PhantomJS?
我是PhantomJS和Javascript的新手,我正在开发一个测试加载时间的脚本,我希望它检测在测试它并在控制台中显示和消息时是否遇到错误404/500.log。代码是这样的:
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();
非常感谢帮助。谢谢
您可能想查看对页面对象的onResourceReceived
回调,您应该能够从那里获得所需的内容。(API 文档...
这是一个有点人为的例子,它将为作为请求的一部分检索的每个资源返回状态代码,但第一个将是页面本身(即,与支持 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),但是这些东西应该给你你想要的东西。
我不相信PhantomJS目前支持返回HTTP响应代码。为了实现这一点,WebPage 对象需要公开 QNetworkReply 对象并获取其 HTTP 响应代码。
HTTP 响应代码可以在C++代码中像这样获取:
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
在将其集成到PhantomJS的源代码之前,我认为您只需要测试"成功"或"失败"。如果确实需要查看 HTTP 响应代码,可以运行 CURL 脚本来检查来自服务器的响应。不过,我怀疑"成功"或"失败"适合您的目的。
补充@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);
}
});
因此,您将仅具有您请求的页面的状态
相关文章:
- 根据是否解析了 Promise 从函数返回值
- 是否可以 document.getElementsByTagName('head')[0] ever 返回 null
- 是否可以将JXBrowser显示的JS确认对话框的结果返回到调用它的JS部分
- 检查数组中是否存在字符串值,并返回找到的数组值js
- 返回值+new Date()与Date.now()是否不同
- 检查文本区域是否为空总是返回false
- 检查一个元素是否有一个类与另一个类总是返回true
- 如果我返回表,检查 Ajax 调用是否为 200 OK的最佳方法是什么
- $.ajax 检查返回字符串是否为“错误”
- javascript 函数返回的语法(空格)是否会影响结果
- 如何检查服务器是否返回未定义然后忽略它
- 在节点中使用“返回{值}”是否合适
- 在主干视图中的每个方法之后是否需要“返回此内容”
- 如果 Array.prototype.map() 没有返回,它是否被正确使用
- 有没有一种方法可以判断图像src是否在javascript内部返回null
- 检测用户是否通过浏览器返回按钮到达当前页面
- Regex以确定该值在JS中是否有效,返回null
- 使用 Restangular 使用 RESTful API - RESTful API 将数组作为顶级对象返回是否安全
- 这个返回是否正确编写了Javascript
- 是否有可能返回是否在javascript中加载图像