51Testing软件测试论坛

标题: 页面A跳转至页面B操作出现问题,selenium无法定位页面B上的元素 [打印本页]

作者: zoo4778362    时间: 2014-8-6 09:42
标题: 页面A跳转至页面B操作出现问题,selenium无法定位页面B上的元素
因为环境特殊,无法将代码拷出,所以只能描述,见谅下。

有一个页面A,上面实现了一个登录的功能,通过submit方法提交后,触发了登录,然后A页面旁边弹出了一个B页面(类似IE的在新窗口中打开),加Url地址给B页面
通过lr录制的脚本发现,有一个重定向的url(redirectURL.jsp),还有一个关闭页面的url(close.html),然后再请求了一个main.xhtml
我自己尝试过把重定向的url直接去浏览器访问,应该出了跨域的问题,登录不成功,也考虑过打印页面的句柄,通过handle去跳转到新窗口,但是发现submit后,所有的操作,selenium多会报错,有没人可以帮忙给个思路
作者: joykao    时间: 2014-8-6 11:28
打开新页面时焦点还是停留在原来页面的。。如果想定位新页面上的元素需要switchto新页面
作者: zoo4778362    时间: 2014-8-6 13:04
回复 2# joykao


    这个多知道,问题是没办法找到那个新页面,我通过handle和句柄多找过了,就是单纯的window,open()打开的一个空白页
作者: joykao    时间: 2014-8-6 13:29
回复 3# zoo4778362


    你是怎么找的呢?
         
                //Switch to new window opened  
                for(String winHandle : driver.getWindowHandles()){  
                            driver.switchTo().window(winHandle);  
                            }
作者: zoo4778362    时间: 2014-8-6 23:29
回复 4# joykao


    username.submit();   Set<String>  handles=driver.getWindowhandles();

Iterator<String> it = handles.iterator();

然后通过it.next 去判断, 思路应该没问题,主要是是现在生成B页面的同时 把A页面关闭了。这样我们后面的所有操作不是多失去焦点了,方便的话加个QQ把,我详细和你说下
作者: joykao    时间: 2014-8-7 17:16
我没试过你这样的方法。。。思路没问题,但是我不知道it.next是否真的去切换了窗口,还是只是取到了下一个窗口句柄的值却没有做switch。。。。你在A 的基础上打开了B,无论A 存不存在了,你都需要做一个switch把焦点从A 上转到B上。。。重点是需要switchto而不是我要必须清楚每个窗口的句柄或者title或者name
作者: zoo4778362    时间: 2014-8-11 13:56
回复 6# joykao


    但是你如果在触发click的同时,这个页面关闭了。肯定不能switchTo的,其实应该说是不能操作已经关闭的页面上的任何元素
作者: joykao    时间: 2014-8-11 15:30
回复 7# zoo4778362


    你自己试过了吗?被你搞糊涂了。。你到底是要操作新页面的上的元素还是原来已消失页面上的元素?。。。如果是新页面。。即使在你点击原来页面上的元素后原页面消失了,也是可以switchto新的页面的。。而且也必需switchto,但是如果你整个的driver都quit了。。那当然没办法switch了。。因为driver都不存在了。。。session已经结束了还搞毛 啊
作者: zoo4778362    时间: 2014-8-11 23:17
回复 8# joykao


    就是整个会话多被关闭了,A页面submit方法,window.open打开一个页面,然后把重定向的url传进去,打开一个新页面B,然后A页面关闭,这样不是我就完全无法操作B页面上的元素了,因为压根不能switchTo,所以现在不知道如何解决
作者: joykao    时间: 2014-8-12 10:47
回复 9# zoo4778362


   试过了?因为我个人之前为一个项目调试过代码,情况和你这个很类似吧。。。开始打开一个initial的页面,然后输入一些信息提交会打开一个新页面,而且有明显的先关掉原先页面后打开现在页面,但是switchto是成功的。。。就是在submit后切换。。。

用的switchto方法就是上面我提供的。。。因为你用driver打开了一个新页面,即使原来页面关掉了还是有一个新页面的driver是活着的。。。肯定是可以switch的。。。除非你所有的driver全退出了。。。
作者: zoo4778362    时间: 2014-8-12 14:01
回复 10# joykao

你有QQ吗。我QQ4778362.加下好友交流下。。。唉。表示不科学呀
作者: zoo4778362    时间: 2014-8-13 14:43
回复 10# joykao


    用你的方法已经解决了。我把浏览器的设置还原到默认就可以了...但是你那段代码的意思我不太理解,因为在submit后,我也尝试过取到hanle,但是只有一个,有点不懂你这个是如何切换过去的
作者: joykao    时间: 2014-8-13 15:20
回复 12# zoo4778362

在submit后取到一个handle是对的。因为只有一个窗口存在。。那段代码的意思简单理解是就是只要当前有driver触发的窗口就switch到那个窗口。。。
作者: zoo4778362    时间: 2014-8-14 09:39
回复 13# joykao


    有点明白了。只要是个新窗口,就会切换过去,应该是这样一个意思把
作者: joykao    时间: 2014-8-14 13:31
回复 14# zoo4778362


    是的
作者: zoo4778362    时间: 2014-8-14 15:36
回复 15# joykao


    谢了哈,在调试脚本的时候碰到一个新的问题,我一个初始页面,父页面上有个按钮,点击这个按钮能弹出一个固定大小的窗口页面,子窗口里面有一堆选择的东西,我按F12跳不到开发者工具,页面右键也不行,那这个页面的元素如何去定位,页面已经切过去了,找到了handle有两个
作者: joykao    时间: 2014-8-15 09:05
你可以直接访问那些小窗口的URL试试。。自己手动的打开那些窗口然后看看可以检查元素属性吗?没理由不能检查元素的
作者: gaspar1986    时间: 2014-8-15 11:18
回复 12# zoo4778362


    你好,我这里跟你存在的问题一样,可否发下你的代码,谢谢!
作者: zoo4778362    时间: 2014-8-15 13:30
回复 18# gaspar1986


    上面的大神已经被代码发出来了。。。。你试试看,不行把你那边的情况描述下。我看下是不是一样
作者: zoo4778362    时间: 2014-8-15 13:31
回复 17# joykao


    嗯的。我昨天用Lr去把弹窗的url捕获,然后直接新页面打开了。。但是每次多这样感觉不科学
作者: joykao    时间: 2014-8-15 17:37
回复 20# zoo4778362


学学加断点调试代码
作者: wyl250    时间: 2015-12-14 19:12
我是想在首页点击一个选项进入新的页面1,再回到首页点击新的页面2,在页面2上做操作时总是错的
作者: 影灵    时间: 2016-3-14 21:47
zoo4778362 发表于 2014-8-14 15:36
回复 15# joykao

您好,我遇到了同样的问题,请问你这个是怎样解决的?




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