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

BlaLeo發表於2021-06-03

層級與屬性結合定位

如果被定為的元素,無法通過自身屬性來唯一標識自己,此時可以考慮藉助上級元素來定位自己。舉生活中的例子,一個嬰兒剛出生,還沒有姓名與身份證號,此時給嬰兒進行檢查時往往會標註為“某某之女”。因為嬰兒的母親是確定的,找到母親也就找到了嬰兒。XPath的層級與屬性結合定位就是如此。
假設bing頁面的搜尋框與搜尋按鈕元素,無法通過自身屬性來定位。則可以藉助其上一級(父物件)元素來定位,前端程式碼如圖所示。

搜尋框元素的上一級是1個div標籤,該div標籤的clalss屬性等於b_searchboxForm,html程式碼如下:

<div class="b_searchboxForm" role="search" data-bm="15">
……
……
</div>

層級與屬性結合find_element_by_xpath("//div[@class='b_searchboxForm']/input")
搜尋按鈕元素的上一級也是1個div標籤,該div標籤的id屬性等於sb_go_par,該div的html程式碼如下:

<div id="sb_go_par" data-sbtip="搜尋網頁">
<input type="submit" class="b_searchboxSubmit" id="sb_form_go" tabindex="0" name="go">
</div>

層級與屬性結合find_element_by_xpath("//div[@id='sb_go_par']/input")
XPath通過層級與屬性結合定位元素的完整程式碼如下:

from selenium import webdriver
from time import sleep

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

# 通過層級與屬性的結合,定位元素
# 適用與某個元素其本身無法標識自己,需要通過其上一級來表示
driver.find_element_by_xpath("//div[@class='b_searchboxForm']/input").send_keys("bella")
driver.find_element_by_xpath("//div[@id='sb_go_par']/input").click()

sleep(1)
driver.quit()

多屬性結合定位

假設某元素無法通過單一屬性定位,如果該元素還有其他屬性,考慮多個屬性的組合來定位該元素。類似生活中的案例,假如你所在的專案小組中有兩個同事都叫王強,而他們的工號則不同,姓名+工號就能夠唯一的標記具體是那個同事。
假設bing頁面的搜尋框與搜尋按鈕元素,無法通過單個屬性來定位,則可以多個屬性結合來實現定位。
搜素框元素的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">

通過多屬性結合定位元素,需要通過“and”連線多個屬性。

find_element_by_xpath("//input[@id='sb_form_q' and @class='b_searchbox'] ")
find_element_by_xpath("//input[@id='sb_form_go' and @class='b_searchboxSubmit']")

XPath通過多屬性結合定位元素的完整程式碼如下:

from selenium import webdriver
from time import sleep

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

#如果一個屬性不能唯一標識某個元素,考慮多個屬性組合+使用邏輯運算子

driver.find_element_by_xpath("//input[@id='sb_form_q' and @class='b_searchbox'] ").send_keys("bella")
driver.find_element_by_xpath("//input[@id='sb_form_go' and @class='b_searchboxSubmit']").click()

sleep(3)
driver.quit()


如果你覺的文章讀的不過癮,可以檢視詳細的視訊教程。
【2021】UI自動化測試:Selenium3自動化測試
https://ke.qq.com/course/3172187?tuin=9c43f38e

【測試全系列視訊課程】請點選我哦.....

《全棧測試系列視訊》課程

地址:https://ke.qq.com/course/2525707?tuin=9c43f38e

圖書京東、噹噹有售

京東:https://item.jd.com/12784287.html
噹噹:http://product.dangdang.com/29177828.html)!

相關文章