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.程式碼設計
通過主要步驟把程式碼都設計好了,巨集哥只需要將其串起來,除錯指令碼即可。如下圖所示:
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,控制檯輸出,如下圖所示:
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這個方法。如下圖所示: