`

selenium webdriver学习(六)------------如何得到弹出窗口

 
阅读更多

在selenium 1.X里面得到弹出窗口是一件比较麻烦的事,特别是新开窗口没有id、name的时候。当时还整理了处理了几种方法,详见:http://seleniumcn.cn/read.php?tid=791 。在selenium webdriver中得到新开窗口相对简单的多,它无关新开窗口的id、name等属性。以下面的html为例:

test.html


<html>
 
    <head><title>Test Popup Window</title></head>
 
    <body>
 
        <a id = "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
	 */
	public static void 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方法,传入之前窗口的句柄既可达到目的。

 

 

----------------------------------------------------------2102年6月20日------------------------------------------------------

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,多取了一次。

分享到:
评论
2 楼 qi_ling2005 2012-06-13  
shine22fmf 写道
学习了,感谢一下!哈哈

不客气
1 楼 shine22fmf 2012-06-13  
学习了,感谢一下!哈哈

相关推荐

    Selenium WebDriver Practical Guide-Code

    8. **高级特性**:如模拟鼠标和键盘事件,处理弹出窗口和对话框,处理cookies,以及处理JavaScript执行。 9. **异常处理**:在遇到页面元素未找到或网络问题时,如何优雅地处理异常。 10. **多浏览器测试**:如何...

    selenium webdriver 学习

    1.6 selenium webdriver学习(六)------------如何得到弹出窗口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.7 selenium webdriver学习(七)------------如何处理alert、confirm、prompt...

    selenium webdriver

    这意味着它可以处理 JavaScript 重定向、弹出窗口等复杂场景。 #### 二、Selenium WebDriver 的环境搭建 - **1.1 Selenium 介绍**: - Selenium 是一个用于 Web 应用程序测试的工具包。 - 它包含多个组件,如 ...

    selenium webdriver基于python源码案例.zip

    8. **高级技巧**:可能涉及多窗口操作、模拟键盘鼠标事件、处理弹出框和对话框,以及执行JavaScript等进阶功能。 9. **实战案例**:提供多个完整的网页自动化测试案例,例如登录注册流程、商品搜索、购物车操作等,...

    Selenium 疑问之一:WebDriver 获得弹出窗口(转)

    在本文中,我们将深入探讨如何使用Selenium WebDriver处理网页中的弹出窗口。 ### Selenium WebDriver与弹出窗口 #### 弹出窗口的挑战 当一个网页触发弹出新窗口或标签页时,这对自动化测试构成了挑战,因为默认...

    selenium-webdriver-java api文档

    - `switchTo().alert()`: 处理弹出对话框 - `switchTo().defaultContent()`: 返回到默认内容 ### 8. 总结 Selenium WebDriver for Java API 提供了一套强大的工具,帮助开发者编写高效、可靠的Web自动化测试脚本。...

    selenium-WebDriver的API文档

    WebDriver API允许开发者直接与浏览器通信,模拟用户行为,如点击、输入文本、导航、处理弹出窗口等。它支持多种浏览器,包括Chrome、Firefox、IE、Edge等,确保跨浏览器的测试一致性。 **2. WebDriver API 结构** ...

    Mastering-Selenium-Webdrivers-3.0-V-:Packt出版的Mastering Selenium Webdrivers 3.0(V)的代码存储库

    5. **处理弹出对话框**:了解如何处理JavaScript弹出窗口、确认对话框和提示框。 6. **处理动态内容**:掌握如何等待元素出现或消失,以及如何处理页面的异步加载。 7. **异常处理**:学习如何编写健壮的测试脚本...

    Selenium WebDriver精讲

    第六章讲解如何捕获和处理浏览器中的弹出窗口,包括`alert`、`confirm`和`prompt`对话框。 **捕获弹出窗口的方法**: - 捕获并响应`alert`对话框。 - 捕获并确认/取消`confirm`对话框。 - 填写并提交`prompt`对话框...

    selenium-webdriver从入门到提高

    对话框处理也是自动化测试中经常遇到的场景,本书提供了如何处理alert、confirm以及prompt等原生JS弹出框的方法。 在表单元素处理方面,本书提供了丰富的知识,包括如何使用selenium执行JavaScript,以及如何获取...

    selenium_WebDriver_java版使用指南

    除了基本的浏览器控制,它还支持许多高级操作,如元素定位、交互(点击、输入文本等)、模拟用户行为(如鼠标悬停、键盘事件)、处理弹出窗口和对话框,以及执行JavaScript等。 #### 4.1 访问链接 在页面上,我们...

    Selenium-Web-Driver-Extensions:NuGet软件包。 Selenium WebDriver的扩展方法助手可简化常见任务

    例如,可能有扩展方法用于等待元素出现、确保元素可见、执行JavaScript操作、处理弹出窗口等,这些都是Selenium WebDriver基础API可能需要多行代码才能实现的功能。 4. **C#编程**:由于该库是为C#设计的,所以熟悉...

    Selenium WebDriver 基础学习手册,java和python语言.zip

    - 处理弹出窗口、框架、动态加载元素、JavaScript执行。 - 自定义事件监听器,如使用`WebDriverEventListener`(Java)或自定义装饰器(Python)。 - 并行测试:使用多线程或多进程进行并发测试。 8. **最佳实践...

    webdriver_guide-python(乙醇)

    7. **处理弹出窗口和对话框** Webdriver 还支持处理警告对话框、确认框和输入框: ```python driver.switch_to.alert.accept() # 接受警告对话框 driver.switch_to.alert.dismiss() # 拒绝警告对话框 driver....

    Selenium webDriver(chrome和Firefox)

    - 处理弹出窗口和对话框:通过`switch_to.alert`处理警告对话框,或切换到新打开的窗口和框架。 - 模拟键盘和鼠标事件:使用`ActionChains`类模拟用户输入。 - 并行测试:使用`TestNG`或`pytest`进行多浏览器并行...

    Selenium WebDriver Project on Eclipse

    启动 Eclipse 并选择“File” &gt; “New” &gt; “Other”,在弹出的对话框中选择“Maven Project”。 ![添加新项目](pic1) ##### 2. 选择 Maven 项目 在出现的新窗口中选择“Maven Project”,然后点击“Next”。 !...

    Selenium WebDriver

    它可以创建一个会话,打开网页,填写表单,点击按钮,执行JavaScript,甚至处理弹出窗口和对话框。这种直接控制提供了更精确的测试能力,使得测试脚本能够反映出真实用户的行为。 Selenium支持多种编程语言,如Java...

    Selenium2.0+Webdriver学习【1】

    - **高级功能支持**:WebDriver提供了诸如处理弹出窗口、模拟键盘和鼠标事件等功能,这些在Selenium1.0中较难实现。 #### 三、WebDriver实际应用示例 接下来,我们通过一个简单的示例来看看如何使用WebDriver来...

Global site tag (gtag.js) - Google Analytics