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

sya*_*ani 4 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();
});
Run Code Online (Sandbox Code Playgroud)

没有什么花哨的,几乎从phantomJS参考页面逐字复制.但唉,这有时会导致以下输出:

ERROR: SyntaxError: Parse error
TRACE:
ERROR: SyntaxError: Parse error
TRACE:
ERROR: SyntaxError: Parse error
TRACE:
ERROR: SyntaxError: Parse error
TRACE:
Run Code Online (Sandbox Code Playgroud)

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

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

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

编辑: 这似乎与以下两个WebKit问题有关:

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

sya*_*ani 8

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

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