我尝试使用CasperJS设置单选按钮的值时没有成功。
有人可以向我解释为什么assertEval在这次测试中失败了吗?
this.test.assertExist('input[name=main][value=yes]');
casper.thenEvaluate(function(term) {
document.querySelector('input[name=main][value=yes]').setAttribute('checked', true);
});
this.test.assertEval(function() {
return document.querySelector('input[name=main][value=yes]').getAttribute('checked') == "true";
}, 'Main was set to true');
答案 0 :(得分:3)
要理解为什么此断言失败,我们需要了解每次调用casper.then
都会定义一个新的导航步骤,casper.run
按照他们定义的顺序执行每一步。因此,casper.then
块中的代码是异步回调。
如果您注释代码如下:
this.test.assertExists('input[name=main][value=yes]');
casper.then(function() {
this.echo('Select the radio button');
this.evaluate(function() {
document.querySelector('input[name=main][value=yes]').setAttribute('checked', true);
}
});
this.echo('Assert that the radio button is selected');
this.test.assertEval(function() {
return document.querySelector('input[name=main][value=yes]').getAttribute('checked') == "true";
}, 'Main was set to true');
你会注意到"断言选择了单选按钮"在&#34之前打印;选择单选按钮"。这就是你的问题!
如果您没有执行任何导航步骤,则可能不需要使用then
。在这种情况下,您只需使用evaluate
代替thenEvaluate
。或者,如果您确实需要使用then
,只需将assertEval
放入同一casper.then
块:
this.test.assertExists('input[name=main][value=yes]');
casper.then(function() {
this.evaluate(function(term) {
document.querySelector('input[name=main][value=yes]').setAttribute('checked', true);
});
this.test.assertEval(function() {
return document.querySelector('input[name=main][value=yes]').getAttribute('checked') == "true";
}, 'Main was set to true');
});