selenium:css_selector定位詳解(css selector和xpath的比較)


selenium使用css selector和xpath的比較

selenium提供的定位方式(常用)

  • ID
  • NAME
  • CLASS
  • CSS SELECTOR
  • XPATH
 

推薦的定位方式的優先級

  • 優先級最高:ID
  • 優先級其次:name
  • 優先級再次:CSS selector
  • 優先級再次:Xpath
 

針對css selector和xpath的優先級做一個簡單的說明

在項目中我們可能用的最多的是css或者xpath,那么針對這兩種,我們優先選擇css,原因在哪些?
  • 原因1:css是配合html來工作,它實現的原理是匹配對象的原理,而xpath是配合xml工作的,它實現的原理是遍歷的原理,所以兩者在設計上,css性能更優秀
  • 原因2:語言簡潔,明了,相對xpath
  • 原因3:前段開發主要是使用css,不使用xpath,所以在技術上面,我們可以獲得幫助的機會非常多
題外話:據說xpath和css現在基本沒有什么太大的區別了,css已經實現了大多數的xpath功能,只有個別功能沒有實現。具體的數據列證還需要找更多的數據進行填充。
 
 

定位元素的注意事項(划重點)

  • 找到待定位元素的唯一屬性
  • 如果該元素沒有唯一屬性,則先找到能被唯一定位到的父元素/子元素/相鄰元素,再使用“>”," ","+"等進行輔助定位。
  • 不要使用隨機唯一屬性定位
  • 最重要的是多跟研發溝通,盡量把關鍵元素加上ID或者name,並減少不合理的頁面元素,例如重復ID這樣的事情最好不要發生。

 

 

selenium之CSS定位匯總 

以百度首頁為例:

定位輸入框

 

一:單一屬性定位

1:type selector

driver.find_element_by_css_selector('input')

2:id 定位

driver.find_element_by_css_selector('#kw')

3:class 定位

driver.find_element_by_css_selector('.s_ipt')

4:其他屬性定位

driver.find_element_by_css_selector('[name='wd']')

driver.find_element_by_css_selector("[type='text']")

 

二:組合屬性定位

1:id組合屬性定位

driver.find_element_by_css_selector("input#kw")

2:class組合屬性定位

driver.find_element_by_css_selector("input.s_ipt")

3:其他屬性組合定位

driver.find_element_by_css_selector("input[name='wd']")

4:僅有屬性名,沒有值也可以

driver.find_element_by_css_selector("input[name]")

5:兩個其他屬性組合定位

driver.find_element_by_css_selector("[name='wd'][autocomplete='off']")

6:模糊匹配屬性值方法

以百度首頁點擊按鈕為例

1>屬性值由多個空格隔開,匹配其中一個值的方法

driver.find_element_by_css_selector("input[class~='btn']")

2>匹配屬性值為字符串開頭的方法

driver.find_element_by_css_selector("input[class^='btn']")

3>匹配屬性值字符串結尾的方法

driver.find_element_by_css_selector("input[class$='s_btn']")

 

4>匹配被-分割的屬性值的方法,如上圖的class

driver.find_element_by_css_selector("input[class|='s']")  #要求精確填寫的屬性值

 

三:層級定位

 

 1:E>F    E下面的F這個元素

driver.find_element_by_css_selector('from#form>span>input')#id是form的form下面的span下面的input

 

 

2:E:nth-child(n)  如上圖,

driver.find_element_by_css_selector('#u_sp > a:nth-child(1)')#id為u_sp的下面的第一個a標簽。

#實測,這個定位不到,但是方法是對的,- -

3:E:nth-last-child(n),如字面意思:倒數第幾個標簽

4:E:first-child,第一個標簽

5:E:last-child,最后一個標簽

6:E:only-child,唯一的標簽


免責聲明!

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



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