多窗口切換
有時候需要在不同的窗口切換,從而操作不同的窗口上的元素。在selenium1.0 中這個問題比較難處理。
但WebDriver 提供了switcTo.window()方法可以切換到任意的窗口。
這里以百度首頁與注冊頁為例,演示在不同窗口切換。
package com.mypro.jase; import java.util.Set; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class windows { public static void main(String[] arge) throws InterruptedException{ WebDriver driver = new ChromeDriver(); driver.get("http://www.baidu.com"); //獲得當前窗口句柄 String sreach_handle = driver.getWindowHandle(); //打開百度注冊窗口 System.out.println(sreach_handle); driver.findElement(By.linkText("登錄")).click(); Thread.sleep(3000); driver.findElement(By.linkText("立即注冊")).click(); //獲得所有窗口句柄 Set<String> handles = driver.getWindowHandles(); //判斷是否為注冊窗口,並操作注冊窗口上的元素 for(String handle : handles){ if (handle.equals(sreach_handle)==false){ //切換到注冊頁面 driver.switchTo().window(handle); System.out.println("now register window!"); Thread.sleep(2000); driver.findElement(By.name("account")).clear(); driver.findElement(By.name("account")).sendKeys("username"); driver.findElement(By.name("password")).sendKeys("password"); Thread.sleep(2000); //...... //關閉當前窗口 driver.close(); } } //判斷是否為百度首頁,並操作首頁上的元素 for(String handle : handles){ if (handle.equals(sreach_handle)){ //切換到注冊頁面 driver.switchTo().window(handle); Thread.sleep(2000); driver.findElement(By.className("close-btn")).click(); System.out.println("now baidu sreach page!"); driver.findElement(By.id("kw")).sendKeys("webdriver"); driver.findElement(By.id("su")).click(); Thread.sleep(2000); } } driver.quit(); } }
整個腳本的處理過程:首先打開百度首頁,通過getWindowHandle()獲得當前窗口的句柄,並給變
量sreach_handle。接着打開登錄彈窗,在登錄窗口上點擊“立即注冊”從而打開新的注冊窗口。通過
getWindowHandles()獲得當前打開的所窗口的句柄,賦值給變量handles。
第一個循環遍歷handles,如果handle 不等於sreach_handle,那么一定是注冊窗口,因為腳本執行只
打開的兩個窗口。所以,通過switchTo().window()切換到注冊頁進行注冊操作。第二個循環類似,不
過這一次判斷如果handle 等於sreach_handle,那么切換到百度搜索頁,關閉之前打開的登錄彈窗,然后時
行搜索操作。
在本例中所有用到的新方法:
getWindowHandle() 獲得當前窗口句柄
getWindowHandles() 返回的所有窗口的句柄到當前會話
switchTo().window() 用於切換到相應的窗口,與上一節的switchTo().frame()是類似,前者
用於不同窗口的切換,后者用於不同表單之間的切換。