Phantomjs “幻影”有时会给出“幻影”;解析错误“;信息

Phantomjs “幻影”有时会给出“幻影”;解析错误“;信息,phantomjs,Phantomjs,我们公司希望开始通过我们的CI服务器触发我们的QUnit单元测试,并将PhantomJS作为实现这一目标的一种手段。我们首先尝试通过以下脚本在phantom中打开几个QUnit测试页面: var page = require('webpage').create(); var args = require('system').args; page.onConsoleMessage = function(msg, lineNum, sourceId) { console.log('CONS

我们公司希望开始通过我们的CI服务器触发我们的QUnit单元测试,并将PhantomJS作为实现这一目标的一种手段。我们首先尝试通过以下脚本在phantom中打开几个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标记的顶部是一个无聊的脚本标记,因此没有什么令人兴奋的地方)

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

关于什么是错误的有什么想法吗?不确定还有哪些信息对调试这个问题有用,但我会按要求提供它们。我被难住了(特别是因为“parse error”并不是最有用的错误消息)

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


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

这是PhantomJS中的一个bug:


解决方法是暂时关闭GZIP压缩(或从Phantom发送虚假的accept头,以诱使服务器不发送压缩内容).

感谢上帝你指出了这一点。否则,这对我来说可能是又一个不眠之夜。你明白了吗?我也在本地使用asp.net并试图加载网页,但它给我带来语法错误。我没有打开GZIP压缩,但我使用的是https。好吧,我得到的最好的办法是禁用适用于我的GZIP美国。GitHub中当前的错误报告底部有一条benjolitz的注释,指出响应中的内容长度可能不正确,但我尚未对此进行测试。我们在测试环境中也不使用HTTPS,因此,很抱歉,我认为我帮不上忙。