selenium webdriver窗口切換(下)


多窗口切換
有時候需要在不同的窗口切換,從而操作不同的窗口上的元素。在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()是類似,前者
用於不同窗口的切換,后者用於不同表單之間的切換。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM