我在js文件中使用PhantomJs,CasperJs和Js穿过cmd。
想象一下,我们有两个文件(test1.js和test2.js)。这两个文件都有一个url / site变量,用于将测试定向到特定地址。每当环境发生变化或目标位置发生变化时,我们都需要更新此变量。
为了避免更新文件,我想通过命令行传递值,以便测试它的位置。
有没有办法在运行文件时通过cmd声明字符串变量?
E.g:
casperjs test.js "var site='http://google.com';"
答案 0 :(得分:22)
documentation表示您可以传递命令行参数。
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 }
答案 1 :(得分:11)
在命令提示符下说:
casperjs test file_name.js --port='123' --username='batman'
测试脚本中的说:
casper.cli.get('port');
casper.cli.get('username');
答案 2 :(得分:2)
请考虑以下命令:
casperjs example.js true --foo=false
字符串true
是命令行参数,而名称foo
是命令行选项。
分配给名称(变量)foo
的值是字符串false
。
命令行参数是位置的,必须通过参数索引访问。
命令行选项已命名,必须通过选项名称进行访问。
换句话说,您可以将参数视为与数字数组中的值类似,而选项类似于关联数组中的键/值对。 / p>
命令行参数
您可以使用以下方法之一访问参数:
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
答案 3 :(得分:0)
您可以拥有一个包含全局变量的文件,然后在其他文件中调用它们。就像你想要修改一个变量一样,你只需要修改一个文件。使用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(){
...
});
答案 4 :(得分:0)
发现的答案一目了然,难以理解。 您可以传递arg或option参数。
示例:传递选项*(必须使用
=
)
$ casperjs myscript.js --username=user --password=123
var casper = require('casper').create();
var username = casper.cli.options.username;
var password = casper.cli.options.password;
console.log(username + ':' + password); // user:123
casper.exit();
示例:传递Args
$ casperjs myscript.js user 123
var casper = require('casper').create();
var username = casper.cli.args[0];
var password = casper.cli.args[1];
console.log(username + ':' + password); // user:123
casper.exit();