前言
說起元素定位,一定是學習自動化測試繞不開的第一道關,無論是web端的UI自動化還是移動端的自動化,在需要首先對元素進行定位才可以完成對元素的操作已達成測試目的,在Selenium中,可以使用find_element
(定位單個元素)或find_elements
(定位多個元素)方法來定位元素。
Selenium元素定位常用API
在工作中我們常用的元素定位API一共有8種,我們先來了解以下6種,xpath和css_selector我們在後面的文章中單獨學習
通過id定位
說明
當所定位的元素具有id
屬性時,我們可以使用by_id來定位該元素,id一般情況下在當前頁面中是唯一的。
語法
drivr.find_element_by_id(id)
示例
開啟百度首頁,定位搜尋框,檢視頁面元素,可以看到搜尋框元素的id為 kw
程式碼
# 匯入selenium
from selenium import webdriver
from time import sleep
# 例項化瀏覽器物件
driver = webdriver.Chrome()
# 訪問被測網址
url = "https://www.baidu.com"
driver.get(url)
sleep(2)
# 元素定位
el = driver.find_element_by_id('kw')
# 列印元素
print(el)
# 檢視元素對應的原始碼
print(el.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()
輸出結果如下:
可以看到el是一個WebElement型別的物件
定位多個元素
# 匯入selenium
from selenium import webdriver
from time import sleep
# 例項化瀏覽器物件
driver = webdriver.Chrome()
# 訪問被測網址
url = "https://www.baidu.com"
driver.get(url)
sleep(2)
# 元素定位
els = driver.find_elements_by_id('kw')
# 檢視返回結果的資料型別
print("資料型別", type(els))
print("元素個數", len(els))
# 遍歷結果,檢視元素原始碼
for i in els:
print(i.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()
輸出結果如下:
可以看到返回資料的型別為list,元素個數為1個
通過name定位
說明
當所定位的元素具有id
屬性時,我們可以使用by_name來定位該元素,name一般情況下在當前頁面中不是唯一的。
語法
drivr.find_element_by_name(name)
示例
開啟百度首頁,定位搜尋框,檢視頁面元素,可以看到搜尋框元素的name為 wd
程式碼
# 匯入selenium
from selenium import webdriver
from time import sleep
# 例項化瀏覽器物件
driver = webdriver.Chrome()
# 訪問被測網址
url = "https://www.baidu.com"
driver.get(url)
sleep(2)
# 元素定位
el = driver.find_element_by_name('wd')
# 列印元素
print(el)
# 檢視元素對應的原始碼
print(el.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()
輸出結果如下:
可以看到el是一個WebElement型別的物件
定位多個元素
# 匯入selenium
from selenium import webdriver
from time import sleep
# 例項化瀏覽器物件
driver = webdriver.Chrome()
# 訪問被測網址
url = "https://www.baidu.com"
driver.get(url)
sleep(2)
# 元素定位
els = driver.find_elements_by_name('wd')
# 檢視返回結果的資料型別
print("資料型別", type(els))
print("元素個數", len(els))
# 遍歷結果,檢視元素原始碼
for i in els:
print(i.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()
輸出結果如下:
可以看到返回資料的型別為list,元素個數為1個
通過class_name定位
說明
當所定位的元素具有class
屬性時,我們可以使用by_class_name來定位該元素,class屬性一般為多個值。
語法
drivr.find_element_by_class_name(class屬性值)
示例
開啟百度首頁,定位搜尋框,檢視頁面元素,可以看到搜尋框元素的class_name為 s_ipt
程式碼
# 匯入selenium
from selenium import webdriver
from time import sleep
# 例項化瀏覽器物件
driver = webdriver.Chrome()
# 訪問被測網址
url = "https://www.baidu.com"
driver.get(url)
sleep(2)
# 元素定位
el = driver.find_element_by_class_name('s_ipt')
# 列印元素
print(el)
# 檢視元素對應的原始碼
print(el.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()
輸出結果如下:
可以看到el是一個WebElement型別的物件
定位多個元素
# 匯入selenium
from selenium import webdriver
from time import sleep
# 例項化瀏覽器物件
driver = webdriver.Chrome()
# 訪問被測網址
url = "https://www.baidu.com"
driver.get(url)
sleep(2)
# 元素定位
els = driver.find_elements_by_class_name('s_ipt')
# 檢視返回結果的資料型別
print("資料型別", type(els))
print("元素個數", len(els))
# 遍歷結果,檢視元素原始碼
for i in els:
print(i.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()
輸出結果如下:
可以看到返回資料的型別為list,元素個數為1個
通過tag_name定位
說明
通過元素的標籤名稱來定位,如果頁面中存在多個相同標籤,預設返回第一個標籤元素
語法
drivr.find_element_by_tag_name("標籤名")
示例
開啟網易企業郵箱登入介面,定位登入按鈕,檢視頁面元素,可以看到登入按鈕的tag_name為 button
程式碼
# 匯入selenium
from selenium import webdriver
from time import sleep
# 例項化瀏覽器物件
driver = webdriver.Chrome()
# 訪問被測網址
url = "https://qiye.163.com/login/"
driver.get(url)
sleep(2)
# 元素定位
el = driver.find_element_by_tag_name('button')
# 列印元素
print(el)
# 檢視元素對應的原始碼
print(el.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()
輸出結果如下:
可以看到el是一個WebElement型別的物件
定位多個元素
# 匯入selenium
from selenium import webdriver
from time import sleep
# 例項化瀏覽器物件
driver = webdriver.Chrome()
# 訪問被測網址
url = "https://qiye.163.com/login/"
driver.get(url)
sleep(2)
# 元素定位
els = driver.find_elements_by_tag_name('button')
# 檢視返回結果的資料型別
print("資料型別", type(els))
print("元素個數", len(els))
# 遍歷結果,檢視元素原始碼
for i in els:
print(i.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()
輸出結果如下:
可以看到返回資料的型別為list,元素個數為2個
通過link_text定位
說明
by_link_text
通過超文字連結上的文字資訊來定位元素,一般專門用於定位頁面上的超文字連結。
語法
drivr.find_element_by_link_text("全部文字")
示例
開啟百度首頁,定位點選超連結 新聞
程式碼
# 匯入selenium
from selenium import webdriver
from time import sleep
# 例項化瀏覽器物件
driver = webdriver.Chrome()
# 訪問被測網址
url = "https://www.baidu.com"
driver.get(url)
sleep(2)
# 元素定位
el = driver.find_element_by_link_text('新聞')
# 列印元素
print(el)
# 檢視元素對應的原始碼
print(el.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()
輸出結果如下:
可以看到el是一個WebElement型別的物件
定位多個元素
# 匯入selenium
from selenium import webdriver
from time import sleep
# 例項化瀏覽器物件
driver = webdriver.Chrome()
# 訪問被測網址
url = "https://www.baidu.com"
driver.get(url)
sleep(2)
# 元素定位
els = driver.find_elements_by_link_text('新聞')
# 檢視返回結果的資料型別
print("資料型別", type(els))
print("元素個數", len(els))
# 遍歷結果,檢視元素原始碼
for i in els:
print(i.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()
輸出結果如下:
可以看到返回資料的型別為list,元素個數為1個
通過partial_link_text定位
說明
當不確定超連結上的文字資訊或者只想通過一些關鍵字進行匹配時,可以使用by_partial_link_text
這個方法來通過部分連結文字進行匹配
可以使用精準或模糊匹配,如果使用模糊匹配最好使用能代表唯一的關鍵詞
如果有多個值,預設返回第一個值
語法
drivr.find_element_by_partial_link_text("部分文字")
示例
開啟百度首頁,定位點選超連結 hao123
程式碼
# 匯入selenium
from selenium import webdriver
from time import sleep
# 例項化瀏覽器物件
driver = webdriver.Chrome()
# 訪問被測網址
url = "https://www.baidu.com"
driver.get(url)
sleep(2)
# 元素定位
el = driver.find_element_by_partial_link_text('hao')
# 列印元素
print(el)
# 檢視元素對應的原始碼
print(el.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()
輸出結果如下:
可以看到el是一個WebElement型別的物件
定位多個元素
# 匯入selenium
from selenium import webdriver
from time import sleep
# 例項化瀏覽器物件
driver = webdriver.Chrome()
# 訪問被測網址
url = "https://www.baidu.com"
driver.get(url)
sleep(2)
# 元素定位
els = driver.find_element_by_partial_link_text('hao')
# 檢視返回結果的資料型別
print("資料型別", type(els))
print("元素個數", len(els))
# 遍歷結果,檢視元素原始碼
for i in els:
print(i.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()
輸出結果如下:
可以看到返回資料的型別為list,元素個數為1個