CasperJS等待实时DOM填充

时间:2014-06-22 14:07:49

标签: angularjs backbone.js casperjs

我正在评估使用Casper.js为我的应用程序进行功能/验收测试。到目前为止我遇到的最大问题是我的应用程序是使用把手模板的SPA(编译为JS)我的应用程序的页面只不过是一个带有空div的shell,其中将注入标记通过JS。

我和Casper稍微混淆了一下并尝试使用它的waitFor函数。在注入任何标记之前,我似乎可以从中获取所有内容。我已经尝试过waitForSelector,但它在5秒后就超时了。我应该尝试增加超时吗?该页面通常很快就会在浏览器中加载,因此可能会出现另一个问题。

我使用Yadda和Casper进行步骤定义:

module.exports.init = function() {
    var dictionary = new Dictionary()
        .define('LOCALE', /(fr|es|ie)/)
        .define('NUM', /(\d+)/);

    var tiles;

    function getTiles() {
        return document.querySelectorAll('.m-product-tile');
    }

    function getFirstTile(collection) {
        return Array.prototype.slice.call(collection)[0];
    }

    var library = English.library(dictionary)

        .given('product tiles', function() {
            casper.open('http://www.example.com/#/search?keywords=ipods&resultIndex=1&resultsPerPage=24');
            casper.then(function() {
                // casper.capture('test.png');
                casper.echo(casper.getHTML());
                casper.waitForSelector('.m-product-tile', function() {
                    tiles = getTiles();
                });
            });
        })

        .when('I tap a tile', function() {
            casper.then(function() {
                casper.echo(tiles); //nodelist
                var tile = Array.prototype.slice.call(tiles)[0];
                casper.echo(tile); //undefined!
                var pid = tile.getAttribute('data-pid');
            })
        })

        .then('I am taken to a product page', function() {

        });

    return library;
};

任何Angular,Backbone,Ember人都会遇到这样的问题吗?

0 个答案:

没有答案