2015-07-03 40 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”])'抛出错误幻影 –