51Testing软件测试论坛
标题:
打开新窗口前后分别执行获得所有窗口的句柄。居然一次可以执行,一次不可以。。
[打印本页]
作者:
Cris@Kaka
时间:
2013-12-31 15:11
标题:
打开新窗口前后分别执行获得所有窗口的句柄。居然一次可以执行,一次不可以。。
本帖最后由 Cris@Kaka 于 2014-1-10 13:33 编辑
[attach]88827[/attach]
经过测试,在点击新建,弹出新窗口前后分别执行下面语句:
Set<String> handles = driver.getWindowHandles();
没有新窗口前可以执行,弹出新窗口后执行就一直卡在那一句了。。
什么情况啊
最新进展:脚本回放过程中手动把新窗口关闭,然后再打开,于是就可以定位到新窗口上了。。
作者:
Cris@Kaka
时间:
2014-1-2 13:29
没人解答吗?
作者:
joykao
时间:
2014-1-2 14:02
哪来的这么多问题。。。难道是你的多frame问题再加上现在多窗口问题。。。彻底冲突了。。。普通多窗口问题没问题吧。。。是不是还要把多frame再切回去啊?。。。
系统架构还真复杂。。。
作者:
Cris@Kaka
时间:
2014-1-2 14:13
回复
3#
joykao
frame跟窗口之间不会有冲突吧。。关键是点击新建前还可以获得所有窗口句柄,虽然这时只有一个,但是点击新建,弹出窗口之后就不能执行了。。这中间是什么原因呢,帮我分析分析吧。。有经验人士
作者:
joykao
时间:
2014-1-2 15:36
回复
4#
Cris@Kaka
我完全不懂,我只是个打酱油的
,如果其他网站简单的多窗口切换没问题,那应该会有冲突吧,你也不一定要用句柄去操控,可以试试用driver.switchTo().window("HelpWindow");直接填name或者title,其实都是driver惹得祸哇,代码不知道driver的领导是什么,所以不会工作了。。。哎。。。好复杂的web应用啊。。。有机会真想见识下。。。
作者:
Cris@Kaka
时间:
2014-1-2 17:55
回复
5#
joykao
好像是打开新窗口,之前的窗口就死了。。T_T
作者:
joykao
时间:
2014-1-3 09:22
回复
6#
Cris@Kaka
还有这么一说,打开新窗口如果你不切换窗口的话还是在原窗口啊。。。怎么会死掉呢。。。
作者:
Cris@Kaka
时间:
2014-1-3 10:49
回复
7#
joykao
新窗口右下角的webdriver字体是黑的,原先的窗口变成红的了。。像上面的附图那样
作者:
joykao
时间:
2014-1-3 12:36
回复
8#
Cris@Kaka
红的是代表当前活动的窗口。。。黑色的是不活动的。。。
作者:
Cris@Kaka
时间:
2014-1-10 13:31
回复
9#
joykao
脚本回放过程中我手动把新窗口关闭又快速打开,然后就可以定位到新窗口了额。。
作者:
joykao
时间:
2014-1-10 13:59
回复
10#
Cris@Kaka
我去。。妹纸你这个手工自动化么?好吧。。。推荐本书你去看看吧。。。你遇到的大多数问题那里应该都可以找到答案。。。Packt.Selenium.Testing.Tools.Cookbook。。。Selenium私房菜。。
作者:
Cris@Kaka
时间:
2014-2-11 17:57
没人能解。。
作者:
maomao121
时间:
2014-2-15 17:45
你没有切换窗口,要操作哪个窗口,都必须先切换到那个窗口上
作者:
Cris@Kaka
时间:
2014-2-18 15:31
回复
13#
maomao121
我有喔。
作者:
maomao121
时间:
2014-2-18 20:26
你把你点击前后几步的step都贴出来吧, 还有就是哪怕停在那步的话,最后总要有一个error 信息的, 这个error信息也贴一下吧,
作者:
Cris@Kaka
时间:
2014-2-28 09:47
回复
15#
maomao121
只是卡住不动而已,确确实实没有报错。。
代码如下:
//得到当前窗口的句柄
String currentWindow = driver.getWindowHandle();
//System.out.println(currentWindow);
driver.findElement(By.xpath("//a[@title='新建']")).click();
waitForPageToLoad(3000);//等待页面载入
//得到所有窗口的句柄
Set<String> handles = driver.getWindowHandles();
//System.out.println(handles.size());
//不包括当前窗口
handles.remove(currentWindow);
//存在窗口
System.out.println(handles.size());
if (handles.size() > 0) {
try{
//定位窗口
driver.switchTo().window(handles.iterator().next());
}catch(Exception e){
System.out.println(e.getMessage());
}
}
作者:
maomao121
时间:
2014-3-1 05:46
你debug的话,是停在这句吗 driver.switchTo().window(handles.iterator().next());?
那时候,handles里有几个值啊,handles.iterator().next()的值是多少呢
作者:
Cris@Kaka
时间:
2014-3-3 17:21
本帖最后由 Cris@Kaka 于 2014-3-3 17:23 编辑
[attach]89399[/attach]回复
17#
maomao121
debugger到点击新建就如附图了,不能再往下执行,所以不知道那些值是什么。
新窗口是有跳出来,然后手动关闭再打开,debugger又可以执行下一步了。。
作者:
maomao121
时间:
2014-3-4 07:00
看起来waitForPageToLoad(3000)满可疑的,你们重写过这个方法吗,干脆comment掉这句,再debug试试看
作者:
Cris@Kaka
时间:
2014-3-4 16:08
回复 [url=http://bbs.51testing.com/redirect.php?goto=findpost&pid=3233765&ptid=1000210]19#[/url]
maomao121
public void waitForPageToLoad(long time) {
try {
Thread.sleep(time);
} catch (Exception e) {
}
}
注释了 还是卡着
作者:
maomao121
时间:
2014-3-5 10:34
要不问问开发,这个新打开的窗口是不是被wrap过了?
作者:
243303098
时间:
2014-9-9 10:43
线程被阻塞了呗。。所以就卡住了
作者:
542551042
时间:
2014-9-9 14:46
你可以看下 获取的所有的句柄数量是多少 应该是等于1.这种情况 应该是属于弹出窗口的问题,句柄只是适用于同一个浏览器上面 你做了操作 打开了新的选项卡 会记录一个新的句柄。 你可以试试
作者:
melissazha
时间:
2015-1-30 09:43
你好,我想问下你这个问题后来解决了吗?
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2