Selenium 能否处理基于 Windows 的弹出窗口?
Selenium 可以处理基于 Windows 的弹出窗口。在对网页执行某些操作后,可能会出现网页打开多个窗口的情况。打开的子窗口可能是包含一些信息或广告的弹出窗口。
Selenium 使用 **getWindowHandles()** 和 **getWindowHandle()** 方法来处理子窗口。getWindowHandles() 方法包含所有已打开窗口的窗口句柄 ID。窗口 ID 句柄以 Set 数据结构的形式保存[包含字符串数据类型]。
getWindowHandle() 方法用于存储当前活动窗口的窗口句柄 ID。众所周知,getWindowHandles() 方法用于存储所有已打开窗口的句柄 ID。为了迭代所有句柄,使用 iterator() 和 next() 方法。
由于 getWindowHandles() 以 Set 数据结构的形式存储窗口 ID,因此我们必须在代码中 **import java.util.Set**。此外,为了使用 iterator() 方法,我们必须 **import java.util.Iterator** 和 **import 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); //implicit wait driver.manage().timeouts().implicitlyWait(12, TimeUnit.SECONDS); // store all window handles Set<String> a = driver.getWindowHandles(); // iterate through handles Iterator<String> it = a.iterator(); String chlwnd = it.next(); String pwnd = it.next(); // switch to child window driver.switchTo().window(chlwnd); System.out.println("Page title "+ driver.getTitle()); // switch to parent window driver.switchTo().window(pwnd); System.out.println("Page title "+ driver.getTitle()); driver.quit();