本文目錄一覽:
- 1、請問怎麼寫java調用node環境運行js代碼?
- 2、java課程分享JavaScript代碼測試必備的12款工具
- 3、java程序中運行js腳本
- 4、如何通過java代碼調用js
- 5、如何在java中調用js方法
請問怎麼寫java調用node環境運行js代碼?
nodejs 運行代碼可以在命令行中使用命令「 node /path/xxx.js 」來執行
所以我們可以藉助 java 的 Runtime 類,可以執行系統本地的命令, 例如:
Linux系統下:Runtime.getRuntime().exec(“node /path/xxx.js”);
Window系統下:Runtime.getRuntime().exec(“cmd /c node /path/xxx.js”);
當然推薦使用 Apache-Commons-Exec 工具類,可以屏蔽不同系統命令差異,並且獲取結果更簡單
工具類使用可以參考此文: 網頁鏈接
java課程分享JavaScript代碼測試必備的12款工具
1、Jasmine
Jasmine是一個行為驅動的測試開發框架,用於對JavaScript代碼進行測試。它不依賴其它任何JavaScript框架,也不需要DOM。它的語法簡潔、明確,寫測試非常容易。
2、Mocha
Mocha是一個功能豐富的JavaScript測試框架,既運行於Node.js環境中,也可以運行於瀏覽器環境中。Mocha以串行方式運行測試,能做出靈活而準確的報告,也能將測試中未捕捉的異常映射到正確的測試用例。
3、Chai
Chai是個支持BDD/TDD的庫,可用於node和瀏覽器,可配合任何JavaScript測試框架使用。
4、QUnit
QUnit是個功能強大又易於使用的JavaScript單元測試框架。jQuery、jQueryUI和jQueyMobile項目都使用這個框架,它能測試普通的JavaScript代碼。
5、Sinon
Sinon.JS為JavaScript提供了獨立的spies、stubs和mocks[譯者註:Spy、Stub和Mock都是測試專用名詞,Stub常被翻譯為樁,spies是Spy的複數形式,是一種可以監視方法、調用和參數的技術]。它不依賴任何東西,可以配合任何單元測試框架工作。
6、Karma
Karma是針對連通瀏覽器的一個框架無關測試運行器。每一個測試結果對應每個瀏覽器,它的測試和顯示都是通過命令行暴露給開發者的,這樣他們就可以看到瀏覽器測試的通過或失敗。
7、Selenium
Selenium有一個簡單的目標:就是自動化瀏覽器。它主要用於自動化測試web應用程序,但是只是很簡單地考慮到了基於網絡的管理任務。
8、WebdriverIO
WebdriverIO允許用戶僅添加幾行代碼就可以控制瀏覽器或移動應用程序,使測試代碼更簡單、簡潔、易讀。集成的TestRunner同樣允許你以同步的方式調用異步命令,這樣你不需要關心如何處理Promise以避免競態條件。此外,它取消了所有的繁瑣的設置工作,並且會為您管理的Selenium會話。
9、Nightwatch
Nightwatch.js是一個易於使用的Node.js,它是為基於瀏覽器的app和網站設計的終端到終端(E2E)的測試方法。它使用強大的W3CWebDriverAPI,用於在DOM元素上執行命令和斷言。
10、PhantomCSS
PhantomCSS獲得CasperJS捕獲的屏幕截圖,並使用Resemble.js將其與基準圖進行對比,以測試RGB像素差異。java課程發現PhantomCSS然後生成圖像差異對比,用於幫助您找到原因。
11、PhantomFlow
PhantomFlow使用決策樹提供UI測試方案。針對PhantomJS,CasperJS和PhantomCSS的NodeJS包裝器——PhantomFlow能夠流暢地在代碼中描述用戶流程,同時生成用於可視化的結構化樹數據。
java程序中運行js腳本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public class ExecJs {
/**
* 記錄日誌類
*/
private Logger log = Logger.getLogger(ExecJs.class);
/**
* 後置處理,執行js腳本
* @param js
* @throws Exception
*/
public void execJs(String js, MapString,Object map) throws Exception {
if (log.isDebugEnabled()) {
log.debug(“execJs js : ” + js);
IteratorEntryString, Object it = map.entrySet().iterator();
while (it.hasNext()) {
EntryString, Object entry = (EntryString, Object) it.next();
log.info(“EXECJS MAP : ” + entry.getKey() + “—” + entry.getValue());
}// end while
}// end if
if (“”.equals(js) || js == null) {
log.info(“EXECJS ERROR : JAVASCRIPT CONTENT IS NULL”);
} else if(map == null || map.size()=0){
log.info(“EXECJS ERROR : MAP CONTENT IS NULL”);
} else {
// 獲取腳本引擎
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName(“javascript”);
// 綁定數據
ScriptContext newContext = new SimpleScriptContext();
Bindings bind = newContext.getBindings(ScriptContext.ENGINE_SCOPE);
bind.putAll(map);
try {
engine.setBindings(bind, ScriptContext.ENGINE_SCOPE);
engine.eval(js);
} catch (Exception e) {
log.info(“EXECJS EXCEPTION : EXECUTE JAVASCRIPT EXCEPTION”, e);
throw (e);
}// end try
}// end if
}
}
如何通過java代碼調用js
JDK1.6版添加了新的ScriptEngine類,允許用戶直接執行js代碼。
在Java中直接調用js代碼
不能調用瀏覽器中定義的js函數,會拋出異常提示ReferenceError: 「alert」 is not defined。
package com.sinaapp.manjushri;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException; /** * 直接調用js代碼 */
public class ScriptEngineTest {
public static void main(String[] args) {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName(“javascript”);
try{
engine.eval(“var a=3; var b=4;print (a+b);”);
// engine.eval(“alert(\”js alert\”);”); // 不能調用瀏覽器中定義的js函數 // 錯誤,會拋出alert引用不存在的異常
}catch(ScriptException e){
e.printStackTrace();
}
}
}
如何在java中調用js方法
在Java中調用js文件中的function,傳入調用參數,並獲取返回值
js文件中的merge函數將兩個參數a,b相加,並返回c。
// expression.js
function merge(a, b) {
c = a * b;
return c;
}
在Java代碼中讀取js文件,並參數兩個參數,然後回去返回值。
package com.sinaapp.manjushri;
import java.io.FileReader;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
/** * Java調用並執行js文件,傳遞參數,並活動返回值 * * @author manjushri */
public class ScriptEngineTest {
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName(“javascript”);
String jsFileName = “expression.js”; // 讀取js文件
FileReader reader = new FileReader(jsFileName); // 執行指定腳本
engine.eval(reader);
if(engine instanceof Invocable) {
Invocable invoke = (Invocable)engine; // 調用merge方法,並傳入兩個參數
// c = merge(2, 3);
Double c = (Double)invoke.invokeFunction(“merge”, 2, 3);
System.out.println(“c = ” + c);
}
reader.close();
}
}
輸出結果:
c = 5.0
原創文章,作者:VMVF,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/137760.html