2012-06-29 12 views
6

QA che uso script WSH per fare il caricamento automatico, distribuzione e qualche tempo di test Web in IE. WSH (wscript) con JavaScript può aprire la finestra di IE, attivarla e accedere al modello DOM per fare alcune azioni o verificare alcuni risultati attesi. È un tipo di approccio Selenium 1.0 ma non richiede JAVA e nessuna configurazione di envrionment, quindi può essere eseguito immediatamente su qualsiasi sviluppatore/qa windows machine.E 'possibile sposarsi WSH (wscript) con nodejs

Recentemente ho trovato NodeJS e tutte le sue capacità, ad eccezione di manipolare con Windows IE DOM. Non riesco a trovare il modo su come eseguire i miei vecchi script WSH per testare IE DOM e allo stesso tempo utilizzare alcuni moduli NodeJS per analizzare XML o eseguire il server di report di test.

Quindi domanda: è possibile eseguire JavaScript WSH e Node.js ed utilizzare tutte le chicche da entrambi i mondi? Io ho paura, non lo è, ma spero che qualcuno abbia una soluzione ...

Come soluzione, forse qualcuno ha trovato la strada in NodeJS per avviare la finestra di IE accedere al suo DOM (... aggiungere il proprio script js o eseguire SendKeys a esso) !?

Capisco che NodeJS non è progettato per eseguire attività amministrative di Windows.

+1

Re * ho trovato NodeJS e tutte le sue capacità *, quali abilità, in particolare, fa Nodo. hai che ti piacerebbe "sposare" con WSH/Javascript? Che cosa hai bisogno di fare WSH/Javascript, che non è in grado di fare? – Cheeso

+2

https://github.com/idobatter/node-win32ole consentono di creare tale bridge. –

risposta

6

Mentre non in realtà sposando come richiesto dalla domanda, @o_nix nei commenti ha presentato il suggerimento per https://github.com/idobatter/node-win32ole.

Io suggerirei che questo modulo soddisfa molti problemi per le persone che arrivano qui da Google (come ho fatto io). È disponibile da NPM anche qui: https://www.npmjs.com/package/win32ole

Il modulo ha anche alcuni esempi abbastanza, come ad esempio: 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); 
    }); 

Quindi, per me, questo è buono come sposare vecchi script WSH come nulla. I tweaks saranno ovviamente coinvolti, ma poi è un addio WSH.

Più in particolare, alla domanda a portata di mano, questo è un frammento di uno script 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

Bello, questa è sicuramente la risposta giusta. Questo non esisteva quando ho risposto – Raoul

2

WSH è un runtime e un set di librerie diverso da nodejs. L'unica soluzione semplice che posso pensare per il tuo caso d'uso è usare child_process per eseguire gli script WSH e catturare l'output e analizzarlo.

Le altre opzioni sono:

  • Guardate in altri moduli di automazione del browser - il selenio non è l'unica opzione, ci sono anche i browser senza testa, che può placare la situazione: zombiejs, phantomjs ecc
  • scrittura nativa attacchi alle API utilizzate da WSH per nodejs
  • unire i cicli di eventi di WSH e nodejs, ed espongono API WSH per nodejs: senza una buona idea per tale caso d'uso stretta.
0

Il vantaggio di avviare un processo figlio è che WSH è in grado di emettere richieste HTTP. E il nodo, ovviamente, può servire HTTP.

Si può immaginare una biblioteca Node.js che avrebbe completamente delega ActiveXObject in quel modo e dare Node.js tutti gli stessi poteri WSH.