文章目录
一、为什么选择Selenium?
(敲黑板)在自动化测试领域,Selenium绝对是当之无愧的王者!它支持多种浏览器(Chrome/Firefox/Edge等)、跨平台运行(Windows/Mac/Linux)、还能用Python/Java/C#等多种语言编写脚本。最重要的是——完全免费开源!(打工人狂喜)
1.1 环境准备三步走
- 安装Python(推荐3.8+版本)
pip install selenium
(命令行输入)- 下载浏览器驱动(Chromedriver为例):
- 打开[Chrome浏览器]->关于->查看版本号
- 访问[Google官方驱动下载页]选择对应版本
- 将chromedriver.exe放在Python安装目录下
(重要提示)驱动版本必须与浏览器版本完全匹配!否则会报错!!!
二、实战案例:电商网站登录测试
2.1 基础版脚本
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.example.com/login")
# 定位元素并操作
driver.find_element("id", "username").send_keys("testuser")
driver.find_element("name", "password").send_keys("Pass1234")
driver.find_element("xpath", '//button[@type="submit"]').click()
time.sleep(3)
print(driver.current_url) # 验证是否跳转成功
driver.quit()
2.2 进阶技巧
- 显式等待(解决页面加载慢的问题):
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located(("id", "welcome-msg")))
- 异常处理(让脚本更健壮):
try:
driver.find_element("class_name", "error-msg")
print("登录失败!")
except NoSuchElementException:
print("登录成功!")
三、高级应用:动态数据抓取
(实战场景)需要抓取某新闻网站的热搜榜单,但页面是JavaScript动态生成的!
# 先滚动到页面底部(触发懒加载)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# 使用CSS选择器定位元素
items = driver.find_elements("css selector", ".news-item")
for item in items:
title = item.find_element("class name", "title").text
link = item.find_element("tag name", "a").get_attribute("href")
print(f"{title}: {link}")
(避坑指南)遇到动态加载内容时:
- 适当添加等待时间
- 尝试模拟滚动操作
- 使用execute_script执行JavaScript
四、文件上传的终极解决方案
(血泪教训)文件上传是很多新手的大坑!传统方法send_keys()
有时会失效,因为:
- 输入框被隐藏
- 需要先点击触发文件选择窗口
- 非
<input type="file">
元素
4.1 改良版代码
# 定位隐藏的input元素
upload_input = driver.find_element("xpath", "//input[@type='file']")
# 使用JavaScript移除hidden属性
driver.execute_script("arguments[0].style.display = 'block';", upload_input)
# 发送文件路径
upload_input.send_keys("/Users/xxx/Desktop/test.jpg")
# 点击上传按钮
driver.find_element("id", "upload-btn").click()
五、常见问题排雷指南
-
元素定位失败:
- 检查是否在iframe里
- 使用相对XPath代替绝对路径
- 尝试不同的定位策略(CSS选择器优先)
-
浏览器自动关闭:
- 在代码开头添加
options.add_experimental_option("detach", True)
- 避免使用
driver.quit()
- 在代码开头添加
-
Headless模式卡顿:
options = webdriver.ChromeOptions() options.add_argument("--headless=new") options.add_argument("--disable-gpu")
六、最佳实践建议
- 使用Page Object模式(代码可维护性+10086)
- 搭配Pytest框架(测试报告美滋滋)
- 定期更新驱动(每月检查一次)
- 使用隐式等待+显式等待组合拳
- 重要操作添加屏幕截图(出问题时救命用)
(超级实用)我的项目结构通常这样组织:
├── config/ # 配置文件
├── pages/ # 页面对象类
├── testcases/ # 测试用例
├── utils/ # 工具函数
└── reports/ # 测试报告
七、总结
Selenium就像一把瑞士军刀,功能强大但需要正确使用。记住:好的自动化测试不是写最复杂的代码,而是写最容易维护的代码!遇到问题多查官方文档([Selenium官网]),少走弯路。
(最后叮嘱)千万别在正式环境跑测试脚本!曾经有同事误操作清空了生产数据库…(别问我是怎么知道的)
pan>七、总结
Selenium就像一把瑞士军刀,功能强大但需要正确使用。记住:好的自动化测试不是写最复杂的代码,而是写最容易维护的代码!遇到问题多查官方文档([Selenium官网]),少走弯路。
(最后叮嘱)千万别在正式环境跑测试脚本!曾经有同事误操作清空了生产数据库…(别问我是怎么知道的)