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 是在说调用 spooky.then 函数时它仍在表单页面上。但是如果你再添加一个 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
调用。