将参数数组从 node.js 传递给 CasperJS
Passing argument array to CasperJS from node.js
我正在使用 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,那么可以这样解析。 resourceExists()
仅将正则表达式作为 RegExp
个对象。
一个更好的方法,如果你传递的数据变得太长,那么你应该用 node.js' fs 模块将数据写入一个临时文件,然后用 PhantomJS' fs 模块读取它,沿着方式。
解决问题的更好方法:
https://groups.google.com/forum/#!topic/casperjs/bhA81OyHA7s
将变量作为选项传递。很有魅力
我的最终节点:
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();
我正在使用 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,那么可以这样解析。 resourceExists()
仅将正则表达式作为 RegExp
个对象。
一个更好的方法,如果你传递的数据变得太长,那么你应该用 node.js' fs 模块将数据写入一个临时文件,然后用 PhantomJS' fs 模块读取它,沿着方式。
解决问题的更好方法: https://groups.google.com/forum/#!topic/casperjs/bhA81OyHA7s
将变量作为选项传递。很有魅力
我的最终节点:
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();