1.原理
在代碼裡,通過Set allWindowsId = driver.getWindowHandles();來擷取所有彈出浏覽器的句柄,然後周遊,使用swithcto.window(newwindow_handle)方法定位到新的視窗。
2.案例
程式6-16示範效停留2秒後輸出标題名稱。然後點選創作中心按鈕跳轉到創作中心頁面,由于未進行登入,是以跳轉後的頁面會是登入頁,通過周遊句柄擷取新視窗并輸出标題名稱,最後再回到父視窗并輸出标題名稱。
//程式6-16
public class MultipleWindows {
public static void main(String[] args) throws InterruptedException {
WebDriver driver = WebDriverUtils.getWebDriver();
String url =
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();
}
}