看到標題,肯定知道,這一篇又是定位,因為我們做自動化測試,第一步就是定位元素,如果元素都定位不好,那么怎么實現代碼點點點?
Xpath
XPath , 全稱XML Path Language ,即XML 路徑語言,它是一門在XML 文檔中查找信息的語言。它最初是用來搜尋XML 文檔的,但是它同樣適用於HTML 文檔的搜索。XPath的選擇功能十分強大,它提供了非常簡明的路徑選擇表達式,另外,它還提供了超過100個內建函數,用於字符串、數值、時間的匹配以及節點、序列的處理等,幾乎所有我們想要定位的節點,都可以用XPath來選擇。
Xpath常用屬性
格式:
# XPath定位方法 driver.find_element_by_xpath('//*[@屬性=元素值]')
表達式 | 描述 |
nodename | 選取此節點的所有子節點 |
/ | 從當前節點選取直接子節點 |
// | 從當前節點選取子孫節點 |
. | 選取當前節點 |
.. | 選取當前節點的父節點 |
@ | 選取屬性 |
* | 通配符,選擇所有元素節點與元素名 |
@* | 選取所有屬性 |
[@屬性] | 選取具有給定屬性的所有元素 |
[@屬性=‘value’] | 選取給定屬性具有給定值的所有元素 |
通用方法定位
這里安靜還是以百度輸入框為例子
1、通過id屬性定位
# coding:utf-8 from selenium import webdriver driver = webdriver.Chrome()
# 通過id屬性定位 driver.get('https://www.baidu.com/')driver.find_element_by_xpath('//*[@id="kw"]').send_keys('測試-安靜博客園')
2、通過name屬性定位
# coding:utf-8 from selenium import webdriver driver = webdriver.Chrome() driver.get('https://www.baidu.com/') # 通過name屬性定位 driver.find_element_by_xpath('//*[@name="wd"]').send_keys('測試-安靜博客園')
3、通過class屬性定位
# coding:utf-8 from selenium import webdriver driver = webdriver.Chrome() driver.get('https://www.baidu.com/') # 通過class屬性定位 driver.find_element_by_xpath('//*[@class="s_ipt"]').send_keys('測試-安靜博客園')
4、通過text屬性定位
# coding:utf-8 from selenium import webdriver driver = webdriver.Chrome() driver.get('https://www.baidu.com/') # 通過text屬性定位 driver.find_element_by_xpath('//*[text()="新聞"]').click()
5、通過contains方法定位
contains屬於 屬性中包含XXX就可以進行匹配
# coding:utf-8 from selenium import webdriver driver = webdriver.Chrome() driver.get('https://www.baidu.com/') # 通過contains方法中的text屬性定位# driver.find_element_by_xpath('//*[contains(text(),"地圖")]').click() # 通過contains方法中的id屬性定位 driver.find_element_by_xpath('//*[contains(@id,"kw")]').send_keys('測試-安靜博客園')
6、通過標簽名進行定位
前面了解到XPath定位前面的*表示標簽,如果多個標簽的話,我們可以直接通過標簽進行匹配
# coding:utf-8 from selenium import webdriver driver = webdriver.Chrome() driver.get('https://www.baidu.com/') # 通過標簽名進行匹配 driver.find_element_by_xpath('//input[@id="kw"]').send_keys('測試-安靜博客園')
7、多個屬性進行匹配
前面大多數都是唯一表示的屬性,那么我們可能會遇到不是唯一標識的,那么我們可以通過多個屬性進行定位
# coding:utf-8 from selenium import webdriver driver = webdriver.Chrome() driver.get('https://www.baidu.com/') # 通過多個屬性進行定位 driver.find_element_by_xpath('//*[@id="kw" and @name="wd"]').send_keys('測試-安靜博客園')
8、通過父級或者爺爺級進行定位
在遇到元素無法定位的時候,我們可以用個定位元素的父級或者爺爺級別的進行定位
# coding:utf-8 from selenium import webdriver driver = webdriver.Chrome() driver.get('https://www.baidu.com/') # 通過上級進行定位 driver.find_element_by_xpath("//form[@id='form']/span[contains(@class,'s_ipt_wr')]/input").send_keys('測試-安靜博客園')
定位元素這個東西,只有多練,多寫,才能孰能生巧。定位方法很多種,大家可以自己看看哪一種適合自己。
如果安靜寫的對您有幫助,可以點個關注,不懂得地方或者寫錯的地方可以下方留言,持續更新中~