在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,多取了一次。
分享到:
相关推荐
8. **高级特性**:如模拟鼠标和键盘事件,处理弹出窗口和对话框,处理cookies,以及处理JavaScript执行。 9. **异常处理**:在遇到页面元素未找到或网络问题时,如何优雅地处理异常。 10. **多浏览器测试**:如何...
1.6 selenium webdriver学习(六)------------如何得到弹出窗口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.7 selenium webdriver学习(七)------------如何处理alert、confirm、prompt...
这意味着它可以处理 JavaScript 重定向、弹出窗口等复杂场景。 #### 二、Selenium WebDriver 的环境搭建 - **1.1 Selenium 介绍**: - Selenium 是一个用于 Web 应用程序测试的工具包。 - 它包含多个组件,如 ...
8. **高级技巧**:可能涉及多窗口操作、模拟键盘鼠标事件、处理弹出框和对话框,以及执行JavaScript等进阶功能。 9. **实战案例**:提供多个完整的网页自动化测试案例,例如登录注册流程、商品搜索、购物车操作等,...
在本文中,我们将深入探讨如何使用Selenium WebDriver处理网页中的弹出窗口。 ### Selenium WebDriver与弹出窗口 #### 弹出窗口的挑战 当一个网页触发弹出新窗口或标签页时,这对自动化测试构成了挑战,因为默认...
- `switchTo().alert()`: 处理弹出对话框 - `switchTo().defaultContent()`: 返回到默认内容 ### 8. 总结 Selenium WebDriver for Java API 提供了一套强大的工具,帮助开发者编写高效、可靠的Web自动化测试脚本。...
弹出窗口管理 - **Alert 对话框**:如何接受或取消警告框。 - **Confirm 对话框**:处理确认框,选择“确定”或“取消”。 - **Prompt 对话框**:输入文本并提交。 #### 8. Select 下拉框操作 通过`Select`类,...
5. **处理弹出对话框**:了解如何处理JavaScript弹出窗口、确认对话框和提示框。 6. **处理动态内容**:掌握如何等待元素出现或消失,以及如何处理页面的异步加载。 7. **异常处理**:学习如何编写健壮的测试脚本...
第六章讲解如何捕获和处理浏览器中的弹出窗口,包括`alert`、`confirm`和`prompt`对话框。 **捕获弹出窗口的方法**: - 捕获并响应`alert`对话框。 - 捕获并确认/取消`confirm`对话框。 - 填写并提交`prompt`对话框...
对话框处理也是自动化测试中经常遇到的场景,本书提供了如何处理alert、confirm以及prompt等原生JS弹出框的方法。 在表单元素处理方面,本书提供了丰富的知识,包括如何使用selenium执行JavaScript,以及如何获取...
除了基本的浏览器控制,它还支持许多高级操作,如元素定位、交互(点击、输入文本等)、模拟用户行为(如鼠标悬停、键盘事件)、处理弹出窗口和对话框,以及执行JavaScript等。 #### 4.1 访问链接 在页面上,我们...
例如,可能有扩展方法用于等待元素出现、确保元素可见、执行JavaScript操作、处理弹出窗口等,这些都是Selenium WebDriver基础API可能需要多行代码才能实现的功能。 4. **C#编程**:由于该库是为C#设计的,所以熟悉...
- 处理弹出窗口、框架、动态加载元素、JavaScript执行。 - 自定义事件监听器,如使用`WebDriverEventListener`(Java)或自定义装饰器(Python)。 - 并行测试:使用多线程或多进程进行并发测试。 8. **最佳实践...
7. **处理弹出窗口和对话框** Webdriver 还支持处理警告对话框、确认框和输入框: ```python driver.switch_to.alert.accept() # 接受警告对话框 driver.switch_to.alert.dismiss() # 拒绝警告对话框 driver....
- 处理弹出窗口和对话框:通过`switch_to.alert`处理警告对话框,或切换到新打开的窗口和框架。 - 模拟键盘和鼠标事件:使用`ActionChains`类模拟用户输入。 - 并行测试:使用`TestNG`或`pytest`进行多浏览器并行...
WebDriver API允许开发者直接与浏览器通信,模拟用户行为,如点击、输入文本、导航、处理弹出窗口等。它支持多种浏览器,包括Chrome、Firefox、IE、Edge等,确保跨浏览器的测试一致性。 **2. WebDriver API 结构** ...
启动 Eclipse 并选择“File” > “New” > “Other”,在弹出的对话框中选择“Maven Project”。 ![添加新项目](pic1) ##### 2. 选择 Maven 项目 在出现的新窗口中选择“Maven Project”,然后点击“Next”。 !...
它可以创建一个会话,打开网页,填写表单,点击按钮,执行JavaScript,甚至处理弹出窗口和对话框。这种直接控制提供了更精确的测试能力,使得测试脚本能够反映出真实用户的行为。 Selenium支持多种编程语言,如Java...
- **高级功能支持**:WebDriver提供了诸如处理弹出窗口、模拟键盘和鼠标事件等功能,这些在Selenium1.0中较难实现。 #### 三、WebDriver实际应用示例 接下来,我们通过一个简单的示例来看看如何使用WebDriver来...