《手把手教你》系列技巧篇(九)-java+ selenium自動化測試-元素定位大法之By name(詳細教程)

巨集哥 發表於 2021-07-23
Java 自動化測試

1.簡介

上一篇巨集哥已經介紹了通過id來定位元素,今天繼續介紹其他剩下的七種定位方法中的通過name來定位元素。本文來介紹Webdriver中元素定位方法之By name,顧名思義,就是我們想要定位的目標元素節點上,有一個name ="value"的屬性,這樣我們就可以通過name的value直接去找到這個元素。巨集哥還是用百度首頁搜尋輸入和點選提交來演示,由於搜尋輸入文字框有name屬性,而點選提交沒有name屬性,所以巨集哥這裡只有一個元素定位採用了By name來定位。

2.常用定位方法(8種)

(1)id
(2)name(今天講解)
(3)class name
(4)tag name
(5)link text
(6)partial link text
(7)xpath
(8)css selector

3.自動測試實戰:百度搜尋:北京巨集哥

3.1.知識點

Selenium定位web元素的方法
瀏覽器除錯工具使用

3.2.步驟

1) 人工走一遍流程,對自動化的流程心中有數
2) 按步驟拆分,然後對每一個小步驟編寫自動化指令碼
3) 將所有步驟合起來,多次執行,測試指令碼

3.3開啟百度

#開啟網址
driver.get("http://wwww.baidu.com");

3.4.輸入搜尋內容:北京巨集哥

1)在chrome介面,按F12快捷鍵,彈出chrome的除錯工具
2)找到輸入框的name,然後輸入:北京巨集哥
3)找到百度一下按鈕的id,然後點選一下

根據name定位元素

//By name 定位
WebElement wid = driver.findElement(By.name( "wd" ));
wid.sendKeys("北京巨集哥");
driver.findElement(By.id( "su" )).click();

3.5.程式碼設計

通過主要步驟把程式碼都設計好了,巨集哥只需要將其串起來,除錯指令碼即可。如下圖所示:

《手把手教你》系列技巧篇(九)-java+ selenium自動化測試-元素定位大法之By name(詳細教程)

3.6參考程式碼

/**
 * 
 */
package lessons;

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

/**
 * @author 北京-巨集哥
 *
 * 2021年7月14日
 */
public class ByName {
    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");
        
        //By name 定位
        WebElement wid = driver.findElement(By.name( "wd" ));
        wid.sendKeys("北京巨集哥");
        driver.findElement(By.id( "su" )).click();
        //定位到文字,將文字高亮顯示
        //建立一個JavascriptExecutor物件
        JavascriptExecutor js =(JavascriptExecutor)driver;
 
        //新聞文字高亮顯示顏色
        js.executeScript ( "arguments[0].setAttribute('style', arguments[1]);",wid,"background: orange; border: 2px solid red;");
 
        Thread.sleep ( 2000 );
 
        driver.quit();
    }
}

3.7執行程式碼

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

《手把手教你》系列技巧篇(九)-java+ selenium自動化測試-元素定位大法之By name(詳細教程)

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

4.小結

 好了,今天到這裡通過name定位就介紹完了,其實很簡單,就是找元素的name,一般來說name不都是唯一的,那就需要換其他的定位方法了,當然了特殊的另說。一般都是絕大多數,特殊是個例,也就是我們常說的另類,如果目標元素節點有這個name屬性,我們就採用By name,如果沒有,就換成其他方法,例如id,例如XPath,一般XPath是萬能的。感謝你耐心的閱讀。

5.擴充

5.1如何去查詢findElement介面的原始碼

前面有一篇文章介紹了Eclipse上如何檢視Selenium原始碼。其實前面文章介紹不夠完整,只是介紹瞭如何檢視Selenium相關介面或者方法的宣告,更多的是介面文件形式,讀了之後,你可以知道哪些方法有哪些作用。如果要看真正的java原始碼,今天巨集哥在這裡給你擴充一下就可以滿足你的要求。

1. 如何檢視某一個介面的實現程式碼。

在測試程式碼中的driver.findElement,通過前面介紹的方法,進入到WebDriver.java這個檔案,搜尋找到 findElement()這個介面,然後按照如下圖的方法進入實現程式碼的檔案。如下圖所示:

《手把手教你》系列技巧篇(九)-java+ selenium自動化測試-元素定位大法之By name(詳細教程)

open declaration:是開啟該方法的介面檔案(一般沒實在意義,只是簡單一句);

open implementation:是開啟具體實現該方法的類檔案(具體邏輯的處理地方,方法的主要實現的地方);

open super implementation:是開啟實現該方法的類檔案的父檔案(幾乎沒人用這個)。

open return Type:是開啟該方法的返回型別(檢視該方法的返回型別)。

2.點選open implementation,進入如下圖所示:

《手把手教你》系列技巧篇(九)-java+ selenium自動化測試-元素定位大法之By name(詳細教程)

如果你還想看看By這個類如何實現的,你繼續Ctrl,然後滑鼠懸停在By 這個單詞,選擇進入原始碼。

《手把手教你》系列技巧篇(九)-java+ selenium自動化測試-元素定位大法之By name(詳細教程)

這裡我們選擇檢視ByName這個方法。如下圖所示:

《手把手教你》系列技巧篇(九)-java+ selenium自動化測試-元素定位大法之By name(詳細教程)