¿Es posible casarse con WSH (wscript) con nodejs?

Como control de calidad, uso secuencias de comandos WSH para cargar automáticamente, implementar y, en ocasiones, realizar pruebas web en IE. WSH (wscript) con JavaScript puede abrir la ventana de IE, activarla y acceder al modelo DOM para realizar algunas acciones o verificar algunos resultados esperados. Es una especie de enfoque de Selenium 1.0, pero no requiere JAVA ni ninguna configuración de entorno, por lo que se puede ejecutar en cualquier máquina de desarrolladores/control de calidad de Windows inmediatamente.

Recientemente encontré NodeJS y todas sus capacidades, excepto la manipulación con Windows IE DOM. No puedo encontrar la forma de ejecutar mis antiguos scripts WSH para probar IE DOM y, al mismo tiempo, usar algunos módulos de NodeJS para analizar XML o ejecutar el servidor de informes de prueba.

Entonces, pregunta: ¿es posible ejecutar WSH JavaScripts y Node.js y usar todas las ventajas de ambos mundos? Me temo que no lo es, pero espero que alguien tenga una solución ...

Como solución alternativa, tal vez alguien encontró la forma en NodeJS para iniciar la ventana de IE y acceder a su DOM (... ¡agregue su propio script js o ejecute SendKeys en él)!?

Entiendo que NodeJS no está diseñado para realizar tareas administrativas de Windows.

preguntado el 29 de junio de 12 a las 19:06

Re Encontré NodeJS y todas sus capacidades, ¿qué habilidades, específicamente, tiene Node.js que le gustaría "casar" con WSH/Javascript? ¿Qué necesita que haga WSH/Javascript que no pueda hacer? -

github.com/idobatter/node-win32ole permitirle construir tal puente. -

3 Respuestas

Aunque en realidad no casarse como requiere la pregunta, @o_nix en los comentarios hizo la sugerencia para https://github.com/idobatter/node-win32ole.

Sugeriría que este módulo satisfaga muchos problemas para las personas que llegan aquí desde Google (como lo hice yo). También está disponible en npm aquí: https://www.npmjs.com/package/win32ole

El módulo también tiene bastantes ejemplos, tales como: 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);
  });

Entonces, para mí, esto es tan bueno como casarse con viejos guiones de WSH. Los ajustes estarán involucrados, por supuesto, pero luego es adiós WSH.

Más específicamente, a la pregunta en cuestión, este es un fragmento de un script de demostración de 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();

Respondido el 22 de enero de 15 a las 07:01

Bien, esta es definitivamente la respuesta correcta. Esto no existía cuando respondí: Raoul

esto no se ha actualizado por un tiempo y tiene una dependencia de python 2. - lluvia

WSH es un tiempo de ejecución y un conjunto de bibliotecas diferentes de nodejs. La única solución simple que se me ocurre para su caso de uso es usar child_process para ejecutar sus scripts WSH y capturar el resultado y analizarlo.

Las otras opciones son:

  • Mire otros módulos de automatización del navegador: el selenio no es su única opción, también hay navegadores sin cabeza, que pueden apaciguar la situación: zombiejs, phantomjs, etc.
  • Escriba enlaces nativos a las API utilizadas por WSH para nodejs
  • Combine los bucles de eventos de WSH y nodejs, y exponga la API de WSH a nodejs: no es una buena idea para un caso de uso tan limitado.

Respondido 17 ago 12, 22:08

El beneficio de activar un proceso secundario es que WSH puede emitir solicitudes HTTP. Y Node, obviamente, puede servir HTTP.

Uno puede imaginar una biblioteca de Node.js que representaría completamente a ActiveXObject de esa manera y le daría a Node.js los mismos poderes que WSH.

respondido 29 nov., 12:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.