1

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调用。

4

0 回答 0