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

问题描述 投票:18回答:5

我在一个js文件中使用PhantomJs,CasperJs和Js来运行cmd。

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

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

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

例如:

casperjs test.js "var site='http://google.com';"
javascript jquery cmd phantomjs casperjs
5个回答
23
投票

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 }

11
投票

在命令提示符下说:

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

在测试脚本中说:

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

2
投票

Complete Intuitive Solution:

请考虑以下命令:

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


1
投票

找到答案太难理解了一眼。您可以传递arg或选项参数。

示例:传递选项*(需要使用=

$ 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();

1
投票

你可以有一个包含全局变量的文件,然后在其他文件中调用它们。就像你想要修改一个变量一样,你只需要修改一个文件。使用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(){
    ...
});
© www.soinside.com 2019 - 2024. All rights reserved.