web-dev-qa-db-fra.com

Débogage des échecs de PhantomJS webpage.open

Dans PhantomJS, webpage.open prend un rappel avec un paramètre d'état défini sur "succès" ou "échec". Selon les documents, ce sera "succès" si aucune erreur réseau ne s'est produite, sinon "échec". " Existe-t-il un moyen de voir l'erreur réseau sous-jacente à l'origine de l'échec?

L'URL que j'essaie de charger fonctionne très bien lorsque je la mets dans mon navigateur, et lorsque je prends une capture d'écran après avoir reçu le message d'échec, je vois la page sur laquelle je me trouvais avant d'appeler webpage.open (donc je peux) t juste ignorer l'échec). J'utilise Phantom pour les tests, donc, idéalement, j'aimerais avoir un moyen robuste d'obtenir facilement un message d'erreur utile lorsque webpage.open échoue (ou mieux encore, il n'a jamais échoué!)

44
josh

Trouvé cet article qui explique comment configurer des rappels pour obtenir la raison sous-jacente de l'échec: http://newspaint.wordpress.com/2013/04/25/getting-to-the-bottom-of- pourquoi un échec de chargement de page-phantomjs /

Sur la base de cette page, vous pouvez imprimer les erreurs comme suit:

page.onResourceError = function(resourceError) {
    console.error(resourceError.url + ': ' + resourceError.errorString);
};

La page continue pour montrer un exemple de journalisation détaillée pour les fantômes

var system = require('system');

page.onResourceRequested = function (request) {
    system.stderr.writeLine('= onResourceRequested()');
    system.stderr.writeLine('  request: ' + JSON.stringify(request, undefined, 4));
};

page.onResourceReceived = function(response) {
    system.stderr.writeLine('= onResourceReceived()' );
    system.stderr.writeLine('  id: ' + response.id + ', stage: "' + response.stage + '", response: ' + JSON.stringify(response));
};

page.onLoadStarted = function() {
    system.stderr.writeLine('= onLoadStarted()');
    var currentUrl = page.evaluate(function() {
        return window.location.href;
    });
    system.stderr.writeLine('  leaving url: ' + currentUrl);
};

page.onLoadFinished = function(status) {
    system.stderr.writeLine('= onLoadFinished()');
    system.stderr.writeLine('  status: ' + status);
};

page.onNavigationRequested = function(url, type, willNavigate, main) {
    system.stderr.writeLine('= onNavigationRequested');
    system.stderr.writeLine('  destination_url: ' + url);
    system.stderr.writeLine('  type (cause): ' + type);
    system.stderr.writeLine('  will navigate: ' + willNavigate);
    system.stderr.writeLine('  from page\'s main frame: ' + main);
};

page.onResourceError = function(resourceError) {
    system.stderr.writeLine('= onResourceError()');
    system.stderr.writeLine('  - unable to load url: "' + resourceError.url + '"');
    system.stderr.writeLine('  - error code: ' + resourceError.errorCode + ', description: ' + resourceError.errorString );
};

page.onError = function(msg, trace) {
    system.stderr.writeLine('= onError()');
    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 + '")' : ''));
        });
    }
    system.stderr.writeLine(msgStack.join('\n'));
};
68
josh