将全局变量从一个评估页面传递到另一个

时间:2016-07-10 16:57:12

标签: javascript phantomjs casperjs slimerjs

所以我有一些代码,我想在外面传递一个变量,所以我可以评估另一个页面并注入上一页的代码。

我不是这里的专家,我只是没有理解这个概念。谁能帮助我理解我做错了什么?

var loadtest = require('loadtest');

var host = 'http://localhost:1337';

var options = {
    url: host + '/test/hi',
    requestsPerSecond: 50
};

loadtest.loadTest(options, function(error, result)
{
    if (error)
    {
        return console.error('Got an error: %s', error);
    }
    console.log('Tests run successfully: '+result);
});

1 个答案:

答案 0 :(得分:0)

我为您编写了一个小示例代码,以说明如何在evaluate和casper脚本之间传递结果:

var casper = require('casper').create({
    verbose: true,
    logLevel: 'debug'
});

var array = []

casper.start('http://www.ecma-international.org/memento/TC39.htm');

casper.then(function() {
    array = casper.evaluate(function () {
        var nodes = document.querySelectorAll('a')
        var result = Array.prototype.map.call(nodes, function (div) {
            return div.href
        })
        return result
    });
});

casper.then(function () {
    casper.echo(array.length);
    casper.echo(array.join("\n"))
})

casper.run()

输出:

22
http://www.ecma-international.org/default.htm
http://www.ecma-international.org/contact/contact.html
http://www.ecma-international.org/sitemap/ecma_sitemap.html
http://www.ecma-international.org/memento/index.html
http://www.ecma-international.org/activities/index.html
http://www.ecma-international.org/news/index.html
http://www.ecma-international.org/publications/index.html
http://www.ecma-international.org/memento/history.htm
... ignore some lines

所以,来你的代码:

  1. evaluate参数的更改不会对您的全局变量进行更改。也就是说,无论你对scheduleArrayevaluate做什么,全局变量scheduleArray都是一样的。

  2. evaluate内,您应该使用console.log进行记录,但在evaluate之外,您应该使用casper.echo