JS如何根据IE窗口的HWND操作IE窗口对象?

xiekesheng 2010-01-21 05:27:43
如题。
一个尝试解决了很久的问题,实在找不到办法了,请各位大虾帮忙。

我是用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窗口里的控件了。
...全文
324 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
eduyu 2010-01-24
  • 打赏
  • 举报
回复
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
fengyunshier 2010-01-23
  • 打赏
  • 举报
回复
up
王集鹄 2010-01-22
  • 打赏
  • 举报
回复
推荐这个开源项目

参考核心的函数
function DocumentFromHWND( //获得窗体中的IHTMLDocument2对象
mHandle: HWND; //该窗体句柄
var nDocument2: IHTMLDocument2 //返回的IHTMLDocument2对象
): HRESULT; //返回错误代码,如果成功则返回0
浴火_凤凰 2010-01-22
  • 打赏
  • 举报
回复
win = window.open("","Test"); 这里的win 就是窗口的句柄

hwnd又是什么?
xiekesheng 2010-01-21
  • 打赏
  • 举报
回复
怎么没人答复呀
加分了。

87,901

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧