《手把手教你》系列基礎篇(五)-java+ selenium自動化測試- 建立首個自動化指令碼(詳細教程)

巨集哥發表於2021-07-02

1.簡介

 前面幾篇巨集哥介紹了兩種(java和maven)環境搭建和三大瀏覽器的啟動方法,這篇文章巨集哥將要介紹第一個自動化測試指令碼。前邊環境都搭建成功了,瀏覽器也驅動成功了,那麼我們不著急學習其他內容,首先巨集哥搭建好的環境中建立首個完整的自動化測試指令碼,讓小夥伴或者童鞋們提前感受感受,也是為了激起大家的學習興趣。

巨集哥的個人經驗是:自動化指令碼編寫比較容易,最大的困難去如何去寫測試斷言。自動化測試,最重要的還是落在測試上面,而不是自動化,自動化只是手段。斷言的寫法,就考驗出一個測試工程師是否考慮全面,體現出你的用例編寫水平。

2.測試用例

很多童鞋或者小夥伴們可能會有這樣有個誤區:自動化測試是不需要設計測試用例的。其實不然它也是需要設計測試用例,然後根據用例進行指令碼的編寫和斷言,只不過是把用例以程式碼的形式體現出來,而機器恰好可以識別程式碼,將程式碼跑起來,其實就是在執行你的用例,只不過是由機器幫你自動執行。好了廢話少說開始說說巨集哥今天要做的測試是:開啟百度,輸入selenium搜尋,驗證開啟連結有沒有Selenium官網連結。

測試用例:開啟百度首頁,搜尋Selenium,然後檢查搜尋列表,有沒有Selenium官網連結。

2.1分析

我們輸入了url,然後開啟一個頁面,如果判斷這個頁面是不是我們提前知道的頁面呢。

1. 獲取當前url是不是和輸入的一致,假如連結沒有發生重定向。

2. 獲取當前頁面title,是不是我們期待的結果。

3. 在頁面元素body找一個特徵元素,這個特徵元素能夠代表是該網站。

       我想,也大概只有上面三點依據可以判斷我們訪問的網站對不對。第一點,有時候不靠譜,不知道你們是否聽說過盜鏈,就是輸入一個網站URL,顯示的內容是別人的網站,而不是你測試的網站。甚至有連結的重定向出現。第二點,還是比較考慮,title這個值是網站前端開發同學寫入的,基本上可以代表是你要開啟的網站。第三點,有點難找這樣的特徵元素,而且有時候找到了也不一定是正確的。下面的程式碼就用頁面的title來作為我們判斷的依據。

2.2步驟

1.啟動瀏覽器

2.開啟百度首頁:http://www.baidu.com

3.判斷這個頁面是不是我們提前知道的頁面

4.定位搜尋輸入框,記錄下輸入框元素的xpath表示式://*[@id='kw']

5.定位搜尋提交按鈕(百度一下),獲取xpath表示式://*[@id='su']

6.在搜尋輸入框輸入:Selenium,點百度一下這個按鈕

7.在搜尋結果列表去判斷是否存在Selenium官網這個連結

8.退出瀏覽器,結束測試

2.3程式碼設計

1.根據步驟進行測試指令碼的編寫。lessons->new->class,命名為:FirstScript。開始編寫指令碼。如下圖所示:

2.4參考程式碼

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年6月24日
 */
public class FirstScript {
    
    public static void main(String[] args) {
        
        System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");  
        
         WebDriver driver = new ChromeDriver();  
            
         driver.manage().window().maximize();  
             
         driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);     
        
         driver.get("https://www.baidu.com");  //位址列輸入百度地址
         
         //判斷title是不是 百度一下,你就知道
         
         try{
             String baidu_title = "百度一下,你就知道";
             assert baidu_title == driver.getTitle();
             System.out.println("Test Pass");
             
         }catch(Exception e){
             e.printStackTrace();
         }
         
         driver.findElement(By.id("kw")).sendKeys("Selenium");//搜尋輸入框輸入Selenium
       
         driver.findElement(By.id("su")).click();//點選百度一下按鈕
         
         //設定隱性等待時間  
         driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);  
         
         //這裡通過元素XPath表示式來確定該元素顯示在結果列表,從而判斷Selenium官網這個連結顯示在結果列表。
         
         WebElement ele_string=driver.findElement(By.xpath("//*[@id='1']/h3/a[1]"));
         
         
         String ele_string1 = ele_string.getText();
         
         System.out.println(ele_string1);
         
         try{
         
             if(ele_string1.equals("Selenium automates browsers. That's it!")){
             
                 System.out.println("Testing is successful!");
                
             }
         }catch(Exception e){
             e.printStackTrace();
         }
              
         //關閉並退出瀏覽器  
         driver.quit();  
    }

}

       Java中有一個方法叫assert,中文意思叫斷言,assert後面跟著的是一個表示式,表示式的值是布林型。上面的例子就是,當判斷表示式值是true,就列印Tess Pass。這裡可以看到,我把斷言部分程式碼放在try cathc語句中。編寫指令碼或者編寫程式碼要養成一個好習慣,習慣主動去捕獲異常,並處理異常。這裡我們自動化指令碼,基本上沒有需要去處理異常,一般選擇直接列印出異常資訊就可以。
       到這裡,Selenium WebDriver基礎篇就結束了,下面的文章,主要是介紹WebDriver的一些常見介面或者方法的實際使用,儘量多介紹一些Selenium方法,為後面的方法封裝和框架設計做鋪墊。

2.5執行程式碼

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

2.電腦端的瀏覽器,如下小視訊所示:

 

3.小結

3.1equals和==的區別

巨集哥這裡簡單的說一下,更詳細的你可以百度查一下。關於判斷兩個字串是否相等的問題。在程式設計中,通常比較兩個字串是否相同的表示式是“==”,但在java中不能這麼寫。在java中,用的是equals();

例:A字串和B和字串比較:
if(A.equals(B)){

}
返回true 或false.

String 的equals 方法用於比較兩個字串是否相等。由於字串是物件型別,所以不能用簡單的“==”判斷。而使用equals比較兩個物件的內容是否相等。

注意:equals()比較的是物件的內容(區分字母的大小寫格式),但是如果使用“==”比較兩個物件時,比較的是兩個物件的記憶體地址,所以不相等。即使它們內容相等,但是不同物件的記憶體地址也是不相同的。

好了,首頁java+selenium的自動化測試指令碼就分享到這裡,感謝你耐心地閱讀!

 

相關文章