在Selenium Webdriver中使用XPath Contains、Sibling函數定位

來源:互聯網
上載者:User

標籤:實踐   span   text   新聞   提取   selenium   節點   data   寫代碼   

前言

在一般情況下,我們通過簡單的xpath即可定位到目標元素,但對於一些既沒id又沒name,而且其他屬性都是動態情況就很難通過簡單的方式進行定位了。

在這種情況下,我們需要使用xpath1.0內建的函數來進行定位,下面我們重點討論一下3個函數:

  • Contains
  • Sibling
Contains函數

通過contains函數,我們可以提取匹配特定文本的所有元素。

例如在百度首頁,我們使用contains定位包含“新聞”文本的元素。


baidu_news.png
"//div/a[contains(text(), 新聞)]"

在python selenium中使用xpath contains定位,程式碼片段如下:

driver.find_element_by_xpath("//div/a[contains(text(), 新聞)]")
sibling函數

通過sibling函數我們可以提取指定元素的所有同級元素,即擷取目標元素的所有兄弟節點。

例如通過剛才“新聞”節點來定位“hao123”節點。

"//div/following-sibling::a[contains(text(), 新聞)]"

python selenium程式碼片段為如下

driver.find_element_by_xpath(u"//div/a[contains(text(), ‘%s‘)]/following-sibling::*" % u"新聞")

通過剛才“新聞”節點來定位其所有的兄弟節點。

python selenium程式碼片段如下(注意這裡用的是find_==elements==_by_xpath):

driver.find_elements_by_xpath(u"//div/a[contains(text(), ‘%s‘)]/following-sibling::*" % u"新聞")

下面我們看一個完整的程式碼範例:

#_*_ coding:utf-8 _*___author__ = ‘苦葉子‘from selenium import webdriverimport sysreload(sys)sys.setdefaultencoding("utf-8")if __name__ == ‘__main__‘:    driver = webdriver.Ie()    driver.get(u"http://www.baidu.com")    # 定位 通過contains 定位包含“新聞”的元素    new_node = driver.find_element_by_xpath(    u"//div/a[contains(text(), ‘%s‘)]" % u"新聞")    print new_node.text    # 定位 “新聞”元素的兄弟節點“hao123”    hao123_node = driver.find_element_by_xpath(    u"//div/a[contains(text(), ‘%s‘)]/following-sibling::*" % u"新聞")    print hao123_node.text    # 定位 “新聞”元素的所有兄弟節點    all_node = driver.find_elements_by_xpath(    u"//div/a[contains(text(), ‘%s‘)]/following-sibling::*" % u"新聞")    for ee in all_node:        print ee.text    driver.quit()
xpath常用函數
  1. child 選取當前節點的所有子節點
  2. parent 選取當前節點的父節點
  3. descendant 選取當前節點的所有後代節點
  4. ancestor 選取當前節點的所有先輩節點
  5. descendant-or-self 選取當前節點的所有後代節點及當前節點本身
  6. ancestor-or-self 選取當前節點所有先輩節點及當前節點本身
  7. preceding-sibling 選取當前節點之前的所有同級節點
  8. following-sibling 選取當前節點之後的所有同級節點
  9. preceding 選取當前節點的開始標籤之前的所有節點
  10. following 選去當前節點的開始標籤之後的所有節點
  11. self 選取當前節點
  12. attribute 選取當前節點的所有屬性
  13. namespace 選取當前節點的所有命名空間節點
總結

在本文中對xpath常用的contains、sibling函數進行了說明和代碼示範,對於其他的函數建議大家自己寫代碼去實踐,理解其原理,將會更有利於後續的自動化測試實踐。

在Selenium Webdriver中使用XPath Contains、Sibling函數定位

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.