直接从CasperJS调用JS方法

时间:2012-12-06 19:50:19

标签: javascript testing phantomjs casperjs

我正在尝试使用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的页面位?

3 个答案:

答案 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;