一、引言: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") |