Selenium3自動化測試【18】XPath定位元素(1)

XPath即爲XML路徑語言(XML Path Language),它是一種用來肯定XML文檔中某部分位置的語言。通俗一點講就是經過元素的路徑來查找到這個元素的,至關於經過定位一個對象的座標,來找到這個對象。

Selenium WebDriver支持使用XPath表達式來定位元素。當發現經過ID、name或class屬性值沒法定位元素時,能夠嘗試使用XPath的方式。經過XPath能夠靈活的應用絕對或相對路徑來定位元素。
1. 經過絕對路徑定位
XPath表達式表示從html代碼的最外層逐層查找,最後定位到按鈕節點。若是這樣很差理解,能夠舉個生活中的例子,好比你的戶口所在地是XX省XX市XX區XX號。這相對於不熟悉你的人來講,經過這個地方就能夠查找到你。
仍以bing首頁爲例。藉助FireFox瀏覽器的前端工具Developer Tools工具。從最頂層<html>-><body>->… …-><input>標籤,拼接對應元素的絕對路徑,如圖示。
Selenium3自動化測試【18】XPath定位元素(1)html

find_element_by_xpath方法使用XPath來定位元素。XPath主要用標籤名的層級來定位元素的絕對路徑,其中最外層html,而後在body內一級一級往下查找想找的元素。若是某個層級由多個相同的標籤,就按先後順序肯定是第幾個,例如input[1]表示當前層級的第1個input標籤。
藉助FireFox瀏覽器的前端工具Developer Tools工具,能夠拼接出輸入框與搜索按鈕兩個元素的絕對路徑。
搜索框:/html/body/table/tbody/tr/td/div/div[2]/div[3]/form/div/input[1]
搜索按鈕:/html/body/table/tbody/tr/td/div/div[2]/div[3]/form/div/div[1]/input
要操做Bing搜索頁。
 經過XPath找到搜索框與搜索按鈕元素;
 經過鍵盤輸入檢索的關鍵字;
 用鼠標單擊搜索按鈕;
 提交搜索請求。
Selenium的完整代碼以下:前端

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get("http://cn.bing.com/")

driver.find_element_by_xpath("/html/body/table/tbody/tr/td/div/div[2]/div[3]/form/div/input[1]").send_keys("bella")   #搜素框
driver.find_element_by_xpath("/html/body/table/tbody/tr/td/div/div[2]/div[3]/form/div/div[1]/input").click()          #搜索按鈕

sleep(3)
driver.quit()

藉助Chrome瀏覽器的開發者工具可以快速的得到對應元素Xpath的絕對路徑。
在Chrome瀏覽器中打開bing。在Chrome菜單中選擇 【更多工具】 >【 開發者工具】(經過F12能夠調用)。
經過選擇器,選中某元素(如搜索框元素),右鍵單擊選擇copy,而後單擊copy full XPath。就將該元素Xpath(搜索框元素)的絕對路徑複製下來,而後直接粘貼到代碼中使用便可,(/html/body/table/tbody/tr/td/div/div[2]/div[3]/form/div/input[1])如圖所示。
Selenium3自動化測試【18】XPath定位元素(1)web

注:
經過XPath定位元素過程當中,不要一味迷信使用FireFox的開發者工具,記得Seleium也是支持Chrome瀏覽器的。要很好的藉助FireFox瀏覽器與Chrome瀏覽器二者的開發者工具,綜合應用兩款瀏覽器的前端開發者工具,來得到某元素的XPath。
爲了不人工形成的錯誤,儘可能不要本身拼寫絕對路徑,避免拼寫路徑錯誤的發生。api

2. 經過元素屬性定位
XPath定位元素除了使用絕對路徑外,也可使用元素的某個屬性值來定位。一樣以bing首頁爲例。
XPath經過元素的某個屬性值來定位元素,就無需手動拼寫了,能夠藉助FireFox瀏覽器與Chrome瀏覽器二者的開發者工具完成。
藉助FireFox瀏覽器開發者工具得到搜索框元素XPath的值。如圖所示,FireFox Developer Tools中選中搜素框元素,而後右鍵單擊該元素的代碼區域,【複製】->【XPath】,就獲得該元素的某個屬性值的Xpath值(//*[@id="sb_form_q"]),如圖所示。
Selenium3自動化測試【18】XPath定位元素(1)瀏覽器

同理,得到搜索按鈕元素某個屬性值的Xpath(//[@id="sb_form_go"])。這裏//表示當前頁面某個目錄下,表示匹配全部標籤,[@id="sb_form_go"]與[@id="sb_form_q"]表示對應元素(搜索框元素與搜索按鈕元素)的id屬性值是"sb_form_go"與"sb_form_q"。
XPath經過元素的某個屬性定位元素的完整代碼以下:ide

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get("http://cn.bing.com/")

#簡化的xpath路徑
driver.find_element_by_xpath("//*[@id='sb_form_q']").send_keys("bella") 
driver.find_element_by_xpath("//*[@id='sb_form_go']").click()

sleep(3)
driver.quit()

經過Chrome瀏覽的開發者工具,得到元素XPath的某個屬性如圖所示。
Selenium3自動化測試【18】XPath定位元素(1)
XPath經過元素的某個屬性定位不單單侷限於ID,能夠經過人知道屬性值實現,如name、class等。
搜素框元素的html代碼。
<input class="b_searchbox" id="sb_form_q" name="q" title="輸入搜索詞" type="search" value="" maxlength="100" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" aria-controls="sw_as" aria-autocomplete="both" aria-owns="sw_as">
搜索按鈕元素的html代碼。
<input type="submit" class="b_searchboxSubmit" id="sb_form_go" tabindex="0" name="go">
此時就須要手動書寫經過兩個元素的name、class屬性實現XPath定位。下面分別經過name與class屬性值來定位。
經過元素的name屬性定位元素的完整代碼以下:工具

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get("http://cn.bing.com/")

# 利用元素屬性定位--name
driver.find_element_by_xpath("//input[@name='q']").send_keys("bella")
driver.find_element_by_xpath("//input[@name='go']").click()

sleep(3)
driver.quit()

這裏//表示當前頁面某個目錄下,input表示匹配input標籤的元素,[@name='q']與[@name='go']表示對應元素(搜索框元素與搜索按鈕元素)的name屬性值是"q"與"go"。
經過元素的class屬性定位元素的完整代碼以下:測試

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get("http://cn.bing.com/")

# 利用元素屬性定位--class
driver.find_element_by_xpath("//input[@class='b_searchbox']").send_keys("bella")
driver.find_element_by_xpath("//input[@class='b_searchboxSubmit']").click()

sleep(3)
driver.quit()

Selenium3自動化測試【18】XPath定位元素(1)


若是你覺的文章讀的不過癮,能夠查看詳細的視頻教程。
【2021】UI自動化測試:Selenium3自動化測試
https://edu.51cto.com/course/26488.htmlui

【測試全系列視頻課程】請點擊我哦.....
(https://edu.51cto.com/lecturer/968349.html)code

圖書京東、噹噹有售
京東:https://item.jd.com/12784287.html
噹噹:http://product.dangdang.com/29177828.html
Selenium3自動化測試【18】XPath定位元素(1)

相關文章
相關標籤/搜索