Java Selenium 处理弹出窗口与多标签页切换实战

小林子
小林子
发布时间:2026-10-13| 6人浏览过
原创

本文介绍如何使用 Selenium 的 Java API 处理多窗口场景。核心步骤包括获取当前窗口句柄、点击触发新窗口的元素、遍历获取所有窗口句柄集合并通过标题匹配定位目标窗口,最后进行窗口切换。

窗口句柄原理

Selenium 通过 Window Handle(窗口句柄)来区分不同的浏览器窗口或标签页。每个打开的页面都有一个唯一的字符串标识符。操作多窗口的标准流程是:

  1. 记录当前主窗口(Parent Window)的句柄。
  2. 执行操作触发新窗口(如点击链接或按钮)。
  3. 调用 driver.getWindowHandles() 获取浏览器中所有打开窗口的句柄集合。
  4. 遍历该集合,利用 driver.switchTo().window(windowId) 切换上下文并检查属性(如标题)以找到目标窗口。
  5. 完成目标窗口操作后,切换回父窗口。

测试页面准备

为了验证多窗口功能,需要创建一个包含触发新开窗口脚本的 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 操作弹出窗口的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。