關於selenium的8種元素定位


selenium中有八種元素定位,分別是:id,name,class_name,tag_name,link_text、partial_link_text、xpath、css

簡單的定位可以用 id、name、class_name、tag_name等,如果遇到復雜的元素需要定位則要使用xpath、或者css定位
下面是每種定位的用法——拿百度來說

1、id——定位到百度的輸入框,可以看到百度的輸入框id是唯一的,具體可以看下圖

 

 在pycharm中,語句是:driver.find_element_by_id("kw").send_keys("selenium")

 send_keys 表示在輸入框中輸入文本

2、name——還是以百度輸入框為例,可以看出百度輸入框的name屬性也是唯一的 

 

在pycharm 中語句是:

driver.find_element_by_name("wd").send_keys("selenium")

3、class_name——“百度一下”按鈕,可以看出這個的class_name 是唯一的

 

在pycharm中的語句是:driver.find_element_by_class_name("bg s_btn").click()

4、tag_name——標簽名稱 

 

 這個方法很少用到,一般用xpath/css比較多

5、link_text——用來定位文本鏈接的
比如定位百度中的新聞:driver.find_element_by_link_text("新聞").click()
6、partial_link_text:和link_text 相似,唯一不同的是定位部分文本
如:點擊hao123——driver.find_element_by_partial_link_text("hao").click()

7、xpath
(1)用xpath對標簽內的屬性進行定位(id、name、class)
方法://標簽名[@屬性="屬性名"] 雙引號也可以用單引號表示
當某個元素的屬性不是唯一的時候,需要采用組合的方式定位:
"//標簽名[@屬性='屬性名' and @屬性='屬性名']"

(2)用text()方法定位
//標簽名[text()="XXXX"]

(3)模糊定位——contains()方法定位
//標簽名[contains(@屬性,"屬性值")]

(4)軸定位(下圖來自http://www.runoob.com/xpath/xpath-axes.html)
軸名稱 結果
ancestor 選取當前節點的所有先輩(父、祖父等)。
ancestor-or-self 選取當前節點的所有先輩(父、祖父等)以及當前節點本身。
attribute 選取當前節點的所有屬性。
child 選取當前節點的所有子元素。
descendant 選取當前節點的所有后代元素(子、孫等)。
descendant-or-self 選取當前節點的所有后代元素(子、孫等)以及當前節點本身。
following 選取文檔中當前節點的結束標簽之后的所有節點。
following-sibling 選取當前節點之后的所有兄弟節點
namespace 選取當前節點的所有命名空間節點。
parent 選取當前節點的父節點。
preceding 選取文檔中當前節點的開始標簽之前的所有節點。
preceding-sibling 選取當前節點之前的所有同級節點。
self 選取當前節點。

通過軸定位定位“百度一下”按鈕 首先定位到這個按鈕,可以看到這是個input標簽,input標簽的父元素是span標簽,span標簽的父元素是form標簽,那么我們可以從form標簽開始定位然后通過descendant來找到它的后代input
//form[@id='form']/descendant::input[@id='su']
 
         
         
        

通過following 來定位——following 表示標簽節點之后
//span[@id='s_kw_wrap']/following::input[@id='su']
//span[@id='s_kw_wrap']表示定位到id屬性為s_kw_wrap的<span>標簽,/following::input[@id='su']表示找到<span>結束標簽(即</span>)后的所有input標簽,然后通過[@id='su']精准定位到id屬性為'su'的<input>標簽

parent::可指定要查找的當前節點的直接父節點,例如,父節點是個div,即可寫成parent::div,如果要找的元素不是直接父元素,則不可使用parent,可使用ancestor,代表父輩、祖父輩等節點;

child::表示直接子節點元素

following-sibling只會標識出當前節點結束標簽之后的兄弟節點,而不包含其他子節點






 
        




免責聲明!

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



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