如何使用webdriver处理模态窗口
1个回答
2016-06-03 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
关注
展开全部
首先说定位常规窗口,官网给出了一个方法:
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,所以有时候就不稳定不安全。
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,所以有时候就不稳定不安全。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询