我正在评估使用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人都会遇到这样的问题吗?