如何通过命令行将变量作为参数传递给CasperJS脚本?

我在js文件中使用PhantomJs,CasperJs和Js穿过cmd。

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

为了避免更新文件,我想通过命令行传递值,以测试它的位置。

有没有办法在运行文件时通过cmd声明字符串变量?

例如:

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

文档说您可以传递命令行参数。

CasperJS在PhantomJS的一个上面附带一个内置的命令行解析器,位于cli模块中; 它将传递的参数公开为位置参数和命名选项

但是不用担心操作cli模块解析API,Casper实例总是包含一个随时可用的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 arg2 arg3 –foo = bar –plop anotherarg Casper

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

在命令提示符下说:

 casperjs test file_name.js --port='123' --username='batman' 

在测试脚本中说:

 casper.cli.get('port'); casper.cli.get('username'); 

您可以在一个文件中包含全局变量,然后在其他文件中调用它们。 就像你想要修改一个变量一样,你只需要修改一个文件。 使用phantom.injectJs(path / to / file)调用主文件中的其他文件。 它适用于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(){ ... }); 

完整直观的解决方案:

请考虑以下命令:

 casperjs example.js true --foo=false 

字符串true是命令行参数 ,而名称foo是命令行选项

分配给名称(变量) foo是字符串false

命令行参数是位置的,必须通过参数的索引进行访问。

命令行选项已命名,必须通过选项名称进行访问。

换句话说,您可以将参数视为与数值数组中的值类似,而选项类似于关联数组中的键/值对。


命令行参数

您可以使用以下方法之一访问参数:

 casper.cli.get(0) // Returns Boolean true ; Slowest / Most Readable (Opinion) casper.cli.args[0] // Returns Boolean true casper.cli.raw.get(0) // Returns String "true" casper.cli.raw.args[0] // Returns String "true" ; Fastest / Least Readable (Opinion) 

命令行选项

您可以使用以下方法之一访问这些选项:

 casper.cli.get('foo') // Returns Boolean false ; Slowest / Most Readable (Opinion) casper.cli.options['foo'] // Returns Boolean false casper.cli.raw.get('foo') // Returns String "false" casper.cli.raw.options['foo'] // Returns String "false" ; Fastest / Least Readable (Opinion) 

有关CasperJS命令行参数或选项的其他查询,请参阅文档: http ://docs.casperjs.org/en/latest/cli.html