与casperjs我填写textarea并触发一个事件:
casper.thenClick( "#project-bar-yes-no-modal.in button.modal-no", function() {
casper.evaluate(function(){
$("#project-button-textarea-for-testing").val( "// This is a test program\nellipse(100, 100, 100, 102);\n\nrect(50, 50, 50, 50);" ).trigger("set-live-editor");
});
this.wait(200);
} );
工作正常。当我尝试使用函数执行相同操作时,不会调用casper.evaluate()。
casper.setLiveEditorCode = function( code ) {
utils.dump("1");
casper.evaluate(function(){
utils.dump("2");
$("#project-button-textarea-for-testing").val( code ).trigger("set-live-editor");
});
};
和
casper.thenClick( "#project-bar-yes-no-modal.in button.modal-no", function() {
casper.setLiveEditorCode( "ellipse(100, 100, 100, 101);\n\n" );
this.wait(200);
} );
" 1"在输出中显示," 2"不是。为什么呢?
答案 0 :(得分:0)
简而言之,评估中的代码由浏览器执行,并且utils
对象未在浏览器的js环境中定义...
casper.setLiveEditorCode = function( code ) {
utils.dump("1");//here is casperjs js environment, and utils is imported by casperjs bootstrap.js
casper.evaluate(function(){
utils.dump("2"); //here browser js environment, and utils is not defined in that scope...
});
};
请阅读official docs关于evaluate
的详细信息。