CasperJS中的条件语句
Conditional statements in CasperJS
我刚刚在我的项目中使用了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来这样工作吗?
是的,否则像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可能会发生更改,您必须等待这些更改。
结论
第一个片段中的示例并不是很有用,应该用其他方法进行交换。
相关文章:
- 这个条件语句的逻辑有问题
- 如何检查if/else语句中的随机条件
- 使用条件语句,使 jquery fadeIn/fadeOut 仅在视口 >= 480px 时才有效
- 照片滑块的条件语句
- 使用解析为javascript源的.php,如何使用条件语句将javascript代码封装在php括号之间
- KnockoutJS:为虚拟元素使用嵌套的条件if语句
- 在if语句注释的条件内指定变量的值
- Javascript/C# - 满足语句条件时的确认对话框
- 如何将窗口[VariableName]设置为if语句条件
- if 语句条件由 javascript 中 if 语句内的内容触发
- if 语句条件逻辑
- 函数声明,就像语句条件一样
- 如何减少“如果语句”条件?[减少 if 语句中的条件]
- if语句条件检查!= "undefined"失败
- If语句条件满足,但内容未执行
- AngularJS在ng-repeat语句中的if语句条件
- 变量中用作if语句条件的字符串
- Javascript如果语句条件不满足
- if 语句 - 条件评估时间(Javascript)
- 数组中指定的 if 语句条件