Selenium4自動化測試4--元素定位By.XPATH,元素定位最佳順序

万笑佛發表於2024-05-10

7-透過xpath定位,By.XPATH

xpath是什麼?XPath 是一門在 XML 文件中查詢資訊的語言xml是什麼?XML(可擴充套件標記語言),主要用於傳輸資料為什麼可以使用xpath定位html?

XPath(XML路徑語言)是一種用於在XML文件中定位元素的語言,它可以用於定位HTML文件中的元素。儘管XML和HTML是兩種不同的標記語言,但HTML文件實際上可以視為XML文件的一種特定形式。

HTML文件的結構和標籤巢狀遵循XML的基本規則,因此XPath可以有效地用於在HTML文件中定位元素。XPath透過使用元素的標籤名、屬性、層級關係等來指定元素的位置,從而實現定位。

XPath定位HTML元素的基本原則是,將HTML文件視為XML文件,並使用XPath表示式來描述元素的位置關係。XPath表示式可以使用標籤名、屬性、父子關係、索引等來選擇特定的元素或元素集合。

Xpath可以透過相對路徑與絕對路徑去定位元素,絕對路徑從 HTML 根節點開始算,相對路徑從任意節點開始。

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
# 指定瀏覽器的位置,解決瀏覽器驅動和瀏覽器版本不匹配的問題
chrome_location = r'D:\pythonProject2023\SeleniumFirst\chrome-win64\chrome.exe'
options = webdriver.ChromeOptions()
options.binary_location = chrome_location
driver = webdriver.Chrome(options=options)
driver.get('https://www.baidu.com')
# 絕對路徑定位 定位百度首頁的新聞
driver.find_element(By.XPATH, '/html/body/div/div/div[3]/a').click()

#相對路徑定位
# 使用id屬性定位
driver.get('https://www.baidu.com')
driver.find_element(By.XPATH, '//input[@id="kw"]').send_keys("萬笑佛部落格園").click()

# 使用class屬性定位
driver.get('https://www.baidu.com')
# class中間有空格,需要全部寫上
driver.find_element(By.XPATH, '//a[@class="mnav c-font-normal c-color-t"]').send_keys("萬笑佛部落格園").click()

# 根據name屬性定位
driver.get('https://www.baidu.com')
driver.find_element(By.XPATH, '//input[@name="wd"]').send_keys("萬笑佛部落格園").click()

# 多個屬性組合定位 支援and or
driver.get('https://www.baidu.com')
driver.find_element(By.XPATH, '//input[@name="wd" and @class="s_ipt"]').send_keys("萬笑佛部落格園").click()

# 多組資料使用下標定位
driver.get('https://www.baidu.com')
# 定位百度首頁地圖
driver.find_element(By.XPATH, '//div[@id="s-top-left"]/a[3]').send_keys("萬笑佛部落格園").click()

# 由子元素定位父元素
driver.get('https://www.baidu.com')
# 定位輸入框的父元素
driver.find_element(By.XPATH, '//input[@id="kw"]/..')

# 根據文字內容定位
driver.get('https://www.baidu.com')
# 定位百度首頁網盤
driver.find_element(By.XPATH, '//a[contains(text(),"網盤")]')

# 其它定位方式,軸定位
driver.get('https://www.baidu.com')
# 最後一個子元素,last()
driver.find_element(By.XPATH, '//a[@class="mnav c-font-normal c-color-t"][last()]')

# 動態ID
#https://element.eleme.cn/#/zh-CN/component/cascader
driver.find_element(By.XPATH, '//span[text() = "預設 click 觸發子選單"]/following-sibling::div/div/input')




time.sleep(3)

四、元素定位最佳順序

1-ID(唯一標識):如果元素具有唯一的ID屬性,優先使用ID進行定位,因為它是最快和最可靠的定位方式。

2-CSS選擇器:如果元素沒有唯一的ID,可以考慮使用CSS選擇器進行定位。CSS選擇器具有靈活的語法,並且在效能上通常比XPath更高效。

3-類名(class):如果元素沒有唯一的ID或合適的CSS選擇器,可以使用元素的類名進行定位。儘量選擇具有明確含義的類名,並避免選擇過於通用的類名。

4-Name屬性:如果元素具有唯一的name屬性,可以使用name屬性進行定位。但要注意,name屬性並不是所有元素都具有的,所以不是一種通用的定位方式。

5-XPath:如果前面的方式都無法定位元素,可以使用XPath進行定位。XPath提供了強大的定位功能,但在效能上相對較低,因為XPath需要遍歷整個文件,直到找到匹配的元素。暫無效能對比資料,我覺得好用就用,及時行樂。

6-標籤名(TagName):如果元素無法使用上述方式進行定位,可以考慮使用標籤名進行定位。但要注意,標籤名定位方式通常會返回多個匹配的元素,需要結合其他條件來縮小範圍。

元素定位建議

1-在定位列表的元素時,儘量根據文字資訊定位而不是下標(比如百度首頁的左上角,可能順序會打亂,後臺配置)

2-相對定位時,儘量選擇不易改變的元素作為錨點,比如擁有id的元素或者一個目錄。比如後臺管理系統中的主選單,比如H5頁面的tab

3-如果關係好,可以讓開發多加一些id,不要勉強。現在的前端開發都用的框架,html,css,js等都是由框架定義的了。

相關文章