2012-06-29 17 views
6

Como QA utilizo los scripts de WSH para realizar cargas automáticas, implementaciones y algunas pruebas de tiempo en Web en IE. WSH (wscript) con JavaScript puede abrir la ventana de IE, activarla y acceder al modelo de 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/qa de forma inmediata.¿Es posible casar WSH (wscript) con nodejs

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

Pregunta: ¿es posible ejecutar WSH JavaScripts y Node.js y usar todos los objetos de ambos mundos? Me temo que no es así, pero espero que alguien tenga una solución ...

Como solución alternativa, tal vez alguien encontró el camino en NodeJS para iniciar el acceso de la ventana IE a su DOM (... agregar una secuencia de comandos js o ejecutar SendKeys para eso)!?

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

+1

Re * He encontrado NodeJS y todas sus capacidades *, que habilidades, específicamente, lo hace de nodo. js tiene que le gustaría "casarse" con WSH/Javascript? ¿Qué necesita WSH/Javascript para hacer, que no puede hacer? – Cheeso

+2

https://github.com/idobatter/node-win32ole le permiten construir dicho puente. –

Respuesta

6

Mientras que en realidad no casándose como la pregunta requiere, @o_nix en los comentarios hizo la sugerencia para https://github.com/idobatter/node-win32ole.

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

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

Así que, para mí, esto es tan bueno como casarse con viejas secuencias de comandos WSH como cualquier cosa. Los ajustes estarán involucrados, por supuesto, pero luego se despide WSH.

Más concretamente, a la cuestión que nos ocupa, se trata de un fragmento de una secuencia de comandos de IE demo: 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

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

2

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

Las otras opciones son:

  • vistazo a otros módulos de automatización navegador - selenio no es su única opción, también hay navegadores sin cabeza, que pueden apaciguar la situación: zombiejs, PhantomJS etc
  • escritura nativa enlaces a las API utilizadas por WSH para nodejs
  • Fusiona los bucles de eventos de WSH y nodejs, y expone la API de WSH a nodejs: no es una buena idea para un caso de uso tan limitado.
0

La ventaja de activar un proceso secundario es que WSH puede emitir solicitudes HTTP. Y el nodo, obviamente, puede servir HTTP.

Uno puede imaginar una biblioteca Node.js que proxy por completo proxy ActiveXObject de esa manera y darle a Node.js todos los mismos poderes que WSH.

Cuestiones relacionadas