2014-02-13 143 views
16

我正在使用PhantomJs,CasperJs和Js在js文件中运行cmd。如何通过命令行将变量作为参数传递给CasperJS脚本?

试想一下,我们有两个文件(test1.js和test2.js)。这两个文件都有一个url /站点变量,将测试指向特定的地址。每当环境发生变化或目标位置发生变化时,我们都需要更新此变量。

为了避免必须更新文件,我想通过命令行传递值,以便在哪里测试。

有没有为你运行该文件宣布通过CMD字符串变量的方法吗?

例如为:

casperjs test.js "var site='http://google.com';" 

回答

18

documentation说,你可以通过命令行参数。

CasperJS附带一个内置的上 PhantomJS”之一,位于cli模块中的顶部命令行分析器;它暴露了传递的参数 作为位置的人,并命名选项

但对于操纵CLI模块解析API无后顾之忧,一个卡斯帕尔 实例总是包含一个准备使用cli属性,允许所有这些参数的简单 访问。

示例代码:

var casper = require("casper").create(); 

casper.echo("Casper CLI passed args:"); 
require("utils").dump(casper.cli.args); 

casper.echo("Casper CLI passed options:"); 
require("utils").dump(casper.cli.options); 

casper.exit(); 

执行结果:

$ casperjs test.js ARG1参数3 --foo =酒吧--plop anotherarg卡斯帕

CLI passed args: [ 
    "arg1", 
    "arg2", 
    "arg3", 
    "anotherarg" ] 
Casper CLI passed options: { 
    "casper-path": "/Users/niko/Sites/casperjs", 
    "cli": true, 
    "foo": "bar", 
    "plop": true } 
+0

谢谢。太棒了。很好的解释。我想我只是不明白他们的解释。感谢您的深入信息。 –

+1

@AaronLoften那么,我必须告诉你,我的整个答案是从我链接的文档页面复制而来;)。 – kapa

+0

哈哈。我瞎了。再次感谢! –

0

你可以用你的全局变量有一个文件,th en在其他文件中调用它们。像这样,当你想修改一个变量时,你只有一个文件需要修改。使用phantom.injectJs(路径/到/文件)来调用主文件中的其他文件。它适用于phantomJS和slimerJS。

实施例:

js_file

--variable.js-- 
var site='http://google.com'; 

js_file

--file1.js-- 
phantom.injectJs('variable.js'); 
casper.start('site', function(){ 
    ... 
}); 

js_file

--file2.js-- 
phantom.injectJs('variable.js'); 
casper.thenOpen('site', function(){ 
    ... 
}); 
10
在命令提示

说:

casperjs test file_name.js --port='123' --username='batman' 
在测试脚本

说:

casper.cli.get('port'); 
casper.cli.get('username'); 
相关问题