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&#61;http://bbs.51testing.com/redirect.php?goto&#61;findpost&pid&#61;3233765&ptid&#61;1000210]19#[/url] maomao121


  public void waitForPageToLoad&#40;long time) {
      try {
          Thread.sleep&#40;time);
      } catch &#40;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