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

前言

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

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

  • Contains
  • Sibling

Contains函數

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

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

"//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函數進行了說明和代碼演示,對於其他的函數建議大家自己寫代碼去實踐,理解其原理,將會更有利於後續的自動化測試實踐。

推薦閱讀:

python selenium 如何查看網頁的源代碼 ?
selenium中如何模擬頁面滾動?
Pycharm—FileNotFoundError: [WinError 2] 系統找不到指定的文件?
Selenium學習之Xpath:從工具到脫離工具

TAG:Selenium | 自動化測試 | 軟體測試 |