Selenium 可以处理基于 Windows 的弹出窗口吗?

seleniumautomation testingtesting tools更新于 2026/1/8 9:07:17

Selenium 可以处理基于 Windows 的弹出窗口。在某些情况下,网页在执行某些操作后可能会打开多个窗口。打开的子窗口可能是包含一些信息或广告的弹出窗口。

Selenium 使用 getWindowHandles () 和 getWindowHandle () 方法来处理子窗口。getWindowHandles () 方法包含所有已打开窗口的窗口句柄 ID。窗口句柄以 Set 数据结构(包含 String 类型的数据类型)的形式保存。

getWindowHandle () 方法用于存储当前活动窗口的窗口句柄 ID。众所周知,getWindowHandles () 方法用于存储所有已打开的窗口句柄 ID。要遍历所有句柄,需要使用 iterator () 和 next () 方法。

由于 getWindowHandles () 以 Set 数据结构的形式存储窗口 ID,因此我们必须在代码中导入 java.util.Set。此外,要使用 iterator () 方法,还需要导入 java.util.Iterator 和 导入 java.util.List。

最后,要切换到特定窗口,需要使用 switchTo.().window() 方法。我们要切换的窗口的句柄 ID 将作为参数传递给该方法。

实现上述概念的步骤 −

  • 应用程序启动后,首先使用 getWindowHandles () 方法将所有窗口句柄 ID 存储在 Set 数据结构中。

  • 我们将使用 iterator () 和 next () 方法遍历所有窗口句柄 ID。

  • 然后使用 getWindowHandle () 方法获取当前窗口句柄 ID。

  • 然后使用 switchTo.().window() 方法切换到该窗口。

示例

Code Implementation.

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
import java.util.List;
import java.util.Set;
import java.util.Iterator;
public class HandleWindows {
   public static void main(String[] args) {
      System.setProperty("webdriver.chrome.driver", "C:\Users\ghs6kor\Desktop\Java\chromedriver.exe");
      WebDriver driver = new ChromeDriver();
      String url = "https://secure.indeed.com/account/login";
      driver.get(url);
      //隐式等待
      driver.manage().timeouts().implicitlyWait(12, TimeUnit.SECONDS);
      // 存储所有窗口句柄
      Set<String> a = driver.getWindowHandles();
      // 遍历句柄
      Iterator<String> it = a.iterator();
      String chlwnd = it.next();
      String pwnd = it.next();
      // 切换到子窗口
      driver.switchTo().window(chlwnd);
      System.out.println("Page title "+ driver.getTitle());
      // 切换到父窗口
      driver.switchTo().window(pwnd);
      System.out.println("Page title "+ driver.getTitle());
      driver.quit();

相关文章