CasperJS中的条件语句

Anhldbk

我刚刚在项目中使用了CasperJS。它的语法清晰易学。但是仔细阅读它的文档,我从没有发现关于条件语句的任何信息。例如,如果我们可以通过以下方式使用CasperJS,可能会很有用:

var casper = require('casper').create();
var no_error = false;

casper.start('http://casperjs.org/', function() {
    this.echo(this.getTitle());
    no_error = true;
});

if (no_error) {
    casper.thenOpen('http://phantomjs.org', function() {
        this.echo(this.getTitle());
    });
}

casper.run();

有什么办法可以自定义CasperJS以使其工作?

Artjom B.

是的,否则这样的同步功能可能casper.exists没有意义。

在您的示例中no_error永远不会是true,因为在长时间评估后casper.start回调是异步执行的if (no_error)

您必须嵌套一些步骤(所有wait*then*功能都是步骤)才能执行此操作:

var casper = require('casper').create();
var no_error = false;

casper.start('http://casperjs.org/', function() {
    this.echo(this.getTitle());
    no_error = true;
});

casper.then(function(){
    if (no_error) {
        casper.thenOpen('http://phantomjs.org', function() {
            this.echo(this.getTitle());
        });
    }
});

casper.run();

您可以嵌套步骤函数,但是必须记住,在步骤之后不应该使用同步函数,因为同步函数将以相反的方式执行。

casper.then(function(){
    casper.thenOpen('http://phantomjs.org', function() {
        this.echo("1: " + this.getTitle());
    });
    this.echo("2: " + this.getTitle());
});

将先打印2,然后再打印1。

同步

如果条件数据是同步返回的,那么您可以直接对其进行评估

casper.start('http://casperjs.org/', function() {
    var array = this.evaluate(function(){....});
    if (array && array.length > 2) {
        this.thenOpen(...);
    }
});

根本不需要额外的步骤。

异步

这就是它变得有趣的地方。例如,如果必须在页面上下文中触发长时间运行的脚本(不限于页面上下文),则必须等待在Casper上下文中完成脚本。您将需要一个指标变量。

casper.thenEvaluate(function(){
    longRunningFunction(function callback(){
        window.__someIndicator = true;
    });
});

casper.waitFor(function check(){
    return this.evaluate(function(){
        return !!window.__someIndicator;
    });
}, function then(){
    this.thenOpen(...);
}, function onTimeout(){
    this.echo("failed");
    this.thenOpen(...); // open something else
});

有时您可能没有回调。在这种情况下,DOM可能会更改,您必须等待这些更改。

结论

第一个代码段中的示例并没有真正有用,应将其替换为其他方法之一。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章