我正在尝试使用CasperJS测试页面,特别是我想要将数据模型捅一堆。假设我有一个称为税收的基本功能,我想确保它使用正确的税率。所以我想要像:
this.test.assert(taxes(100, 'Ontario') === 15, "Check ontario tax rate");
而不是填写表格并查看其打印内容。 taxes
方法存在于全局范围内,因此我可以从任何地方(包括来自firebug或Chrome中的控制台)轻松执行它。但是,在CasperJS中工作的范围并不合适(我想?我得到ReferenceError: Can't find variable: taxes
。
好像我错过了一些简单的东西。
TL; DR:如何在CasperJS测试中直接执行JS的页面位?
答案 0 :(得分:6)
您是否尝试过使用evaluate()
?
相关引用:“执行代码就像使用浏览器控制台一样。”
类似于:
casper.evaluate(function(amount, province) {
return taxes(amount, province);
}, {100, 'Ontario'});
答案 1 :(得分:0)
使用assertEvalEquals()方法。
答案 2 :(得分:0)
如果您通过jQuery样式的引用调用该方法,请确保显式包含该库,以免您获得ReferenceError:
var casper = require('casper').create({
clientScripts: ['js/jquery-1.7.2.js']
});
...
casper.start('foo.php',
function() {
console.log(this.evaluate(function() {
return $('taxes').text();
}));
});
casper.run();
请参阅:https://groups.google.com/forum/#!msg/casperjs/2uyUOqdzShw/bHWrJYXni40J
如果你在全局范围内隐式调用它(即直接javascript,而不是例如$('tax')),则可能必须显式地将窗口或文档命名空间添加到引用:< / p>
document.querySelector('#taxes').value = taxes_text;