相信不少作web自動化測試的同窗都深有體會,其本質也就是經過操做頁面元素對象來模擬用戶操做行爲,那麼首先咱們先找到這些元素對象,而後才能進行一系列操做。css
那麼,咱們要先告訴自動化工具或者說代碼要操做那個元素,畢竟代碼和工具是沒法像人工同樣識別頁面上的元素的,那麼如何讓這些動做精準的做用到咱們想要做用的元素對象上呢?html
下面咱們就一塊兒來學習元素定位操做,固然若是懂一點JavaScript、HTML基礎的話上手會更快。web
用360瀏覽器打開博客園個人中心頁面,右鍵選擇審查元素,就能夠看到整個頁面的html代碼了瀏覽器
點擊框中左上角的箭頭圖標,移動鼠標到左面頁頭的歡迎你,Refain,就能夠自動定位到歡迎你,Refain位置處的HTML代碼了,查看到歡迎你,Refain的屬性,咱們能夠清楚的看到有id屬性。工具
Webdriver經過findElement方法來找到頁面的某個元素,使用的方法有id、linkText、partialLinkText、name、tagName、xpath、className、cssSelector這八種。下面咱們就這些定位方法逐一介紹。學習
以百度首頁搜索框爲例,HTML代碼以下:測試
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
從上面搜索框HTML代碼片斷中,發現有個id="kw"的屬性,咱們就能夠經過這個id定位到這個搜索框spa
WebElement element = driver.findElement(By.id("kw"));
小貼士:若是你英文好的話,細心點會發現,By是介詞,用的意思,下面的代碼意思就是用ID的方式查找Id爲kw的元素,當時我就是這麼學的,有點low,可是很好用code
同理,搜索框HTML代碼片斷中,發現有個name="wd"的屬性,咱們也能夠經過name屬性定位到這個搜索框htm
WebElement element = driver.findElement(By.name("wd"));
再細心點,你會發現有個className="s_ipt"的屬性,咱們天然也能夠經過className這個屬性定位到這個搜索框
WebElement element = driver.findElement(By.className("s_ipt"));
說明,常說的class屬性就是HTML代碼中className屬性,這點注意,別被人笑話了哦
屬性找的也差很少了,咱們天然也能夠用標籤(tag)去定位元素
WebElement element = driver.findElement(By.tagName("input"));
字面意思用超連接定位,通俗點就是精確查詢的超文本定位,下面用一段html代碼爲例
<a href="https://www.cnblogs.com/longronglang/" class="gray" target="_blank">https://www.cnblogs.com/longronglang/</a>
這就是一段超連接代碼,我就能夠經過超連接定位這個元素
WebElement element = driver.findElement(By.linkText("https://www.cnblogs.com/longronglang/"));
這個方法就是模糊查詢出來的超文本,好比一個網頁中的全部超連接,全部都包含Refain的
WebElement element = driver.findElement(By.partialLinkText("Refain"));
通常作自動化的人都很喜歡用的一種方式,還接着剛纔百度輸入框的例子,用xpath定位,關於xpath詳細定位操做能夠參考我以前的文章《selenium使用Xpath定位之完整篇》
WebElement element =driver.findElement(By.xpath("//input[@id='kw']"));
一樣這種定位方式也特別受歡迎,這回用css定位,關於css詳細的定位操做能夠參考我以前的文章《selenium之css定位小結》
WebElement element = driver.findElement(By.cssSelector(".s_ipt"));
在這些定位方法中,除開xpath和css,其它的定位方法都很容易理解和掌握如何使用,具體實際腳本開發過程當中使用哪一種方法,仍是看我的習慣,到此,關於selenium的元素定位操做就介紹完了,還請各位同窗多去學習、實踐!
原文出處:https://www.cnblogs.com/longronglang/p/11154521.html