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

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

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

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

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

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

实施上述概念应遵循的步骤-

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

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

  • 然后,让我们借助getWindowHandle()方法获取当前的窗口句柄ID。

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

示例

代码实现。

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();
猜你喜欢