WSH(wscript)可以和nodejs结婚吗?

作为QA,我使用WSH脚本在IE中进行自动上传,部署和一些Webtesting。 使用JavaScript的WSH(wscript)可以打开IE窗口,激活它并访问DOM模型来执行一些操作或validation一些预期的结果。 这是一种Selenium 1.0的方法,但不需要JAVA和任何环境configuration,因此可以在任何开发人员/ QA Windows机器上立即执行。

最近我发现了NodeJS及其所有function,除了使用Windows IE DOM进行操作。 找不到如何运行我的旧WSH脚本来testingIE DOM,同时使用一些NodeJS模块parsingXML或运行testing报告服务器。

所以问:是否有可能运行WSH JavaScripts和Node.js,并使用来自两个世界的所有好东西? 我害怕,这不是,但希望有人有解决方法…

作为解决方法,也许有人在NodeJS中find启动IE窗口访问其DOM的方法(…添加自己的js脚本或运行SendKeys)!

我明白,NodeJS不是为了执行Windowspipe理任务而devise的。

虽然没有真正结婚的问题需要,@o_nix在评论中提出了build议https://github.com/idobatter/node-win32ole

我build议这个模块可以满足从Google到这里来的人们的许多问题(就像我一样)。 它也可以从这里的npm: https ://www.npmjs.com/package/win32ole

该模块也有不less例子,例如: https : //github.com/idobatter/node-win32ole/blob/dev0.1.3/examples/activex_filesystemobject_sample.js

var win32ole = require('win32ole'); . . . var withReadFile = function(filename, callback){ var fso = new ActiveXObject('Scripting.FileSystemObject'); var fullpath = fso.GetAbsolutePathName(filename); var file = fso.OpenTextFile(fullpath, 1, false); // open to read try{ callback(file); }finally{ file.Close(); } }; var withEachLine = function(filename, callback){ withReadFile(filename, function(file){ // while(file.AtEndOfStream != true) // It works. (without unary operator !) // while(!file.AtEndOfStream) // It does not work. while(!file.AtEndOfStream._) // *** It works. oops! callback(file.ReadLine()); }); }; withEachLine(testfile, function(line){ console.log(line); }); 

所以,对我来说,这和旧的WSH脚本一样好。 调整将涉及当然,但是这是再见WSH。

更具体地说,对于这个问题,这是一个演示IE脚本的片段: https : //github.com/idobatter/node-win32ole/blob/master/examples/ie_sample.js

  var win32ole = require('win32ole'); . . . var ie = new ActiveXObject('InternetExplorer.Application'); ie.Visible = true; for(var i = 0; i < uris.length; ++i){ console.log(uris[i]); ie.Navigate(uris[i]); win32ole.sleep(15000, true, true); } ie.Quit(); 

WSH是与nodejs不同的运行时和库集合。 我可以考虑的唯一简单的解决scheme就是使用child_process来运行你的WSH脚本并捕获输出并parsing它。

其他选项是:

  • 看看其他浏览器自动化模块 – selenium不是你唯一的select,也有无头浏览器,这可能会安抚的情况:僵尸,幻影等
  • 将本地绑定写入WSH for nodejs使用的API
  • 合并WSH和nodejs的事件循环,并将WSH的API暴露给nodejs:对于如此狭窄的用例,这不是一个好主意。

启动subprocess的好处是WSH能够发出HTTP请求。 而Node显然可以服务于HTTP。

我们可以想象一个Node.js库,它可以完全代理ActiveXObject,并赋予Node.js与WSH相同的权力。