2017-05-16 2 views
0

ich unten laufen müssen casperjs Skript:Wie ein casperjs Skript von 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(); 
}); 

Das Skript ausgeführt wird, wenn durch CLI ausgeführt und lädt die Datei in Temp-Ordner. Ich bin das Bestehen der URL durch CLI und Befehl, um das Skript auszuführen, wie unten:

--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" 

Jetzt habe ich zwei Aufgaben:

  1. dieses Skript von Java auszuführen: die i zu tun versucht, mit unter Befehl:

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

Der Befehl wird ausgeführt, aber es wird keine Datei heruntergeladen. Was ist die korrekte Art dieses Skript von Java auszuführen?

  1. Die URL als Argument übergeben, wenn in Java ausgeführt wird, etwas, was ich über CLI mache. Wie können wir das machen?

Edit: Ich habe versucht, Script-Engine eval-Funktion:

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

Aber in diesem Fall i unten Ausnahme erhalten:

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 

Antwort

0

Werfen Sie einen Blick auf How to run javascript in java programming und Beispiel, das ein ruft externe Javascript-Datei https://gist.github.com/UnquietCode/5614860

Und Sie können Argumente wie folgt übergeben YourClassWithMainMethod

java arg1 arg2 usw.

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

mit Klasse Script-Engine nicht gearbeitet hat: ws. Ich erhalte "ScriptException: ReferenceError:" require "ist nicht definiert", wie in der Frage –

+0

erwähnt, die Sie wahrscheinlich zuerst laden müssen. – ipper

+0

werfen Sie einen Blick auf http://stackoverflow.com/questions/32607089/how-should-irun-nodejs-from-a-java-application#32746674 – ipper

Verwandte Themen