2012-06-29 29 views
6

Vì QA tôi sử dụng tập lệnh WSH để thực hiện tự động tải lên, triển khai và kiểm tra web một thời gian trong IE. WSH (wscript) với JavaScript có thể mở cửa sổ IE, kích hoạt nó và truy cập mô hình DOM để thực hiện một số hành động hoặc xác minh một số kết quả mong đợi. Nó là loại phương pháp tiếp cận Selenium 1.0 nhưng không yêu cầu JAVA và bất kỳ cấu hình envrionment để có thể được thực hiện trên bất kỳ máy phát triển/cửa sổ qa máy tính.Có thể kết hôn WSH (wscript) với nodejs

Gần đây tôi đã tìm thấy NodeJS và tất cả các khả năng của nó, ngoại trừ thao tác với Windows IE DOM. Không thể tìm ra cách để chạy các kịch bản WSH cũ của tôi để kiểm tra IE DOM và đồng thời sử dụng một số mô-đun NodeJS để phân tích cú pháp XML hoặc chạy máy chủ báo cáo thử nghiệm.

Vì vậy, câu hỏi: có thể chạy WSH JavaScripts và Node.js và sử dụng tất cả các tính năng ưu việt từ cả hai thế giới? Tôi sợ, nó không phải là, nhưng hy vọng ai đó có workaround ...

Như workaround, có lẽ ai đó tìm thấy cách trong NodeJS để bắt đầu cửa sổ IE truy cập DOM của nó (... thêm tập lệnh js riêng hoặc chạy SendKeys để nó) !?

Tôi hiểu rằng NodeJS không được thiết kế để thực hiện các tác vụ quản trị cửa sổ.

+1

Re * Tôi tìm thấy NodeJS và tất cả khả năng của mình *, mà khả năng, đặc biệt, không Node. js có bạn muốn "kết hôn" với WSH/Javascript không? Những gì bạn cần WSH/Javascript để làm, rằng nó không thể làm gì? – Cheeso

+2

https://github.com/idobatter/node-win32ole cho phép bạn xây dựng cây cầu như vậy. –

Trả lời

6

Mặc dù không thực sự kết hôn với như câu hỏi yêu cầu, @o_nix trong các nhận xét đã đưa ra đề xuất cho https://github.com/idobatter/node-win32ole.

Tôi muốn đề xuất rằng mô-đun này thỏa mãn nhiều vấn đề cho những người đến đây từ Google (như tôi đã làm). Nó cũng có sẵn từ NPM đây: https://www.npmjs.com/package/win32ole

Module cũng có khá một vài ví dụ, chẳng hạn như: 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); 
    }); 

Vì vậy, với tôi, đây là tốt như kết hôn với các mã WSH cũ như bất cứ điều gì. Tweaks sẽ được tham gia tất nhiên, nhưng sau đó nó tạm biệt WSH.

Cụ thể hơn, cho câu hỏi trong tầm tay, đây là một đoạn của một bản demo IE kịch bản: 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

Đẹp, đây chắc chắn là câu trả lời đúng. Điều này không tồn tại khi tôi trả lời – Raoul

2

WSH là thời gian chạy và tập hợp thư viện khác nhau từ các nút. Giải pháp đơn giản duy nhất tôi có thể nghĩ về trường hợp sử dụng của bạn là sử dụng child_process để chạy các kịch bản WSH của bạn và nắm bắt đầu ra và phân tích cú pháp nó.

Các tùy chọn khác bao gồm:

  • Nhìn vào module tự động hóa trình duyệt khác - selen không phải là lựa chọn duy nhất của bạn, cũng có trình duyệt không đầu, có thể xoa dịu tình hình: zombiejs, phantomjs vv
  • Viết mẹ đẻ các ràng buộc với các API được WSH sử dụng cho các nút số
  • Hợp nhất các vòng sự kiện của WSH và nút nút, và hiển thị API của WSH cho các nút: không phải là một ý tưởng tốt cho trường hợp sử dụng hẹp như vậy.
0

Lợi ích của việc kích hoạt quy trình con là WSH có thể phát hành yêu cầu HTTP. Và Node, rõ ràng, có thể phục vụ HTTP.

Người ta có thể tưởng tượng một thư viện Node.js sẽ hoàn toàn ủy quyền ActiveXObject theo cách đó và cung cấp cho Node.js tất cả các quyền hạn giống như WSH.

Các vấn đề liên quan