The CasperJS Quickstart Guide在填写表单时有这个例子:
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在调用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());
});
突然,这很有效。为什么这里需要额外的spooky.then调用,当使用Casper时不需要它?我在Casper中对此进行了测试,并且按预期工作,但是使用Spooky时,需要额外的then
调用。