PhantomJS有时会发出“解析错误”消息

时间:2012-12-18 22:11:01

标签: phantomjs

我们公司希望通过我们的CI服务器开始触发我们的QUnit单元测试,并将PhantomJS作为实现这一目标的手段。我们首先尝试通过以下脚本以幻像打开几个我们的QUnit测试页面:

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

page.onConsoleMessage = function(msg, lineNum, sourceId) {
    console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")');
};
page.onError = function(msg, trace) {
    var msgStack = ['ERROR: ' + msg];
    if (trace) {
        msgStack.push('TRACE:');
        trace.forEach(function(t) {
            msgStack.push(' -> ' + t.file + ': ' + t.line + (t.function ? ' (in function "' + t.function + '")' : ''));
        });
    }
    console.error(msgStack.join('\n'));
};

page.open(args[1], function(status) {
    phantom.exit();
});

没什么好看的,几乎从phantomJS参考页面逐字复制。但是,这个有时会导致以下输出:

ERROR: SyntaxError: Parse error
TRACE:
ERROR: SyntaxError: Parse error
TRACE:
ERROR: SyntaxError: Parse error
TRACE:
ERROR: SyntaxError: Parse error
TRACE:

我已经挖了它并且“解析错误”是因为PhantomJS认为jQuery变量未初始化,但事实是,我试图在PhantomJS中加载的页面在Chrome,IE和Firefox中运行得非常好,所以我没有看到解析错误(加载jQuery的代码是HEAD标记顶部的一个无聊的SCRIPT标记,所以没有什么令人兴奋的。)

如果它有所不同,我们的测试是在ASP.NET(aspx)页面内,通过VS2010内置开发服务器,IIS8 Express或IIS 6提供。我的下一步是将它们转换为纯HTML以查看如果幻影仍然会抱怨,但这并不是一个真正有效的解决方案,因为加载ASPX页面将是一个进一步的要求(可能使用Phantom进行自动UI测试)。

关于什么是错的任何想法?不确定哪些其他信息对调试此问题有用,但我会按要求提供它们。我很难过(特别是因为“解析错误”并不是最有用的错误消息)。

修改 这似乎与以下两个WebKit问题有关:

如果我在我们的服务器上关闭GZIP压缩它似乎工作正常,但我仍然需要进一步研究这个问题。

1 个答案:

答案 0 :(得分:8)

这是PhantomJS中的一个错误:http://code.google.com/p/phantomjs/issues/detail?id=930&start=300

解决方法是暂时关闭GZIP压缩(或从Phantom发送虚假接受标头以欺骗服务器不发送压缩内容)。