Как передать переменную в качестве аргумента в CasperJS script через командную строку?

Я использую PhantomJs, CasperJs и Js в js файле, который запускается через cmd.

Представьте, что у нас было два файла (test1.js и test2.js). Оба файла имеют переменную url/site, которая направляет тест на конкретный адрес. Каждый раз, когда изменилась среда или изменилось целевое местоположение, нам нужно было бы обновить эту переменную.

Чтобы избежать необходимости обновлять файлы, я хотел бы передать значения через командную строку, где проверить это.

Есть ли способ объявить строковую переменную через cmd при запуске файла?

например:.

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

Ответы

Ответ 1

В документации говорится, что вы можете передавать параметры командной строки.

CasperJS поставляется со встроенным синтаксическим анализатором командной строки поверх PhantomJS один, расположенный в модуле cli; он раскрывает переданные аргументы как позиционные и именованные опции

Но не стоит беспокоиться о том, как манипулировать API-интерфейсом для анализа cli, 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 Каспер

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

Ответ 2

в командной строке:

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

в тесте script скажите:

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

Ответ 3

Полное интуитивное решение:

Рассмотрим следующую команду:

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.

Ответ 4

Вы можете иметь один файл с вашими глобальными переменными, а затем вызывать их в других файлах. Например, если вы хотите изменить одну переменную, у вас есть только один файл для изменения. Используйте 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(){
    ...
});

Ответ 5

Нашел ответы слишком сложно понять с первого взгляда. Вы можете передать параметры 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();

Пример: передача аргументов

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