javascript - 如何从扩展的 casperjs 函数返回值?

标签 javascript casperjs

我正在尝试从下面的函数返回一个值,如下所示。

html = casper.get_HTML(myselector);

我得到的只是“未定义”(return_html)。但是,“html”变量已正确设置。整体功能运行正常。这只是返回值的问题。

你是怎么做到的?

casper.get_HTML = function(myselector) {
    var return_html;

    casper.waitForSelector(myselector,
        function() {
            var html = casper.getHTML(myselector, false);
            return_html = html;                                     //got the html
        },
        function() {                                                // Do this on timeout
            return_html = null;
        },
       10000                                                       // wait 10 secs
    );

    return return_html;
 };

最佳答案

在 CasperJS 中,所有 then* 和所有 wait* 函数都是异步的步骤函数。这意味着您无法返回在自定义函数中异步确定的内容。您必须使用回调:

casper.get_HTML = function(myselector, callback) {
    this.waitForSelector(myselector,
        function then() {
            var html = this.getHTML(myselector, false);
            callback(html);
        },
        function onTimeout() {
            callback();
        },
        10000 // wait 10 secs
    );
    return this; // return this so that you can chain the calls
};

casper.start(url).get_HTML("#myid", function(html){
    if (html) {
        this.echo("success");
    } else {
        this.echo("failed");
    }
}).run();

关于javascript - 如何从扩展的 casperjs 函数返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25695079/

相关文章:

javascript - Royalslider - 属性 'ev' 在 'slider.ev.on' 上未定义

javascript - 如何在 Ruby on Rails 中的服务器端运行 Javascript

javascript - 通过 CSS3 模拟垂直轮胎上的旋转动画

unit-testing - 卡斯帕 : Can we organize test suites like phpunit for example "allTests"

javascript - 使用javascript找出gridview中的总金额

javascript - 通过将包添加到 Node 包管理器 package.json 文件来安装包?

phantomjs - 如何使用 es6 模块组织 casperjs 测试

phantomjs - 如何在 CasperJS/PhantomJS 脚本中与用户交互?

javascript - 如何在Casper js中设置测试用例失败并传递消息?

css - CasperJs 测试找不到 css 选择器(从 jade 迁移到 pug 后测试失败)