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