2012-06-29 10 views
6

QA私はWSHスクリプトを使って自動アップロード、展開、IEでのWebテストを行っています。 JavaScriptを使用したWSH(wscript)では、IEウィンドウを開き、それをアクティブにしてDOMモデルにアクセスして、いくつかのアクションを実行したり、期待される結果を確認したりできます。これはSelenium 1.0アプローチの一種ですが、JAVAや環境設定を必要としないため、開発者/ Windowsのマシンで即座に実行できます。WSH(wscript)とnodejsを結びつけることは可能ですか

最近、私はNodeJSとそのすべての能力を発見しました.Windows IE DOMを使って操作しました。私の古いWSHスクリプトを実行してIE DOMをテストすると同時にいくつかのNodeJSモジュールを使用してXMLを解析したり、テストレポートサーバーを実行する方法を見つけることができません。

質問:WSH JavaScriptとNode.jsを実行して、両方の世界のすべてのグッズを使用できますか? 私は恐れていますが、誰かが回避策を持っていることを願っています...

回避策として、誰かがNodeJSでIEウィンドウへのアクセスを開始する方法を見つけました(...自分のjsスクリプトを追加するか、SendKeysを実行するそれ)!?

私はNodeJSがWindows管理タスクを行うようには設計されていないことを理解しています。

+1

再*私はNodeJSとそのすべての能力*、能力、具体的には、ないノードを発見しました。あなたはWSH/Javascriptと "結婚"したいと思っていますか? WSH/Javascriptに何が必要なのですか?それはできません。 – Cheeso

+2

https://github.com/idobatter/node-win32oleでは、このようなブリッジを構築できます。 –

答えて

6

実際にはと結婚していますが、質問にはが必要ですが、コメント内の@o_nixはhttps://github.com/idobatter/node-win32oleの提案を行いました。

私は、このモジュールが(私がやったように)Googleからここに到着する人々に多くの問題を満たすことを提案したいと思います。 ここはまた、NPMから提供されています:https://www.npmjs.com/package/win32ole

モジュールには、また、かなりの数の例を、持っている:だから 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(); 
+0

ニース、これは間違いなく正しい答えです。私が答えた時、これは存在しなかった – Raoul

2

WSHはnodejsとは異なるランタイムとライブラリのセットです。あなたのユースケースについて考えることができる唯一の単純なソリューションは、child_processを使用してWSHスクリプトを実行し、出力をキャプチャして解析することです。

他のオプションは次のとおりです。 - :zombiejs、phantomjsなど

  • 書き込みネイティブ他のブラウザの自動化モジュールで

    • ルックセレンはあなたの唯一のオプションではありません、状況をなだめることがヘッドレスブラウザには、もありますWSHで使用されるAPIへのバインディング
    • WSHとnodejのイベントループをマージし、WSHのAPIをnodejsに公開します。そのような狭いユースケースの良い考えではありません。
  • 0

    子プロセスを実行する利点は、WSHがHTTP要求を発行できることです。明らかに、NodeはHTTPに対応できます。

    そういう形でActiveXObjectを完全にプロキシし、Node.jsにWSHと同じ能力を与えるNode.jsライブラリがあると思います。

    関連する問題