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

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("//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.代碼設計

通過主要步驟把代碼都設計好了,宏哥只需要將其串起來,調試腳本即可。如下圖所示:

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("//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,控制台輸出,如下圖所示:

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()這個接口,然後按照如下圖的方法進入實現代碼的文件。如下圖所示:

open declaration:是打開該方法的接口文件(一般沒實在意義,只是簡單一句);

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

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

open return Type:是打開該方法的返回類型(查看該方法的返回類型)。

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

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

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