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

巨集哥發表於2021-07-28

1.簡介

 按巨集哥計劃,本文繼續介紹WebDriver關於元素定位大法,這篇介紹By ClassName。看到ID,NAME這些方法的講解,小夥伴們和童鞋們應該知道,要做好Web自動化測試,最好是需要了解一些前端的基本知識。有了前端知識,做元素定位會很輕鬆,同樣寫網路爬蟲也很有幫助,話題扯遠了,回到Selenium自動化測試。

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程式碼設計

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

3.2參考程式碼

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月21日
 */
public class ByClassName {
    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.className( "s_ipt" ));
        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 (5000);
 
        driver.quit();
    }
}

3.3執行程式碼

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

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

4.小結

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

5.擴充

有的小夥伴或者童鞋們,可能覺得今天學習瞭如何使用class name定位,就初生牛犢不怕虎的將”百度一下“的按鈕也使用class name來定位了,程式碼設計如下:

結果報錯了(Exception in thread "main" org.openqa.selenium.InvalidSelectorException: invalid selector: Compound class names not permitted),控制檯報錯如下圖所示:

電腦端的瀏覽器,電腦端瀏覽器百度輸入框裡輸入“北京巨集哥”,就卡住沒有反應,不會點選“百度一下”按鈕。如下小視訊所示:

原因分析:根據程式碼報錯和指令碼測試回放,發現在定義文字輸入框是沒有問題,但是在定位百度一下這個按鈕就出問題。報錯提示告訴了我們原因:無效的selector,不允許組合的class name。根本原因是這個className "bg s_btn_wr"有空格,所以,以後遇到classname有空格的,就換成別的定位元素方法。這裡解釋下selector的意思,有時候有些文章或說localtor,特別是Selenium for Python就會說localtor,localtor就像我們寄快遞的地址一樣。這裡localtor = By + 各種方法對應的值。By我們知道有8中方法,所有對應有八種值,這裡值就是錯誤資訊中提到的selector,明白了吧。

相關文章