如何使用 Java 处理 Selenium 中的多个窗口?

javaobject oriented programmingprogramming更新于 2024/6/9 15:03:00

使用 Selenium 和 Java 时,了解如何有效地处理多个窗口至关重要。在 Selenium 中管理多个窗口涉及在测试自动化期间在不同的浏览器窗口或弹出窗口之间导航。它允许与各种元素进行交互并验证不同窗口之间的功能。

正确处理多个窗口可确保全面的测试覆盖范围和准确的结果。通过利用 Selenium 的 WebDriver 接口和 Java,您可以检索窗口句柄、在窗口之间切换、对特定窗口执行操作以及自动化涉及多个浏览器窗口的复杂场景。掌握这项技能可以提高 Selenium 测试自动化脚本的效率和可靠性。

Selenium

Selenium 是一个开源自动化框架,广泛用于测试 Web 应用程序。它通过提供一系列库和工具来简化浏览器交互、用户操作模拟和功能测试。此外,Selenium 支持包括 Java 在内的多种编程语言,使其成为全球开发人员的热门选择。

WebDriver driver = new ChromeDriver();

方法

使用 Java 处理 Selenium 中的多个窗口时,有多种方法和技术可用。本教程包含不同的示例,以帮助读者理解如何有效地处理多个窗口。

  • 使用 getWindowHandles()

  • 使用 switchTo().window(handle)

  • 使用 quit()

方法 1:使用 getWindowHandles()

使用 Java 处理 Selenium 中的多个窗口时,有一种名为 `getWindowHandles()` 的有用方法。此方法将所有当前打开的窗口句柄作为一个集合返回。通过以这种方式存储它们,用户可以在需要时轻松地在不同窗口之间切换。要使用该方法,首先使用 `getWindowHandle()` 获取当前窗口句柄。执行打开新窗口的操作后,使用 `getWindowHandles()` 检索所有句柄以继续在它们之间切换。

为了在自动测试期间有效地处理多个窗口,可以遍历该集合并使用 `switchTo().window()` 方法,同时将所需的句柄作为参数传递。这使我们能够与 Selenium 和 Java 中的特定窗口进行交互,从而使测试更有效。

算法

  • 获取当前窗口句柄的方法是通过 getWindowHandle() 函数。然后可以将该句柄存储在变量中以供进一步使用。

  • 使用 getWindowHandles() 方法检索所有窗口句柄并将它们存储在一个集合中。

  • 使用循环遍历窗口句柄集合。

  • 要在循环内切换到特定窗口,可以使用 switchTo().window() 方法并将相应的句柄作为输入参数。

  • 在新窗口上执行所需的操作或动作。

示例

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import java.util.Set;

public class MultipleWindowsExample {

   public static void main(String[] args) {
        // 设置 ChromeDriver 可执行文件的路径
        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
        
        // 创建 ChromeDriver 的实例
        WebDriver driver = new ChromeDriver();
        
        // 导航到具有多个窗口的网页
        driver.get("https://www.tutorialspoint.com");
        
        // 执行打开新窗口的操作,例如单击链接
        driver.findElement(By.linkText("打开新窗口")).click();
        
        // 获取所有窗口句柄
        Set<String> windowHandles = driver.getWindowHandles();
        
        // 遍历每个窗口句柄
        for (String windowHandle : windowHandles) {
            // 切换到所需窗口
            driver.switchTo().window(windowHandle);
            // 在窗口上执行操作
            System.out.println("窗口标题:" + driver.getTitle());
        }
        
        // 关闭驱动程序实例
        driver.quit();
   }
}

输出

Title of the window: Online Courses and eBooks Library
Title of the window: New Window

方法 2:使用 switchTo().window(handle)

当通过 Java 在 Selenium 中处理多个窗口时,`switchTo().window(handle)` 方法是基础。首先,我们通过 `getWindowHandles()` 检索窗口句柄。从那里,遍历每个句柄并应用此技术使我们能够执行各种操作并与属于特定窗口的特定元素进行交互。将相关窗口句柄作为参数传递会切换驱动程序的上下文;因此,仅在需要时执行操作。

算法

  • 要启动新窗口的打开,必须首先确定触发操作或事件,例如单击链接或按钮。

  • 要检索窗口句柄,请使用 getWindowHandles() 方法。此方法检索所有打开的窗口并将它们作为集合返回。

  • 在循环内部,可以通过使用 `switchTo().window(handle)` 方法顺利切换到每个可用窗口。需要澄清的是,此处的"handle"是指

  • 代码可能需要使用 switchTo().window(originalHandle) 切换回原始窗口,然后再继续进行下一次迭代。

示例

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import java.util.Set;

public class MultipleWindowsExample {

   public static void main(String[] args) {
        // 设置 ChromeDriver 可执行文件的路径
        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
        
        // 创建 ChromeDriver 的实例
        WebDriver driver = new ChromeDriver();
        
        // 导航到主窗口
        driver.get("https://www.tutorialspoint.com");
        
        // 执行打开新窗口的操作,例如单击链接
        driver.findElement(By.linkText("打开新窗口")).click();
        
        // 获取所有窗口句柄
        Set<String> windowHandles = driver.getWindowHandles();
        
        // 切换到新窗口
        for (String windowHandle : windowHandles) {
            driver.switchTo().window(windowHandle);
            // 检查窗口标题是否与新窗口匹配
            if (driver.getTitle().equals("新窗口标题")) {
                // 对新窗口执行操作
                System.out.println("新窗口的标题:" + driver.getTitle());
                break;
            }
        }
        
        // 关闭驱动程序实例
        driver.quit();
   }
}

输出

Title of the window: Online Courses and eBooks Library
Title of the window: New Window

方法 3:使用 quit()

要使用 Java 处理 Selenium 中的多个窗口,`quit()` 方法对于正确清理和关闭浏览器非常重要。在所有窗口上执行所需的操作后,在驱动程序实例上调用 `quit()` 方法至关重要。此方法关闭所有浏览器窗口并终止 WebDriver 会话。它释放相关的系统资源并确保干净退出。

算法

  • 可以使用 getWindowHandle() 方法检索当前窗口的句柄。只需将此句柄存储在变量中以便稍后访问即可。

  • 要在循环内切换到特定窗口,可以使用 `switchTo().window()` 方法并将句柄作为参数传递。

  • 要返回原始窗口,可以使用 switchTo().window() 方法,并在必要时将原始窗口句柄作为参数传递。

  • 在窗口上完成所有必要的操作后,通过调用驱动程序实例上的 quit() 方法关闭浏览器。

  • 通过执行 quit() 方法,WebDriver 会话正常结束,该方法可确保关闭所有浏览器窗口并释放资源。

程序

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class QuitExample {

   public static void main(String[] args) {
        // 设置 ChromeDriver 可执行文件的路径
        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
        
        // 创建 ChromeDriver 的实例
        WebDriver driver = new ChromeDriver();
        
        // 导航到网页
        driver.get("https://www.tutorialspoint.com");
        
        // 在网页上执行操作
        
        // 关闭 WebDriver 实例打开的所有窗口
        driver.quit();
   }
}

输出

Closes the webpage

结论

在本教程中,我们了解到使用 Java 在 Selenium 中处理多个窗口是 Web 自动化测试的一个重要方面。通过利用 getWindowHandles() 和 switchTo().window(handle) 等方法,测试人员可以有效地在不同的窗口之间导航、对特定窗口执行操作以及根据需要检索窗口句柄。quit() 方法对于关闭 WebDriver 实例打开的所有窗口以及确保正确清理和终止 WebDriver 会话非常有用。


相关文章