Как загрузить JSON через переменную get в скрипте CasperJS

Я использую следующий код для загрузки некоторых данных JSON в переменную в моем скрипте casperJS:

var casper = require("casper").create({
    verbose: true,
    logLevel: 'debug',
    pageSettings: {
        userName: 'dev',
        password: 'devpass',
    } 
});
var baseUrl = 'http://mysite.com/';

casper.start().then(function() {
    this.open(baseUrl + 'JSON-stuff', {
        method: 'get',
        headers: {
            'Accept': 'application/json'
        }
    });
});

casper.run(function() {
    var journalJson = JSON.parse(this.getPageContent());
    require('utils').dump(journalJson);  //this returns my json stuff as expected
    this.exit();
});

Это работает так, как я хочу - у меня есть объект journalJson, который мне нужен для обработки. Однако я не уверен, как продолжить тестирование. Другие функции, добавленные в casper.run(), не выполняются должным образом... например, если я изменю функцию запуска casper на:

casper.run(function() {
    var journalJson = JSON.parse(this.getPageContent());
    require('utils').dump(journalJson);
    this.open(baseUrl).then(function () {
        this.assertExists('#header');
    });
    this.exit();
});

затем phantomjs регистрирует запрос URL-адреса, но тест никогда не запускается.

Мой вопрос: как я могу получить доступ к JSON через get, а затем использовать его для выполнения тестов? Я думаю, что я что-то упускаю здесь...


person starsinmypockets    schedule 19.07.2012    source источник


Ответы (1)


Вы вызываете casper.exit() до того, как ваш обратный вызов then, возможно, будет выполнен.

Вместо этого попробуйте что-то вроде этого:

casper.then(function() { // <-- no more run() but then()
    var journalJson = JSON.parse(this.getPageContent());
    require('utils').dump(journalJson);
});

casper.thenOpen(baseUrl, function() {
    this.test.assertExists('#header'); // notice: this.test.assertExists, not this.assertExists
});

casper.run(function() {
    this.test.done();
});
person NiKo    schedule 04.10.2012
comment
Привет, у меня та же проблема, я имею в виду, что мы уже загрузили JSON, но как я могу заставить его работать в случае, когда это будет массив URL-адресов, которые я хочу повторить и получить коды ответов? - person Denis; 01.06.2016