从node.js向CasperJS传递参数数组

Passing argument array to CasperJS from node.js

本文关键字:参数 数组 CasperJS node js      更新时间:2023-09-26

我正在使用CasperJS测试一个网站。测试的一部分是资源检查。

我想做的事:

将数组或对象数组传递给CasperJS并对其进行迭代。第一步是先使用一个数组,然后使用对象数组。两者都有相同的问题。

Node.js代码:

require('child_process').exec('/usr/local/bin/casperjs script.js [url,regex]' , function(err, stdout, stderr) {  
    err && console.log(err);
    stderr && console.log(stderr.toString());
    stdout && console.log(stdout.toString());
})

Casperjs脚本:

var casper = require('casper').create(),
    a = casper.cli.args[0],
    // we need something here to string to js array
    w=a[0],
    r=a[1];
casper.start(w, function() {
    if (this.resourceExists(r)) {
        console.log("PASS't" +r+ "'t"+ w);
    } else {
        console.log("FAIL't" +r+ "'t"+ w);
    }
});
casper.run();

问题是CasperJS将args作为字符串。

当你这样称呼它时:

'/usr/local/bin/casperjs script.js "['''+yourURL+''','''+yourRegex+''']"'

你可以简单地使用

a = JSON.parse(casper.cli.args[0]),
w = a[0],
r = new RegExp(a[1]);

如果casper.cli.args[0]实际上是JSON,那么它可以被解析为JSON。resourceExists()仅将正则表达式作为RegExp对象。


更好的方法是,如果您传递的数据太长,那么您应该使用node.js的fs模块将数据写入一个临时文件,然后使用PhantomJS的fs模块读取数据,并在此过程中对其进行解析。

解决问题的更好方法:https://groups.google.com/forum/#!topic/caperjs/bhA81yHA7s

将变量作为选项传递。像魅力一样工作


我的最终节点:

var exec = require('child_process'),
array = [
    {url:"",regex:""}
];

for (var i = 0; i < array.length; i++) {
    var url = array[i]["url"];
    var regex = array[i]["regex"];
    exec.exec('/usr/local/bin/casperjs casper2.js --url="'+url+'" --regex="'+regex+'" ' , function(err, stdout, stderr) {  
        err && console.log(err);
        stderr && console.log(stderr.toString());
        stdout && console.log(stdout.toString());
    });
};

在CasperJS 中

w=casper.cli.get("url"),
reg= casper.cli.get("regex"),
rpart = reg.split("/"),
r=new RegExp(rpart[1],rpart[2]);
casper.start(w, function() {
    if (this.resourceExists(r)) {
        console.log("PASS't" +r+ "'t"+ w);
    } else {
        console.log("FAIL't" +r+ "'t"+ w);
    }
});
casper.run();