摘要: 版權聲明:本文為博主原創文章,轉載請注明出處。
在頁面操作過程中有時候點擊某個鏈接會彈出新的窗口,這時我們如果需要操作新打開的頁面,就需要將主機切換到新打開的窗口上再進行操作,比如博客園精華頁的精華博文,每點擊一篇就會打開一個瀏覽器窗口。WebDriver 提供了 switchTo().window()方法可以實現在不同的窗口之間切換。
| 方法 |
說明 |
|
| switchTo().window() |
原型 |
WebDriver window(java.lang.String nameOrHandle) |
| 參數 |
nameOrHandle:WebDriver 返回的窗口或句柄的名稱; 通過 getWindowHandle ()獲取; |
|
| 作用 |
切換到具有給定名稱/句柄的窗口。 |
|
| 用法 |
driver.switchTo().window( nameOrHandle ); |
|
| 異常 |
NoSuchWindowException-如果找不到窗口 |
|
| getWindowHandle |
原型 |
java.lang.String getWindowHandle(); |
| 作用 |
返回此窗口中唯一標識此驅動程序實例中的不透明句柄。 |
|
| getWindowHandles |
原型 |
java.util.Set<java.lang.String> getWindowHandles() |
| 返回值 |
Set集合,可以參考Set容器的相關方法,對其進行操作; |
|
在如下的測試代碼中,我們登錄博客園,打開博客園的精華頁面,依次進入前兩篇精華博文,再分別定位到這兩篇博文的“評論區”,輸入“Test————SwitchTo()方法”測試多窗口的切換,但為維持環境和諧,不進行評論提交操作;
package com.SeleniumLib.jase; import java.util.List; import java.util.Set; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class SwitchTo { public static void main(String[]args) throws InterruptedException{ WebDriver driver; System.setProperty("webdriver.chrome.driver","D:/selenium-java-3.5.3/chromedriver.exe"); //chromedriver驅動的本地存放路徑
driver = new ChromeDriver();
/*多窗口切換————測試整體流程:打開cnblogs精華頁,依次進入前兩篇精華博文,再分別定位到這兩篇博文的“評論區”(為維持環境和諧,暫不進行評論提交操作)*/ driver.get("https://passport.cnblogs.com/user/signin?ReturnUrl=https%3A%2F%2Fwww.cnblogs.com%2F"); driver.findElement(By.id("input1")).sendKeys("天使未必在場"); //博客園登陸名 driver.findElement(By.id("input2")).sendKeys("***"); //博客園登錄密碼
driver.findElement(By.id("signin")).click(); Thread.sleep(2000); //需要等待幾s;
driver.get("https://www.cnblogs.com/pick/"); //跳轉到"精華"頁面;
String JHWindowHandle = driver.getWindowHandle(); //獲取“精華”頁面的窗口句柄
System.out.println("JHWindowHandle :"+JHWindowHandle); //依次打開前兩篇精華博文;
List<WebElement> elements = driver.findElements(By.className("titlelnk")); //獲取所有的精華博文;
for(int i=0; i < 2;++i) //控制打開博文的個數
{ elements.get(i).click(); //打開第【i+1】篇博文;
Thread.sleep(2000); } //對上述打開的兩篇博文輸入“評論”但不提交評論;
Set<String> Set = driver.getWindowHandles(); //獲取所有已經打開的窗口句柄;會獲取到三個=精華主頁+2篇博文;
int size = Set.size(); //獲取打開窗口的個數
int i = 0; System.out.println("該測試代碼打開的窗口個數: "+size); for (String WindowHandles : Set) { System.out.println("WindowHandle["+i+"] = "+WindowHandles); driver.switchTo().window(WindowHandles); if(!WindowHandles.equals(JHWindowHandle)) //非精華主頁,則是兩篇博文中的其中一篇,可以在評論區進行“評論”;
{ System.out.println("CurrentUrl:"+driver.getCurrentUrl()); driver.findElement(By.id("tbCommentBody")).sendKeys("Test————SwitchTo()方法"); //僅輸入不提交; //Thread.sleep(2000);
} ++i; } System.out.println("end selenium"); //driver.close();
} }
