8

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

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

質問: WSH JavaScript と Node.js を実行し、両方の世界からすべての利点を使用することは可能ですか? 残念ながらそうではありませんが、誰かが回避策を持っていることを願っています...

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

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

4

3 に答える 3

9

質問が要求するように実際には結婚していませんが、コメントの @o_nix はhttps://github.com/idobatter/node-win32oleを提案しました。

このモジュールは、Google からここにたどり着いた人々の多くの問題を解決することをお勧めします (私が行ったように)。こちらの npm からも入手できます: https://www.npmjs.com/package/win32ole

モジュールには、次のようなかなりの数の例もあり ます。

  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();
于 2015-01-22T07:20:49.247 に答える
3

WSHは、nodejsとは異なるランタイムおよびライブラリのセットです。ユースケースで考えられる唯一の簡単な解決策は、child_processを使用してWSHスクリプトを実行し、出力をキャプチャして解析することです。

その他のオプションは次のとおりです。

  • 他のブラウザ自動化モジュールを見てください-セレンはあなたの唯一のオプションではありません、状況を和らげる可能性のあるヘッドレスブラウザもあります:zombiejs、phantomjsなど
  • WSHfornodejsで使用されるAPIにネイティブバインディングを書き込みます
  • WSHとnodejsのイベントループをマージし、WSHのAPIをnodejsに公開します。このような狭いユースケースには適していません。
于 2012-08-17T21:07:13.883 に答える
0

子プロセスを起動する利点は、WSH が HTTP 要求を発行できることです。そして明らかに、ノードは HTTP を提供できます。

この方法で ActiveXObject を完全にプロキシし、Node.js に WSH とまったく同じ機能を与える Node.js ライブラリを想像できます。

于 2012-11-29T10:36:22.467 に答える