51Testing软件测试论坛

标题: Selenium RC (java 语言) 无法打开新窗口 [打印本页]

作者: sandyli119    时间: 2010-6-21 15:51
标题: Selenium RC (java 语言) 无法打开新窗口
点击以下代码的链接打开一个新的框口
<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,....
怀疑是不是跟重写方法有关,导致页面无法打开...

怎么回事,麻烦高人指点...
作者: wugecat    时间: 2010-6-22 10:37
可能是连接对象还没有加载就进行了click操作..是否可以在click前加一些等待时间,或者判断一下上面的链接是否存在..然后在执行click
如果是你认为selenium重写脚本的原因,你可以测试一下..用selenium打开那个链接的页面,然后手动点击一下看是否能弹出
作者: sandyli119    时间: 2010-7-6 16:27
标题: 回复 2# 的帖子
感谢回复..
我试了,在selenium打开包含那个链接的页面后,手动点击那个链接依然不能打开那个页面。。。是否说明是重写脚本导致的。。
作者: xiaoshancom    时间: 2010-7-7 12:19
selenium 是重写了不少 open window的js,以处理popup window

事实上selenium是屏蔽了弹出窗口的现象,所以重写了这些方法。
作者: park_p    时间: 2010-7-7 14:41
标题: 不完全同意楼上
原帖由 xiaoshancom 于 2010-7-7 12:19 发表
selenium 是重写了不少 open window的js,以处理popup window

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


不完全同意楼上。
selenium确实对页面进行了重写,但是它并没有刻意屏蔽弹出的新浏览器窗口,它屏蔽了浏览器弹出的系统窗口,如“确认筐”、“警告筐”等js不能处理的窗口,popup window弹出的是新浏览器窗口,js是能处理到它的,selenium并没有去刻意屏蔽它,它重写代码很多是获得(或设置,可以自己加)target属性上的名字和异常处理,然后将其加入操作窗口列表中,已备操作之。所以selenium对于"_blank"的窗口就支持的不是很好了,尤其是有多个这样窗口出现的时候(只有一个这样的窗口时,大部分情况也是可操作的)。
作者: xiaoshancom    时间: 2010-7-7 15:45
标题: 回复 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);
        }
作者: sandyli119    时间: 2010-7-7 16:30
搜索相关资料发现有人提到:
Selenium目前没有提供对IE模态对话框(即通过showModalDialog方法打开的弹出对话框)的处理。原因在于,模态对话框会将父页面的 JS挂起,直至对话框处理完毕才会继续执行父页面JS。因为Selenium的底层实现是基于JS的,所以模态对话框会同时将selenium挂起,selenium无法选中模态对话框,直至超时。
看上去我目前的现象跟上述有点相像,(子页面打不开直至超时)但是我查看源代码没用用到showModalDialog方法。。。
是不是selenium对类似的处理的话还有些bug..
高手们,指点指点。。。。
作者: xiaoshancom    时间: 2010-7-7 16:35
标题: 回复 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 编辑 ]
作者: park_p    时间: 2010-7-7 16:51
原帖由 xiaoshancom 于 2010-7-7 15:45 发表
好像__blank修复了:
var newOpen = function(url, windowName, windowFeatures, replaceFlag) {
        var myOriginalOpen = originalOpen;
        if (isHTA) {
            myOriginalOpen = this[origina ...


哦,是么,那太好了。:)
作者: 小米啊    时间: 2010-7-7 19:13
原帖由 xiaoshancom 于 2010-7-7 15:45 发表
好像__blank修复了:
var newOpen = function(url, windowName, windowFeatures, replaceFlag) {
        var myOriginalOpen = originalOpen;
        if (isHTA) {
            myOriginalOpen = this[origina ...



这个windowname  里面是随机数,有没有好办法传出来呢。这样打开一个窗口的 name就知道了。
作者: sandyli119    时间: 2010-7-8 16:57
原帖由 xiaoshancom 于 2010-7-7 16:35 发表
好现在确定了你的问题属于非网页窗口无法控制。


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


能发详细点说明。。。。。感谢感谢。。
作者: sandyli119    时间: 2010-7-13 10:41
哦,高手们指点下啊。。。急用。。
作者: xiaoshancom    时间: 2010-7-13 13:03
原帖由 sandyli119 于 2010-7-8 16:57 发表


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


你怎么还不会呢? 那里面的链接的内容你都不懂得?
作者: sandyli119    时间: 2010-7-14 22:05
原帖由 xiaoshancom 于 2010-7-13 13:03 发表


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


见笑见笑。。。确实没有太理解,劳驾稍微解释一下,这里给第三方进行系统测试,无法修改原来系统的任何东西。。。
只能改变测试工具去适应系统。。。谢谢。。
作者: sandyli119    时间: 2011-5-20 16:36
苦苦挣扎摸索了后,用selenium2解决了。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2