CasperJS クイックスタート ガイドには、フォームへの入力に関する次の例があります。
casper.start('http://google.fr/', function() {
// search for 'casperjs' from google form
this.fill('form[action="/search"]', { q: 'casperjs' }, true);
});
casper.then(function() {
// aggregate results for the 'casperjs' search
links = this.evaluate(getLinks);
// now search for 'phantomjs' by filling the form again
this.fill('form[action="/search"]', { q: 'phantomjs' }, true);
});
true パラメーターが this.fill に渡されるため、フォームは自動的に送信され、新しいページが読み込まれるとすぐに次の casper.then 関数が呼び出されます。
しかし、SpookyJS を使用して Cucumber テストを作成する場合は、次のようになります。
spooky.start("http://www.somepage.com");
spooky.then(function () {
this.fill("form", {username: "foo", password: "bar"}, true);
});
spooky.then(function () {
this.echo(this.getPageContent());
this.echo(this.getCurrentUrl());
});
ページのコンテンツと URL を見ると、spooky.then 関数が呼び出されたときにまだフォーム ページにあると Spooky が言っていることがわかります。しかし、もう 1 つ spooky.then を追加すると、次のようになります。
//Empty Spooky.then call so we can do what we want on the correct page
this.spooky.then(function () {});
this.spooky.then(function () {
this.echo(this.getPageContent());
this.echo(this.getCurrentUrl());
});
突然、これは機能します。Casper を使用している間は必要ないのに、ここで余分な spooky.then 呼び出しが必要なのはなぜですか? これを Casper でテストしたところ、期待どおりに動作しましたが、Spooky では追加のthen
呼び出しが必要です。