一、引言:Selenium與UI自動化測試基礎
1.1 Selenium簡介
Selenium是一個開源的Web應用自動化測試框架,支持多瀏覽器(Chrome、Firefox、Edge等)和多編程語言(Python、Java、JavaScript等),核心組件包括:
- WebDriver:通過瀏覽器原生API控制瀏覽器,模擬用戶操作(點擊、輸入等),無侵入性。
- IDE:瀏覽器插件,支持錄制/回放操作,可導出測試腳本(適合新手快速上手)。
- Grid:分布式測試工具,支持多節點并行執行測試用例,提升效率。
1.2 2025年Selenium核心新特性
Selenium 4.11+版本(2025年主流版本)帶來多項關鍵更新,顯著降低新手使用門檻:
- Selenium Manager自動驅動管理:無需手動下載/配置ChromeDriver,框架自動匹配瀏覽器版本并下載驅動,解決長期困擾的“驅動版本不兼容”問題。
- Chrome For Testing(CfT)支持:谷歌推出的專用測試瀏覽器,禁用自動更新,確保測試環境一致性,可通過
npx @puppeteer/browsers install chrome@stable
安裝。 - PageLoadStrategy枚舉類:4.17版本新增,替代字符串參數,支持IDE自動補全,避免拼寫錯誤(如
options.page_load_strategy = PageLoadStrategy.NONE
)。 - 相對定位器增強:支持通過元素相對位置定位(
above
/below
/to_left_of
/to_right_of
/near
),復雜頁面定位更靈活。 - 啟動速度優化:瀏覽器驅動啟動邏輯調整,平均節省0.5秒啟動時間,通過動態重試間隔(首次0.01秒,逐步增加至0.5秒)提升效率。
二、環境搭建:從0到1配置開發環境
2.1 Python環境準備
-
安裝Python
推薦Python 3.8+(兼容Selenium 4.x),從Python官網下載對應系統版本,安裝時勾選“Add Python to PATH”。
驗證安裝:python --version
(Windows)或python3 --version
(macOS/Linux)。 -
虛擬環境配置(推薦)
避免依賴沖突,使用venv
創建獨立環境:# 創建虛擬環境 python -m venv selenium_env # 激活環境(Windows) selenium_env\Scripts\activate # 激活環境(macOS/Linux) source selenium_env/bin/activate
2.2 Selenium安裝
通過pip安裝最新版Selenium(2025年推薦4.17.0+):
# 基礎安裝
pip install selenium
# 國內鏡像源加速(推薦)
pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple
驗證安裝:pip show selenium
,輸出版本信息即成功。
2.3 瀏覽器與驅動配置
2.3.1 Chrome瀏覽器(推薦)
-
安裝Chrome For Testing
專為測試設計,禁用自動更新,通過npm安裝:# 安裝穩定版Chrome For Testing npx @puppeteer/browsers install chrome@stable # 安裝指定版本(如116.0.5793.0) npx @puppeteer/browsers install chrome@116.0.5793.0
-
驅動自動管理
Selenium 4.11+內置Selenium Manager,無需手動下載ChromeDriver:from selenium import webdriver # 自動管理驅動,無需executable_path參數 driver = webdriver.Chrome() driver.get("https://www.baidu.com") driver.quit()
2.3.2 其他瀏覽器配置
- Firefox:需安裝GeckoDriver,下載后放入系統PATH或通過
Service
指定路徑:from selenium.webdriver.firefox.service import Service driver = webdriver.Firefox(service=Service("./geckodriver"))
- Edge:基于Chromium內核,配置方式同Chrome,使用
webdriver.Edge()
。
三、核心API:元素定位與操作實戰
3.1 元素定位策略(8大方法)
Selenium提供多種定位方式,按優先級排序如下:
定位方式 | 語法示例 | 適用場景 |
---|---|---|
ID | driver.find_element(By.ID, "kw") | 元素有唯一ID(如百度搜索框) |
NAME | driver.find_element(By.NAME, "wd") |