PhantomJS иногда выдает сообщения об ошибках синтаксического анализа

Наша компания хочет запустить наши модульные тесты QUnit через наш CI-сервер и рассматривает 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 - это скучный тег SCRIPT в верхней части тега HEAD, так что там нет ничего интересного).

Если это имеет какое-то значение, наши тесты находятся внутри страниц ASP.NET (aspx), обслуживаемых либо встроенным сервером разработки VS2010, либо IIS8 Express, либо IIS 6. Мой следующий шаг — превратить их в чистый HTML, чтобы посмотреть, будет ли фантом все еще жалуются, но это не совсем правильное решение, поскольку загрузка страниц ASPX будет требованием в дальнейшем (для потенциального выполнения автоматических тестов пользовательского интерфейса с использованием Phantom).

Любые идеи о том, что не так? Не уверен, какие еще фрагменты информации будут полезны для отладки этой проблемы, но я предоставлю их по запросу. Я в тупике (особенно потому, что «ошибка синтаксического анализа» — не самое полезное из сообщений об ошибках).

Редактировать: похоже, это связано со следующими двумя проблемами WebKit:

Если я отключу сжатие GZIP на нашем сервере, все будет работать нормально, но мне еще предстоит провести дальнейшее исследование этой проблемы.


person syazdani    schedule 18.12.2012    source источник
comment
Вы поняли это? Я также использую asp.net локально и пытаюсь загрузить веб-страницу, и это дает мне синтаксические ошибки. У меня не включено сжатие GZIP, но я использую https.   -  person TWilly    schedule 10.03.2014
comment
Что ж, лучшее, что у меня получилось, это отключить GZIP, что сработало для нас. Текущий отчет об ошибке в GitHub имеет примечание внизу от benjolitz, в котором говорится, что Content-Length может быть неправильным в ответах, но я не проверял это. Мы также не используем HTTPS в нашей тестовой среде, так что извините, я не думаю, что смогу помочь.   -  person syazdani    schedule 10.03.2014


Ответы (1)


Это ошибка в PhantomJS: http://code.google.com/p/phantomjs/issues/detail?id=930&start=300

Обходной путь — отключить сжатие GZIP на данный момент (или отправить фиктивные заголовки accept из Phantom, чтобы заставить сервер не отправлять сжатый контент).

person syazdani    schedule 18.01.2013
comment
Слава богу, что вы указали на это. Иначе эта бессонная ночь может оказаться для меня напрасной. - person nil; 20.01.2013