Selenium_WebDriver_多窗口切換


摘要: 版權聲明:本文為博主原創文章,轉載請注明出處。


  在頁面操作過程中有時候點擊某個鏈接會彈出新的窗口,這時我們如果需要操作新打開的頁面,就需要將主機切換到新打開的窗口上再進行操作,比如博客園精華頁的精華博文,每點擊一篇就會打開一個瀏覽器窗口。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(); 
 } }

 


免責聲明!

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



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