我想用CasperJS测试一个网站。如果在某个输入字段上触发onBlur事件,则会在一段时间后更新页面上其他位置的属性。我想等到这个属性更新并编写以下代码才能这样做:
Foo.prototype.setBar = function ( baz ) {
casper.then( function () {
// local variable baz can be passed to evaluate
casper.evaluate( function ( arg1 ) {
var $inputField = $( 'section.xyz input' );
$inputField.val( arg1 );
$inputField.blur();
}, baz ); // this works just fine
// local variable baz can not be passed to evaluate within waitFor()
casper.waitFor( function () {
return this.evaluate(function ( arg1 ) {
return __utils__.findOne('mySelector').getAttribute('data-xyz') === arg1;
}, baz);
}, function then() {
casper.log('Attribute with given value was found', 'info');
}, function timeOut() {
casper.test.fail('Attribute with given value could not be found');
}, 10000); // this doesn't work
});
};
显然,waitFor方法中传递的变量baz
的值为null或未定义。如何解决这个问题?
答案 0 :(得分:0)
waitFor的签名是
waitFor(Function testFx[, Function then, Function onTimeout, Number timeout, Object details])
如您所见,无法将任何参数传递给testFx()函数。
你可以解决这个问题的方法是:在你之前的evaluate()调用中创建一个DOM节点(例如一个隐藏字段)并将baz变量的值放在那里。然后在testFx()函数中从该DOM节点获取它。