01 环境搭建:90%的新手死在这一步
传统搭建 Selenium 环境的流程是这样的:装 Python → 装 Selenium → 查 Chrome 版本 → 下载对应 ChromeDriver → 配置环境变量 → 报错 → 换版本 → 再报错。
Before:手动下载 ChromeDriver,版本和浏览器不匹配,`SessionNotCreatedException` 刷屏。
After:Selenium 4.6+ 内置 `Selenium Manager`,自动下载和管理驱动,零配置启动。
```python
from selenium import webdriver
就这一行,驱动自动管理
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
print(driver.title)
driver.quit()
```
> 告别手动下载驱动的时代,把时间花在写测试上,不是花在配环境上。
安装只需要两条命令:
```bash
pip install selenium
pip install webdriver-manager # 备用方案
```
关键点:Python 版本选 3.10 以上,Selenium 选 4.20 以上。低版本缺少自动管理能力,会给自己挖坑。
---
02 八大核心操作:掌握这8个,覆盖80%的测试场景
Selenium 的本质是什么?就是用代码操控浏览器。它的所有操作归结为8类:
| 操作类型 | 方法 | 典型场景 |
|---------|------|---------|
| 元素定位 | `find_element` | 点击按钮、输入文本 |
| 文本输入 | `send_keys` | 登录表单、搜索框 |
| 点击操作 | `click` | 提交按钮、导航链接 |
| 获取信息 | `text` / `get_attribute` | 验证页面内容 |
| 等待机制 | `WebDriverWait` | 异步加载元素 |
| 切换窗口 | `switch_to.window` | 多标签页操作 |
| 执行JS | `execute_script` | 滚动页面、处理弹窗 |
| 截图保存 | `save_screenshot` | 测试失败的证据 |
Before:用 `time.sleep(5)` 硬等,测试慢得像蜗牛,还经常等不到位。
After:用 `WebDriverWait` 显式等待,元素一出现立刻执行,平均提速3倍。
```python
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
显式等待:最多等10秒,元素出现即继续
element = WebDriverWait(driver, 10).until(
EC.presenceofelement_located((By.ID, "kw"))
)
element.send_keys("Selenium教程")
```
> 等待不是浪费时间,等错了才是。
---
03 元素定位策略:从入门到精准打击
定位元素是 Selenium 测试的核心。8种定位方式,实战中真正常用的只有4种:
优先级排序:ID > CSS Selector > XPath > Class Name
```python
1. ID定位(最快最稳)
driver.find_element(By.ID, "username")
2. CSS选择器(灵活强大)
driver.findelement(By.CSSSELECTOR, ".login-form input[type='text']")
3. XPath定位(万能但慢)
driver.find_element(By.XPATH, "//input[@placeholder='请输入用户名']")
4. 相对定位(Selenium 4 新特性,最优雅)
from selenium.webdriver.support.relativelocator import withtag_name
password = driver.findelement(By.ID, "username").findelement(
withtagname("input").below(By.ID, "username")
)
```
Before:复制一整条 XPath,改一个字就挂,像玻璃做的。
After:用相对定位,元素关系变了也不怕,像橡皮做的。
实战建议:
- 开发配合加 ID 属性,测试效率翻倍
- 避免 `absolute XPath`(从 `/html/body/div[1]...` 开始的),页面结构一变全废
- 善用浏览器 F12 的 "Copy selector" 快速获取
> 定位元素不是写代码,是读页面的思维。看懂结构,一行搞定。
---
04 第一个完整测试脚本:百度搜索实战
把前面学的串起来,写一个完整的测试案例:
```python
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def testbaidusearch():
初始化浏览器
driver = webdriver.Chrome()
driver.maximize_window()
try:
打开百度首页
driver.get("https://www.baidu.com")
定位搜索框,输入关键词
search_box = WebDriverWait(driver, 10).until(
EC.presenceofelement_located((By.ID, "kw"))
)
searchbox.sendkeys("软件测试" + Keys.ENTER)
验证搜索结果
WebDriverWait(driver, 10).until(
EC.title_contains("软件测试")
)
获取结果数量
results = driver.findelements(By.CSSSELECTOR, ".result.c-container")
assert len(results) > 0, "搜索结果为空"
print(f"测试通过!找到 {len(results)} 条搜索结果")
finally:
driver.quit()
if name == "main":
testbaidusearch()
```
Before:手动打开浏览器,输入关键词,肉眼检查结果,一次只能测一条。
After:脚本自动执行,断言自动判断,跑100条用例只需要按回车。
> 代码是测试的复利。今天写一行,明天省一小时。
---
05 常见坑与避坑指南
踩坑不可怕,可怕的是同一个坑踩两次。以下是新手最常遇到的5个问题:
坑1:`ElementNotInteractableException` — 元素被遮挡
```python
解决:用JS滚动到元素位置
driver.execute_script("arguments[0].scrollIntoView();", element)
```
坑2:`NoSuchElementException` — 元素还没加载出来
```python
解决:用显式等待,别用 time.sleep
WebDriverWait(driver, 10).until(EC.visibility_of(element))
```
坑3:弹窗处理不当导致脚本中断
```python
解决:切换到弹窗再操作
alert = driver.switch_to.alert
alert.accept() # 或 alert.dismiss()
```
坑4:iframe 里的元素定位不到
```python
解决:先切入 iframe
driver.switchto.frame("iframename")
操作完毕后切回主文档
driver.switchto.defaultcontent()
```
坑5:Chrome 版本升级后脚本失效
```python
解决:升级 Selenium 到 4.6+,驱动自动匹配
pip install --upgrade selenium
```
> 经验不是用时间换的,是用错误堆出来的。每个报错信息都是通往正确的路标。
---
从环境搭建到脚本跑通,从元素定位到避坑指南。5个模块,覆盖了 Selenium 入门的全部核心知识。
下一步干什么?不要再看教程了。打开编辑器,对着你公司的项目,写第一个测试脚本。跑通的那一刻,你就已经超过了80%还在"准备学"的人。
测试自动化不是终点,是起点。跑通第一个脚本的成就感,会推着你走完剩下的路。
京公网安备 11010802030320号