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,明白了吧。