Java Selenium 处理弹出窗口与多标签页切换实战
本文介绍如何使用 Selenium 的 Java API 处理多窗口场景。核心步骤包括获取当前窗口句柄、点击触发新窗口的元素、遍历获取所有窗口句柄集合并通过标题匹配定位目标窗口,最后进行窗口切换。
窗口句柄原理
Selenium 通过 Window Handle(窗口句柄)来区分不同的浏览器窗口或标签页。每个打开的页面都有一个唯一的字符串标识符。操作多窗口的标准流程是:
- 记录当前主窗口(Parent Window)的句柄。
- 执行操作触发新窗口(如点击链接或按钮)。
- 调用
driver.getWindowHandles()获取浏览器中所有打开窗口的句柄集合。 - 遍历该集合,利用
driver.switchTo().window(windowId)切换上下文并检查属性(如标题)以找到目标窗口。 - 完成目标窗口操作后,切换回父窗口。
测试页面准备
为了验证多窗口功能,需要创建一个包含触发新开窗口脚本的 HTML 页面。以下是用于测试的基础 HTML 结构:
<html>
<head>
<title>常见web ui元素操作及API使用</title>
<script type="text/javascript">
function open_win()
{
window.open("http://www.cnblogs.com")
}
</script>
</head>
<body>
<form>
<input type="button" value="打开窗口" onclick="open_win()">
</form>
</body>
</html>
将该文件保存为 AllUIElement.html 并确保本地路径正确。
Java 实现代码
以下代码演示了如何通过 XPath 定位按钮,点击后遍历窗口句柄找到标题中包含特定关键词的新窗口,并进行切换。
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import java.util.Set;
import java.util.HashSet;
public class WindowHandlerTest {
public static void testMultipleWindowsTitle(WebDriver driver) throws Exception {
// 1. 配置本地测试文件路径
String url = "file:///E:/StashFolder/huoli_28@hotmail.com/Stash/Tank-MoneyProject/Selenium Webdriver/AllUIElement.html";
driver.get(url);
// 2. 记录当前窗口句柄
String parentWindowId = driver.getWindowHandle();
System.out.println("Current Title: " + driver.getTitle());
// 3. 定位并点击触发新窗口的按钮
WebElement button = driver.findElement(By.xpath("//input[@value='打开窗口']"));
button.click();
// 4. 获取所有窗口的句柄列表
Set allWindowsId = driver.getWindowHandles();
// 5. 遍历句柄,查找目标窗口并切换
for (String windowId : allWindowsId) {
// 先切换到该窗口上下文
driver.switchTo().window(windowId);
// 判断标题是否包含关键字(例如“博客园”)
if (driver.getTitle().contains("博客园")) {
System.out.println("Found target window with title: " + driver.getTitle());
break;
}
}
// 6. 切回原窗口
driver.switchTo().window(parentWindowId);
System.out.println("Back to parent window, Title: " + driver.getTitle());
}
}
在实际使用中,需注意本地文件路径的正确性。代码中的 URL 需替换为您实际保存 AllUIElement.html 文件的完整路径。如果目标窗口标题动态变化,建议增加等待机制以确保页面加载完成后再进行匹配。
以上就是Java selenium 操作弹出窗口的详细内容,更多关于Java selenium 操作弹出窗口的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









