《手把手教你》系列技巧篇(二十一)-java+ selenium自動化測試-瀏覽器視窗的控制程式碼(詳細教程)

巨集哥發表於2021-08-26

1.簡介

  今天本來就要分享和講解三大延時等待的,但是在寫作過程中發了問題,會用到這一個知識點,於是就提前介紹一下,以便後邊用到了可以更好的理解和掌握。本文就是要介紹如何獲得瀏覽器窗體的控制程式碼或者叫編號,為後面的driver例項在多個窗體之間切換做準備。

2.什麼是瀏覽器視窗控制程式碼?

先來解釋下什麼是控制程式碼,有時候瀏覽器的視窗控制程式碼,也叫windows id,英文單詞更好理解。你開啟了一個瀏覽器,你開一個tab,就生成了一個id,這個id直到你關閉這個tab才會消失。如果你在一個瀏覽器上開啟多個tab,那麼就有多個windows id,為什麼你關閉其中一個tab,但是不影響其他tab的顯示,就是這個id的作用。

3.實戰

廢話不說 ,直接進入主題進行例項講解。

3.1一個windows控制程式碼

我們先看看瀏覽器只開一個tab,也就是隻有一個windows控制程式碼的時候,列印出這個控制程式碼出來。

3.1.1程式碼設計

3.1.2參考程式碼
package lessons;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

/**
 * @author 北京-巨集哥
 *
 * 2021年8月19日
 */
public class GetWinId {
    
    public  static  void  main(String [] args) throws InterruptedException {
        
        System.setProperty("webdriver.gecko.driver", ".\\Tools\\chromedriver.exe"); //指定驅動路徑
 
        WebDriver driver = new ChromeDriver ();
        //最大化視窗  
        driver.manage().window().maximize();  
        //開啟百度首頁
        driver.get("http://wwww.baidu.com");
        
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        
        Thread.sleep(1000);
        //列印當前頁面控制程式碼
        System.out.println("列印結果"+driver.getWindowHandle());    
        
        driver.close();
    }
}
3.1.3執行程式碼

1.執行程式碼,右鍵Run AS->java Application,控制檯輸出,如下圖所示:

2.執行程式碼後電腦端的瀏覽器的動作,如下小視訊所示:

3.2兩個windows控制程式碼

接下來,看看有兩個tab,列印出兩個windows控制程式碼來,使用getWindowsHandles()方法。

3.2.1程式碼設計

3.2.2參考程式碼
package lessons;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

/**
 * @author 北京-巨集哥
 *
 * 2021年8月19日
 */
public class GetWinId {
    
    public  static  void  main(String [] args) throws InterruptedException {
        
        System.setProperty("webdriver.gecko.driver", ".\\Tools\\chromedriver.exe"); //指定驅動路徑
 
        WebDriver driver = new ChromeDriver ();
        //最大化視窗  
        driver.manage().window().maximize();  
        //開啟百度首頁
        driver.get("http://wwww.baidu.com");
        
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        
        Thread.sleep(1000);
        
        WebElement News  = driver.findElement(By.xpath("//div/a[text()='新聞']"));
        
        News.click();
        
        Thread.sleep(1000);
        
        //列印當前頁面控制程式碼
        System.out.println("列印結果"+driver.getWindowHandles());    
        
        driver.close();
    }
}
3.2.3執行程式碼

1.執行程式碼,右鍵Run AS->java Application,控制檯輸出,如下圖所示:

2.執行程式碼後電腦端的瀏覽器的動作,如下小視訊所示:

3.3大於兩個windows控制程式碼

接下來,看看大於兩個tab,列印出大於兩個windows控制程式碼來,使用getWindowsHandles()方法。

3.3.1程式碼設計

3.3.2參考程式碼
package lessons;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

/**
 * @author 北京-巨集哥
 *
 * 2021年8月19日
 */
public class GetWinId {
    
    public  static  void  main(String [] args) throws InterruptedException {
        
        System.setProperty("webdriver.gecko.driver", ".\\Tools\\chromedriver.exe"); //指定驅動路徑
 
        WebDriver driver = new ChromeDriver ();
        //最大化視窗  
        driver.manage().window().maximize();  
        //開啟百度首頁
        driver.get("http://wwww.baidu.com");
        
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        
        Thread.sleep(1000);
        //開啟新聞頁面
        WebElement News = driver.findElement(By.xpath("//div/a[text()='新聞']"));
        
        News.click();
        
        Thread.sleep(1000);
        //開啟地圖頁面
        WebElement Map = driver.findElement(By.xpath("//div/a[text()='地圖']"));
        
        Map.click();
        
        Thread.sleep(1000);
        //列印當前頁面控制程式碼
        System.out.println("列印結果"+driver.getWindowHandles());    
        
        driver.close();
    }
}
3.3.3執行程式碼

1.執行程式碼,右鍵Run AS->java Application,控制檯輸出,如下圖所示:

2.執行程式碼後電腦端的瀏覽器的動作,如下小視訊所示:

4.小結

在實際操作中,細心的小夥伴們或者童鞋們已經發現程式碼的邏輯一直都在百度首頁,也就是第一個開啟的頁面,所以在執行driver.close();時候只有百度首頁關閉了,其他頁面不受影響,不相信的小夥伴們可以在第一個或者第二個頁面定位到頁面的元素進行操作,程式碼會報錯告訴你找不到頁面元素。所以要想操作對應頁面的元素,我們就需要切換到對應視窗的控制程式碼即可。

巨集哥在後邊的實操中在斷言時候,就遇到相同的問題,需要進行控制程式碼切換進行斷言,這個巨集哥可能會單獨列一篇文章進行講解和分享的。

好了,今天時間也不早了,感謝你耐心地閱讀。早點休息吧!

相關文章