WebDriver--定位元素的8種方式


在UI層面的自動化測試開發中,元素的定位與操作是基礎,也是經常遇到的困難所在。webdriver提供了8種定位:

1. id定位:find_element_by_id("id值");id屬性是唯一的

1 driver.find_element_by_id("loginName").clear()#用戶名輸入框的id屬性 2 driver.find_element_by_id("loginName").send_keys("admin") 3 driver.find_element_by_id("pwdTip").send_keys(Keys.TAB)#密碼輸入框的id屬性 4 driver.find_element_by_id("pwdTip").send_keys("111111")

2. name定位:元素的名稱,find_element_by_name("name值");name屬性值在當前頁面可以不唯一

1 driver.find_elements_by_name("PeriodName")[1].click()#選擇學段:初中
2 driver.find_elements_by_name("SubjectName")[0].click()#選擇學科:語文

  find_elements_by_name("PeriodName")是因為當前頁面有一組radiobutton的name值是PeriodName,所以可以用定位一組元素的方法findElements,定位出來的是結果一個list

3. class定位:元素的類名,find_element_by_class_name("class值")

driver.find_elements_by_class_name("u-btn-levred")[0].click()#選擇年級:七年級

4. tag定位:頁面html文檔下的各種標簽,find_element_by_tag_name("input");

tag往往用來定義一類功能,所以通過tag識別某個元素的概率很低。任意打開一個頁面,都會發現大量的<div>、<input>、<a>等tag,所以tag name定位很少用

5. link定位:專門用來定位文本鏈接,find_element_by_link_name("text");

driver.find_element_by_link_text(u"退出").click()#頁面右上方的一些個人操作,比如退出、個人中心、消息通知等

6. partial link定位:是對link定位的一種補充,當鏈接上的文本內容比較長的時候,可以取文本的一部分進行定位,當然這部分可以唯一地標識這個鏈接

※注:以上的方式稍有局限,且經常頁面沒有id,name這些屬性值,class name重復性較高,link定位有針對性,所以Xpath與Css定位更靈活些。

7. XPath定位:find_element_by_xpath("");有多種定位策略,用FirePath插件自動生成的涵蓋以下幾種方式

  1)絕對路徑定位:對於沒有id,name、classname不好定位的,這也是我最常用的,因為可以通過Firefox的FirePath插件可以方便的獲取到xpath值

  2)利用元素屬性定位:

  find_element_by_xpath(".//*[@id='Title']"),這里是用的id,也可以用元素其他能夠唯一標識的屬性,不局限於id、name、class這些;*代表的是標簽名,不指定時就可以用*代替

  3)層級與屬性結合:下圖中就是這種

  4)使用邏輯運算符

1 driver.find_element_by_xpath(".//*[@id='divword']/input[7]").click()#登錄
2 driver.find_element_by_xpath("html/body/div[4]/div/div[2]/div/div[3]/a[1]").click()#個人頁面的發布課程操作

8. CSS定位(薄弱,用的很少,但很強大,比xpath簡潔靈活):使用選擇器來為頁面元素綁定屬性,可以靈活地選擇控件的任意屬性;find_element_by_css_selector("");同樣也可以用FirePATH生成css喲!

  1)通過class屬性定位:點號(".")表示通過class屬性定位

1 <input class="u-btn mart5" type="submit" onclick="return User.check()" value="登錄">
2 driver.find_element_by_css_selector(".u-btn.mart5").click()

  2)通過id屬性定位:("#")表示通過id定位元素

driver.find_element_by_css_selector("#loginName")

  3)通過其他屬性定位:("[]"),中括號里的屬性可以唯一標識這個元素就可以;屬性的值可以加引號,也可以不加

1 <input class="u-btn mart5" type="submit" onclick="return User.check()" value="登錄">
2 driver.find_element_by_css_selector("[type=submit]").click()

  4)組合定位

 

平時使用生成的xpath,id,name,classname這些比較多,今天根據最近這段時間的實踐,並參照書上整理了下,發現原來XPath和Css下還有這么多方式,順便拿最近一些代碼試驗了下,有些簡單的css定位能夠成功,有的Firepath生成的並不可用,一些組合定位還需要再研究,是有些難度的。最后記錄一種定位方式,更接近底層實現方式的定位,But書上說webdriver更推薦前面那些寫法,為毛捏?

9. 用By定位元素

  除find_element_by_***這種方式,還有另一套寫法,也就是統一調用find_element()方法,兩個參數,第一個參數是定位的類型,由By提供;第二個參數是定位的具體值

from selenium.webdriver.common.by import By #使用By這種定位前要將By類導入 find_element(By.ID,"loginName") find_element(By.NAME,"SubjectName") find_element(By.CLASS_NAME,"u-btn-levred") find_element(By.TAG_NAME,"input") find_element(By.LINK_TEXT,"退出") find_element(By.PARTIAL_LINK_TEXT,"退") find_element(By.XPATH,".//*[@id='Title") find_element(By.CSS_SELECTOR,"[type=submit]")

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM