1.原理
在代码里,通过Set allWindowsId = driver.getWindowHandles();来获取所有弹出浏览器的句柄,然后遍历,使用swithcto.window(newwindow_handle)方法定位到新的窗口。
2.案例
程序6-16演示效果:首先打开CSDN博客首页,停留2秒后输出标题名称。然后点击创作中心按钮跳转到创作中心页面,由于未进行登录,因此跳转后的页面会是登录页,通过遍历句柄获取新窗口并输出标题名称,最后再回到父窗口并输出标题名称。
//程序6-16
public class MultipleWindows {
public static void main(String[] args) throws InterruptedException {
WebDriver driver = WebDriverUtils.getWebDriver();
String url = "https://www.csdn.net";
driver.get(url);
Thread.sleep(2000);
//获取当前窗口的句柄
String parentWindowId = driver.getWindowHandle();
System.out.println("parentWindow title:" + driver.getTitle());
//点击创作中心
WebElement blogClick = driver.findElement(By.xpath("//*[@id=\"blogClick\"]"));
blogClick.click();
Set<String> allWindowsId = driver.getWindowHandles();
//获取所有的打开窗口的句柄,遍历获取打开的新窗口并输出标题
for (String windowId : allWindowsId) {
if (driver.switchTo().window(windowId).getTitle().contains("CSDN博客")) {
driver.switchTo().window(windowId);
//操作新窗口
//todo
System.out.println("childWindow title:" + driver.getTitle());
//关闭当前窗口
driver.close();
break;
}
}
//再次切换回原来的父窗口
driver.switchTo().window(parentWindowId);
System.out.println("parentWindow title:" + driver.getTitle());
driver.quit();
}
}