selenium webdriver学习(六)------------如何得到弹出窗口
来源:互联网 发布:mac 终端 桌面路径 编辑:程序博客网 时间:2024/05/20 21:21
在selenium 1.X里面得到弹出窗口是一件比较麻烦的事,特别是新开窗口没有id、name的时候。当时还整理了处理了几种方法,详见:http://seleniumcn.cn/read.php?tid=791 。在selenium webdriver中得到新开窗口相对简单的多,它无关新开窗口的id、name等属性。以下面的html为例:
- <spanstyle="white-space: normal; background-color: rgb(255, 255, 255);">test.html</span>
- <html>
- <head><title>Test Popup Window</title></head>
- <body>
- <aid ="51"href ="http://www.51.com/"target ="_blank">Let's go!</a>
- </body>
- </html>
下面的代码演示了如何去得到弹出的新窗口
- import java.util.Iterator;
- import java.util.Set;
- import org.openqa.selenium.By;
- import org.openqa.selenium.WebDriver;
- import org.openqa.selenium.firefox.FirefoxDriver;
- public class PopupWindowTest {
- /**
- * @author gongjf
- */
- publicstaticvoid main(String[] args) {
- System.setProperty("webdriver.firefox.bin","D:\\Program Files\\Mozilla Firefox\\firefox.exe");
- WebDriver dr = new FirefoxDriver();
- String url ="\\Your\\Path\\to\\main.html";
- dr.get(url);
- dr.findElement(By.id("51")).click();
- //得到当前窗口的句柄
- String currentWindow = dr.getWindowHandle();
- //得到所有窗口的句柄
- Set<String> handles = dr.getWindowHandles();
- Iterator<String> it = handles.iterator();
- while(it.hasNext()){
- String handle = it.next();
- if(currentWindow.equals(handle))continue;
- WebDriver window = dr.switchTo().window(handle);
- System.out.println("title,url = "+window.getTitle()+","+window.getCurrentUrl());
- }
- }
- }
输出结果:
- title,url = 51.com 真人配对玩游戏,http://www.51.com/
捕获或者说定位弹出窗口的关键在于获得弹出窗口的句柄。(句柄,我的理解是浏览器窗口的一个唯一标识,记得以前玩"按键精灵"也有这玩样。)
在上面的代码里,使用windowhandle方法来获取当前浏览器窗口的句柄,使用了windowhandles方法获取所有弹出的浏览器窗口的句柄,然后通过排除当前句柄的方法来得到新开窗口的句柄。
在获取新弹出窗口的句柄后,使用switchto.window(newwindow_handle)方法,将新窗口的句柄作为参数传入既可捕获到新窗口了。
如果想回到以前的窗口定位元素,那么再调用1次switch_to.window方法,传入之前窗口的句柄既可达到目的。
PS:今天发现while里的代码有些问题。由原来的。
- while(it.hasNext()){
- if(currentWindow == it.next())continue;
- WebDriver window = dr.switchTo().window(it.next());
- System.out.println("title,url = "+window.getTitle()+","+window.getCurrentUrl());
- }
更改为:
- while(it.hasNext()){
- String handle = it.next();
- if(currentWindow.equals(handle))continue;
- WebDriver window = dr.switchTo().window(handle);
- System.out.println("title,url = "+window.getTitle()+","+window.getCurrentUrl());
- }
更改原因:
循环里面有两次it.next,多取了一次。
- selenium webdriver学习(六)------------如何得到弹出窗口
- selenium webdriver学习(六)-怎么得到弹出窗口
- Selenium-webdriver系列教程(六)————如何捕获弹出窗口
- selenium webdriver学习(十二)------------如何利用selenium-webdriver截图
- selenium与webdriver测试弹出窗口
- selenium webdriver 学习总结-数据驱动(六)
- selenium webdriver 学习总结-数据驱动(六)
- selenium webdriver 学习总结-数据驱动(六)
- selenium webdriver 学习总结-数据驱动(六)
- Selenium-webdriver系列教程(6)———如何捕获弹出窗口
- Selenium Webdriver中如何处理浏览器弹出多个窗口的问题
- selenium webdriver学习(十八)----------构建webdriver
- Webdriver学习笔记(六)多窗口的切换处理
- selenium-webdriver(python) (六)
- selenium webdriver学习(八)------------如何操作select下拉框
- selenium webdriver学习(九)------------如何操作cookie
- selenium webdriver学习(十四)------------如何处理table
- selenium webdriver学习(十五)------------如何处理FirefoxProfile
- 第41章、记录速改(一)
- 9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路(强烈顶,学习榜样!)
- 黑马程序员--委托的好处与事件学习
- 获取字符串长度的几种办法
- HDU 1702
- selenium webdriver学习(六)------------如何得到弹出窗口
- @SuppressWarnings(unchecked)
- jdbc 事务的隔离级别
- 第42章、记录速改
- android surfaceflinger研究----显示系统, Surface机制, SurfaceFlinger loop
- ubuntu同步CM7源码并编译V880刷机包
- 第43章、分页显示
- android recovery模式及ROM制作
- 第44章、DataList