2015-07-03 89 views
1

我使用CasperJS來測試我的webApp,事情是我需要訪問數據庫以自動化測試中的一些必要輸入。如何在PhantomJS/CasperJS的窗口上使用子進程模塊

我正在尋找關於如何從casperJS js腳本中的數據庫中檢索此數據的替代方案,最後我決定使用phantomJS child process module調用groovy腳本來連接數據庫並進行選擇並將結果打印到stdout從CasperJS中獲取它。但是從幻像的樣本中JJ不知道該怎麼做,根據我的樣本,我用spawnexecFile做了一些嘗試,沒有運氣。即我嘗試:

var process = require("child_process") 
var spawn = process.spawn 
var execFile = process.execFile 

var child = spawn("groovy", ["script.groovy"]) 

child.stdout.on("data", function (data) { 
    console.log("spawnSTDOUT:", JSON.stringify(data)) 
}) 

child.stderr.on("data", function (data) { 
    console.log("spawnSTDERR:", JSON.stringify(data)) 
}) 

child.on("exit", function (code) { 
    console.log("spawnEXIT:", code) 
}) 

這不起作用,不會產生任何輸出。我也直接嘗試直接執行dir命令,也沒有任何反應。

我也試着用linux,它也不能工作,我也嘗試創建一個簡單的回聲.sh並沒有什麼...,但是在Linux中,當我嘗試運行ls命令時,它按預期工作。

回答

2

經過一番嘗試,我發現了一種方法來做到這一點。

似乎在windows中唯一的方法是通過cmd.exe作爲命令,groovy script.groovy作爲參數。

於是我就用

var child = spawn("cmd.exe", ["/k","groovy script.groovy"]) 

代替:

var child = spawn("groovy", ["script.groovy"]) 

這樣正常工作的窗口。

我還發現在Linux上運行一個shell腳本,它執行的方式groovy.It的類似於Windows的解決方案,而不是調用.sh我已經使用sh命令:

var child = spawn("sh", ["script.sh"]) 

和腳本.sh執行groovy腳本:

#!/bin/bash 
groovy script.groovy 
+0

我不能使這個在最新幻影js的Windows 10上工作;我嘗試運行'spawn(「cmd.exe」,[「/ k」])',它會引發錯誤,但在錯誤消息中沒有任何用處。有什麼想法嗎? –

+0

@Donbox在'/ k'之後你必須傳遞命令來執行,'/ k'本身沒有任何作用。例如,你可以用spawn(「cmd.exe」,[「/ k」,「dir」])'來列出當前目錄中的文件。此外,如果你運行(鍵'Win' +'R')並且把'cmd/k'簡單地打開一個新的cmd,你可以嘗試我從幻象中說出的東西,而如果你把'cmd/k dir'打開一個新的cmd,執行'dir'命令,顯示文件列表的結果。希望這個澄清你的問題':)' – albciff

+0

問題是'spawn(「cmd.exe」,[「/ k」])'拋出錯誤幻影 –