このアサートが失敗する理由を理解するには、 への呼び出しごと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');
});