要了解此断言失败的原因,我们需要了解每次调用都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');
您会注意到在“选择单选按钮”之前打印了“断言已选择单选按钮”。所以有你的问题!
解决方案:
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');
});