console.log 在 CasperJS 的 set Timeout 评估中不起作用
console.log doesn't work in CasperJS' evaluate with setTimeout
为什么当我在evaluate
中使用console.log
时,它有效:
casper.then(function() {
this.evaluate( function() {
console.log('hello');
});
});
但这不起作用:
casper.then(function() {
this.evaluate( function() {
setTimeout( function() {console.log('hello');}, 1000);
});
});
因为你混淆了casperjs和远程页面环境。evaluate
函数将在远程页面环境中执行代码,因此console.log
调用不会输出任何内容。
捕获远程console.log
呼叫,请收听remote.message
事件:
casper.on('remote.message', function(msg) {
this.echo('remote message caught: ' + msg);
})
顺便说一句,事件的文档以及用于评估的文档几乎是详尽的。
@NiKo的答案至关重要。
我还建议添加以下内容,因为如果出现错误,您甚至可能无法打印出 console.log() msg,而是以沉默告终。
casper.on( 'page.error', function (msg, trace) {
this.echo( 'Error: ' + msg, 'ERROR' );
});
CasperJS包含ClientUtils,可以从远程页面使用它来轻松登录到casper脚本的控制台:
__utils__.echo('This message is logged from the remote page to the CasperJS console');
基于@odigity的答案,这使得Casperjs以更熟悉的错误/堆栈跟踪而死亡:
var util = require('util');
casper.on('page.error', function exitWithError(msg, stack) {
stack = stack.reduce(function (accum, frame) {
return accum + util.format(''tat %s (%s:%d)'n',
frame.function || '<anonymous>',
frame.file,
frame.line
);
}, '');
this.die(['Client-side error', msg, stack].join(''n'), 1);
});
相关文章:
- 使用正则表达式评估电子邮件地址时出现性能问题
- $timeout如何在angularJs中工作
- 如何检查链接是否有文本,并根据文本值评估条件-Jquery/JS
- 类型错误'未定义'不是对象(正在评估'navigator.connection.type'
- 下载javascript文件,但不要立即对其进行评估
- "控制器作为“;$timeout中的语法
- 在WebView iOS中评估Javascript
- TypeError:undefined不是对象(正在评估'newWindow.focus')
- r.js评估'text'插件,尽管在'stubModules'参数
- 避免重新评估和动态卸载用“require”调用的对象
- 删除评估值Javascript时的错误
- 咖啡脚本意外的条件评估
- Javascript-在一行中评估多个正则表达式
- &&评估问题
- 如何在使用$timeout进行指令渲染后调用控制器方法
- 在JavaScript中评估复杂的数学表达式
- JavaScript:获取对象的评估属性
- 基本的Javascript/jQuery数学游戏:为什么可以't我第二次运行此函数时进行评估
- 带有 Sweet.js 的惰性评估宏
- console.log 在 CasperJS 的 set Timeout 评估中不起作用