2017-05-16 1 views
0

Je casperjs ci-dessous script:Comment exécuter un script casperjs de Java

var casper = require('casper').create({ 
    verbose: true, 
    logLevel: 'debug',//needed for debugging 
    pageSettings: { 
     webSecurityEnabled: false, 

    } 
}); 
casper.start('http://toolsqa.com/automation-practice-form/',function() { 
    var path = 'C:/WINDOWS/TEMP'; 
    this.download(casper.cli.get("url"),path + "/test.xls"); 
}); 

casper.run(function() { 
    this.echo('Done.').exit(); 
}); 

Le script est exécuté lorsqu'il est exécuté par CLI et télécharge le fichier dans le dossier Temp. Je passe l'URL par CLI et commande pour exécuter le script est comme ci-dessous:

--C:\js examples>casperjs testfile path --url="url of file to be downloaded" 
--C:\js examples>casperjs CaspetTest.js --url="http://20tvni1sjxyh352kld2lslvc.wpengine.netdna-cdn.com/wp-content/uploads/2016/09/Test-File-to-Download.xlsx" 

Maintenant, j'ai deux tâches:

  1. pour exécuter ce script java: pour ce faire, j'ai essayé d'utiliser commande ci-dessous:

    Processus = Runtime.getRuntime(). exec ("C:/Program Files (x86) /PhantomJS/phantomjs-2.1.1-windows/bin/phantomjs download.js");

La commande s'exécute mais aucun fichier n'est téléchargé. Quelle est la bonne façon d'exécuter ce script à partir de Java?

  1. Pour passer l'url comme argument lors de l'exécution dans java quelque chose comme ce que je fais par CLI. Comment peut-on faire ça?

Edit: J'ai essayé d'utiliser la fonction moteur de script eval:

ScriptEngineManager manager = new ScriptEngineManager(); 
ScriptEngine engine = manager.getEngineByName("JavaScript"); 
engine.eval(new java.io.FileReader(System.getProperty("user.dir")+"/resources/CasperTest.js")); 

Mais dans ce cas, je reçois ci-dessous exception:

javax.script.ScriptException: ReferenceError: "require" is not defined in <eval> at line number 1 
    at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:455) 
    at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:439) 
    at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:401) 
    at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:397) 
    at jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:147) 
    at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:249) 
    at loginpage.main(loginpage.java:91) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 
Caused by: <eval>:1 ReferenceError: "require" is not defined 
    at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57) 
    at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:319) 
    at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:291) 
    at jdk.nashorn.internal.objects.Global.__noSuchProperty__(Global.java:914) 
    at jdk.nashorn.internal.scripts.Script$\^eval\_.:program(<eval>:1) 
    at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:636) 
    at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:229) 
    at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:387) 
    at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:437) 
    ... 10 more 
[INFO - 2017-05-12T07:27:05.869Z] ShutdownReqHand - _handle - About to shutdown 

Répondre

0

Jetez un oeil à How to run javascript in java programming et un exemple qui appelle une fichier javascript externe https://gist.github.com/UnquietCode/5614860

Et vous pouvez passer des arguments comme suit ws:

java YourClassWithMainMethod arg1 arg2 etc

public class YourClassWithMainMethod { 
    public static void main (String[] args) { 
     String firstArg = args[0]; 
     String scndArg = args[1]; 
     // etc 
     // do your stuff with input 
    } 
} 
+0

en utilisant la classe de moteur de script n'a pas fonctionné. Je reçois "ScriptException: ReferenceError:" nécessite "n'est pas défini", comme mentionné dans la question –

+0

Vous devrez probablement charger cela en premier. – ipper

+0

jeter un oeil à http://stackoverflow.com/questions/32607089/how-should-i-run-nodejs-from-a-java-application#32746674 – ipper