如何使用webdriver处理模态窗口
来源:互联网 发布:儿童网络教学 编辑:程序博客网 时间:2024/04/29 02:31
乙醇大师,由于在某公司有网络限制,自己总结的资料全部取不出来。关于WebDriver定位模态窗口的问题,在这简单写一下我的心得吧。
首先说定位常规窗口,官网给出了一个方法:
for (String handle : driver.getWindowHandles()) { driver.switchTo().window(handle);}
这个方法大多数数情况下是没问题的,但其实不太安全,有一定隐患,因为getWindowHandles()这个方法返回值是Set集合,而Set集合里的元素是无序的,假设这样一种情况:WebDriver运行,初始化了第一个浏览器窗口,然后在这个窗口中点击了某个超链接或按钮,弹出一个新窗口,此时用getWindowHandles()获取这两个窗口的Handler,并存放在Set集合里,则Set集合里的可能的情况是:[asdf,jkml],其中,asdf是第一个窗口的Hander,而jkml是第二个窗口的Handler。然后在第二个窗口中处理完了相关业务后,第二个窗口被关闭,然后再回到第一个窗口,再点击另外的超链接或按钮,则再弹出一个新窗口,此时再用getWindowHandles()获取所有窗口的Handler,存放在Set集合中,此时Set集合里的元素有可能是:[qwer,asdf],其中,asdf仍然是第一个窗口的Handler,这个时候,再用官网提供的for循环方法来切换到第二个窗口,必须定位不到!因为此时在Set集合中第2个位置存放的是第一个窗口的Handler。反正就是说Set集合里的元素是无序的,多次执行了getWindowHandles()之后,并不能保证Set集合里的末位置的元素一定是最新打开的那个窗口的Handler,所以有时候就不稳定不安全。
我自己捣鼓出来的笨方法:
public void switchToNewWindow(WebDriver driver,String firstHandler){ /*获取所有窗口的Handler,并存放在Set集合里*/ Set<String> handlers = driver.getWindowHandlers(); /*删掉第一个窗口的Handler*/ if(handlers.remove(firstHandler)){ System.out.println("已删掉第一个窗口的Handler); } /*把Set集合转换成Iterator*/ Iterator<String> it = handlers.iterator(); try{ if(it.hasNext()){ driver.switchTo.window(it.next()); } } catch(Exception e){ System.out.println("没有可用的窗口Handler"); }}
思路就是所有窗口的Handler存放到Set集合中之后,把第一个窗口的Handler删掉,这样就能百分百保证Set集合里只剩下第二个窗口的Handler,所以就能安全稳定地定位到第二个窗口。
关于定位模态窗口,刚好我们项目中就有用到模态窗口,我用这个笨方法试过了,确实可行!而且非常稳定。这里有两种情况:
- 一、WebDriver运行,初始化了一个浏览器窗口,然后在这个窗口点击某超链接或按钮,直接弹出模态窗口,则用这个笨方法可以正常定位。
- 二、WebDriver运行,初始化了一个浏览器窗口,然后在这个窗口点击某超链接或按钮,先弹出一个常规窗口,然后在这个窗口再点击超链接或按钮,才弹出模态窗口,此时要先把第一个窗口关掉,再定位到模态窗口,否则定位不到,我也不知道为什么,反正实践过程中就发现是这样。
暂时就这些了。Java版的WebDriver,我基本会用,框架嘛,暂时能用testng吧,我还是比较好奇在框架这方面能有什么更好的办法,所以很期待你的WebDriver Java版的教程。
非常感谢远方的分享,由于其无法连接站点所以由我整理发布,感谢其的积极思考与实践,使用java binding的同学可以亲自一试
- 如何使用webdriver处理模态窗口
- webdriver对于模态窗口的处理
- 如何使用Holmos处理模态窗口(ModalDialog)
- 如何使用WebDriver?
- Selenium Webdriver中如何处理浏览器弹出多个窗口的问题
- webdriver 如何处理时间控件
- Selenium WebDriver如何处理单选框和多选框
- Webdriver学习笔记(六)多窗口的切换处理
- selenium webdriver学习(六)------------如何得到弹出窗口
- WebDriver如何切换到新打开的窗口中
- 【转载】WebDriver如何切换到新打开的窗口中
- 如何处理弹出窗口
- webdriver实现窗口切换
- WebDriver切换浏览器窗口
- webdriver切换窗口
- webdriver实现窗口最大化
- webdriver窗口最大化方法
- WebDriver切换浏览器窗口
- sql小写
- windows phone 7 获取手机图片库中图片
- Android 动态Gallery
- org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFacto
- Algorithm - n的阶乘末尾0的个数
- 如何使用webdriver处理模态窗口
- 修改svn的log信息
- 一点点的、慢慢的淡出了你的记忆:伤感日志
- synchronized iphone iOS开发
- openssl md5 rsa 签名和签名验证
- IOCP不可忽视的细节
- iptables命令学习
- web 模态与非模态弹层
- Mapping Example