sandyli119 发表于 2010-6-21 15:51:04

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");等命令打开该链接,但是窗口都无法打开,然后时间超时.....

查了些资料,了解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:34

可能是连接对象还没有加载就进行了click操作..是否可以在click前加一些等待时间,或者判断一下上面的链接是否存在..然后在执行click
如果是你认为selenium重写脚本的原因,你可以测试一下..用selenium打开那个链接的页面,然后手动点击一下看是否能弹出

sandyli119 发表于 2010-7-6 16:27:26

回复 2# 的帖子

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

xiaoshancom 发表于 2010-7-7 12:19:27

selenium 是重写了不少 open window的js,以处理popup window

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

park_p 发表于 2010-7-7 14:41:08

不完全同意楼上

原帖由 xiaoshancom 于 2010-7-7 12:19 发表 http://bbs.51testing.com/images/common/back.gif
selenium 是重写了不少 open window的js,以处理popup window

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

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

xiaoshancom 发表于 2010-7-7 15:45:12

回复 5# 的帖子

好像__blank修复了:
var newOpen = function(url, windowName, windowFeatures, replaceFlag) {
      var myOriginalOpen = originalOpen;
      if (isHTA) {
            myOriginalOpen = this;
      }
      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:41

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

xiaoshancom 发表于 2010-7-7 16:35:43

回复 7# 的帖子

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


对非网页弹出窗口,如window.alert,window.confirm,window.prompt,window. showModalDialog等,有如下方法:
1.封装Windows Api,对Java语言则有Java Native Interface (JNI)或者J/Invoke(示例)。
2.Selenium RC中开启proxy injection(PI)模式也可以识别,这种模式提供了一个HTTP代理在浏览器之前自动更改所有接收到的HTML。window.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:13

原帖由 xiaoshancom 于 2010-7-7 15:45 发表 http://bbs.51testing.com/images/common/back.gif
好像__blank修复了:
var newOpen = function(url, windowName, windowFeatures, replaceFlag) {
      var myOriginalOpen = originalOpen;
      if (isHTA) {
            myOriginalOpen = this

哦,是么,那太好了。:)

小米啊 发表于 2010-7-7 19:13:25

原帖由 xiaoshancom 于 2010-7-7 15:45 发表 http://bbs.51testing.com/images/common/back.gif
好像__blank修复了:
var newOpen = function(url, windowName, windowFeatures, replaceFlag) {
      var myOriginalOpen = originalOpen;
      if (isHTA) {
            myOriginalOpen = this


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

sandyli119 发表于 2010-7-8 16:57:56

原帖由 xiaoshancom 于 2010-7-7 16:35 发表 http://bbs.51testing.com/images/common/back.gif
好现在确定了你的问题属于非网页窗口无法控制。


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

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

sandyli119 发表于 2010-7-13 10:41:31

哦,高手们指点下啊。。。急用。。

xiaoshancom 发表于 2010-7-13 13:03:31

原帖由 sandyli119 于 2010-7-8 16:57 发表 http://bbs.51testing.com/images/common/back.gif


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

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

sandyli119 发表于 2010-7-14 22:05:00

原帖由 xiaoshancom 于 2010-7-13 13:03 发表 http://bbs.51testing.com/images/common/back.gif


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

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

sandyli119 发表于 2011-5-20 16:36:24

苦苦挣扎摸索了后,用selenium2解决了。
页: [1]
查看完整版本: Selenium RC (java 语言) 无法打开新窗口