如题。
一个尝试解决了很久的问题,实在找不到办法了,请各位大虾帮忙。我是用Selenium做自动化测试,它是一个以JS为核心的开源自动化测试工具。现在在测试过程中遇到了问题,它识别不到弹出的IE窗口(这些弹出窗口都是通过window.open(url,"","")这样的方式弹出的)。根据一些同事所说的,open窗口时没赋给名字,js是获取不到的。
我现在根据弹出窗口的Title用Windows API FindWindow得到了弹出窗口的hwnd。 但是不知道怎么根据hwnd来控制弹出的IE窗口?也有朋友让我打开一个窗口,然后把这个打开的窗口指向弹出的窗口,但是这样做的话就会open多个IE窗口。
BrowserBot.prototype.ActiveWindow = function(url) {
   var win;
win = window.open("","Test");   
if(win.location.href == "about:blank")
          { win.location = url;   
   }   
   
win.focus();   

this.currentWindow = win;
this.topFrame = this.currentWindow;
this.currentWindowName = "Test";
this.isSubFrameSelected = false;
};
我的需求是只要把 弹出的IE窗口对象 赋给 BrowserBot的currentWindow.   这样就可以用js操作弹出IE窗口里的控件了。

解决方案 »

  1.   

    win = window.open("","Test");  这里的win 就是窗口的句柄hwnd又是什么?
      

  2.   

    推荐这个开源项目参考核心的函数
    function DocumentFromHWND( //获得窗体中的IHTMLDocument2对象
      mHandle: HWND; //该窗体句柄
      var nDocument2: IHTMLDocument2 //返回的IHTMLDocument2对象
    ): HRESULT; //返回错误代码,如果成功则返回0
      

  3.   

    1,窗口名字只是在FORM和link的target的属性里才有用,javascript里无用,所以你同事描述不对。应该是window.open会返回一个window对象可用在js里。2,你描述不大清楚,selenium是纯js的测试解决方案,你open新窗口的动作,不用改用原始的js,而应该是要调用它的api的,貌似就是这个ActiveWindow,看它的代码也没错。你在这个函数里逐步调试一下,看看哪一布没有window。3,用c++来解决这个问题是不对的,因为不能跨浏览器,不过你非要如此的话,我的代码里有怎样从hwnd转换到js window对象的例子,包括怎样在ATL工程里通过host浏览器控件和浏览器的脚本引擎通讯:
    http://code.google.com/p/iamduyu/downloads/list