51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 10841|回复: 14
打印 上一主题 下一主题

Selenium RC (java 语言) 无法打开新窗口

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-6-21 15:51:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
点击以下代码的链接打开一个新的框口
<a href="javascript:nd();popupConfigDialog('http%3A%2F%2FCHN-D-SANDY%3A8080%2FMonitorGroups.do', POPUP_DIMENSION_WIDTH_WEB_APPLICATIONS, POPUP_DIMENSION_HEIGHT_WEB_APPLICATIONS);" >Monitor Groups</a>

试用了selenium.click("link=Monitor Groups");
selenium.click("//a[text()='Monitor Groups']");等命令打开该链接,但是窗口都无法打开,然后时间超时.....

查了些资料,了解selenium 对popup window的支持不是很好,但是我脚本里面写的是window.open(..)

还有从页面下方的状态栏看,好像selenium重写了页面的javascript方法
selenium执行时状态栏显示:
javascript:try{nd();popupCOnfigDIalog('http://CHN-D-SANDY:8080/MonitorGroups.do', POPUP_DIMENSION_WIDTH_WEB_APPLICATIONS,....

手动执行时该链接状态显示:
javascript:nd();popupConfigDialog('http://CHN-D-SANDY:8080/MonitorGroups.do', POPUP_DIMENSION_WIDTH_WEB_APPLICATIONS,....
怀疑是不是跟重写方法有关,导致页面无法打开...

怎么回事,麻烦高人指点...
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2010-6-22 10:37:34 | 只看该作者
可能是连接对象还没有加载就进行了click操作..是否可以在click前加一些等待时间,或者判断一下上面的链接是否存在..然后在执行click
如果是你认为selenium重写脚本的原因,你可以测试一下..用selenium打开那个链接的页面,然后手动点击一下看是否能弹出
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2010-7-6 16:27:26 | 只看该作者

回复 2# 的帖子

感谢回复..
我试了,在selenium打开包含那个链接的页面后,手动点击那个链接依然不能打开那个页面。。。是否说明是重写脚本导致的。。
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2010-7-7 12:19:27 | 只看该作者
selenium 是重写了不少 open window的js,以处理popup window

事实上selenium是屏蔽了弹出窗口的现象,所以重写了这些方法。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2010-7-7 14:41:08 | 只看该作者

不完全同意楼上

原帖由 xiaoshancom 于 2010-7-7 12:19 发表
selenium 是重写了不少 open window的js,以处理popup window

事实上selenium是屏蔽了弹出窗口的现象,所以重写了这些方法。


不完全同意楼上。
selenium确实对页面进行了重写,但是它并没有刻意屏蔽弹出的新浏览器窗口,它屏蔽了浏览器弹出的系统窗口,如“确认筐”、“警告筐”等js不能处理的窗口,popup window弹出的是新浏览器窗口,js是能处理到它的,selenium并没有去刻意屏蔽它,它重写代码很多是获得(或设置,可以自己加)target属性上的名字和异常处理,然后将其加入操作窗口列表中,已备操作之。所以selenium对于"_blank"的窗口就支持的不是很好了,尤其是有多个这样窗口出现的时候(只有一个这样的窗口时,大部分情况也是可操作的)。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2010-7-7 15:45:12 | 只看该作者

回复 5# 的帖子

好像__blank修复了:
var newOpen = function(url, windowName, windowFeatures, replaceFlag) {
        var myOriginalOpen = originalOpen;
        if (isHTA) {
            myOriginalOpen = this[originalOpenReference];
        }
        if (windowName == "" || windowName == "_blank") {
            windowName = "selenium_blank" + Math.round(100000 * Math.random());
            LOG.warn("Opening window '_blank', which is not a real window name.  Randomizing target to be: " + windowName);
        }
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2010-7-7 16:30:41 | 只看该作者
搜索相关资料发现有人提到:
Selenium目前没有提供对IE模态对话框(即通过showModalDialog方法打开的弹出对话框)的处理。原因在于,模态对话框会将父页面的 JS挂起,直至对话框处理完毕才会继续执行父页面JS。因为Selenium的底层实现是基于JS的,所以模态对话框会同时将selenium挂起,selenium无法选中模态对话框,直至超时。
看上去我目前的现象跟上述有点相像,(子页面打不开直至超时)但是我查看源代码没用用到showModalDialog方法。。。
是不是selenium对类似的处理的话还有些bug..
高手们,指点指点。。。。
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2010-7-7 16:35:43 | 只看该作者

回复 7# 的帖子

好现在确定了你的问题属于非网页窗口无法控制。


对非网页弹出窗口,如window.alertwindow.confirmwindow.promptwindow. showModalDialog等,有如下方法:
1.封装Windows Api,对Java语言则有Java Native Interface (JNI)或者J/Invoke示例)。
2.Selenium RC中开启proxy injection(PI)模式也可以识别,这种模式提供了一个HTTP代理在浏览器之前自动更改所有接收到的HTMLwindow.alert, window.confirm,window.prompt在文件selenium-browserbot.js函数BrowserBot.prototype.modifyWindowToRecordPopUpDialogs中被覆写。
3.这里window.open覆写了window. showModalDialog,同样实现的还有在文件selenium-browserbot.js函数BrowserBot.prototype._modifyWindow实现开始部分添加对ModalDialog实现

对于方法1,其实java robot类也可以。

[ 本帖最后由 xiaoshancom 于 2010-7-7 16:36 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2010-7-7 16:51:13 | 只看该作者
原帖由 xiaoshancom 于 2010-7-7 15:45 发表
好像__blank修复了:
var newOpen = function(url, windowName, windowFeatures, replaceFlag) {
        var myOriginalOpen = originalOpen;
        if (isHTA) {
            myOriginalOpen = this[origina ...


哦,是么,那太好了。:)
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2010-7-7 19:13:25 | 只看该作者
原帖由 xiaoshancom 于 2010-7-7 15:45 发表
好像__blank修复了:
var newOpen = function(url, windowName, windowFeatures, replaceFlag) {
        var myOriginalOpen = originalOpen;
        if (isHTA) {
            myOriginalOpen = this[origina ...



这个windowname  里面是随机数,有没有好办法传出来呢。这样打开一个窗口的 name就知道了。
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2010-7-8 16:57:56 | 只看该作者
原帖由 xiaoshancom 于 2010-7-7 16:35 发表
好现在确定了你的问题属于非网页窗口无法控制。


对非网页弹出窗口,如window.alert,window.confirm,window.prompt,window. showModalDialog等,有如下方法:
1.封装Windows Api,对Java语言则有Java Native ...


能发详细点说明。。。。。感谢感谢。。
回复 支持 反对

使用道具 举报

该用户从未签到

12#
 楼主| 发表于 2010-7-13 10:41:31 | 只看该作者
哦,高手们指点下啊。。。急用。。
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2010-7-13 13:03:31 | 只看该作者
原帖由 sandyli119 于 2010-7-8 16:57 发表


能发详细点说明。。。。。感谢感谢。。


你怎么还不会呢? 那里面的链接的内容你都不懂得?
回复 支持 反对

使用道具 举报

该用户从未签到

14#
 楼主| 发表于 2010-7-14 22:05:00 | 只看该作者
原帖由 xiaoshancom 于 2010-7-13 13:03 发表


你怎么还不会呢? 那里面的链接的内容你都不懂得?


见笑见笑。。。确实没有太理解,劳驾稍微解释一下,这里给第三方进行系统测试,无法修改原来系统的任何东西。。。
只能改变测试工具去适应系统。。。谢谢。。
回复 支持 反对

使用道具 举报

该用户从未签到

15#
 楼主| 发表于 2011-5-20 16:36:24 | 只看该作者
苦苦挣扎摸索了后,用selenium2解决了。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-5 22:45 , Processed in 0.116796 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表