Selenium自动化测试实战:从入门到精通(附真实案例)

文章目录

一、为什么选择Selenium?

(敲黑板)在自动化测试领域,Selenium绝对是当之无愧的王者!它支持多种浏览器(Chrome/Firefox/Edge等)、跨平台运行(Windows/Mac/Linux)、还能用Python/Java/C#等多种语言编写脚本。最重要的是——完全免费开源!(打工人狂喜)

1.1 环境准备三步走
  1. 安装Python(推荐3.8+版本)
  2. pip install selenium (命令行输入)
  3. 下载浏览器驱动(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 进阶技巧
  1. 显式等待(解决页面加载慢的问题):
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")))
  1. 异常处理(让脚本更健壮):
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}")

(避坑指南)遇到动态加载内容时:

  1. 适当添加等待时间
  2. 尝试模拟滚动操作
  3. 使用execute_script执行JavaScript

四、文件上传的终极解决方案

(血泪教训)文件上传是很多新手的大坑!传统方法send_keys()有时会失效,因为:

  1. 输入框被隐藏
  2. 需要先点击触发文件选择窗口
  3. <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()

五、常见问题排雷指南

  1. 元素定位失败

    • 检查是否在iframe里
    • 使用相对XPath代替绝对路径
    • 尝试不同的定位策略(CSS选择器优先)
  2. 浏览器自动关闭

    • 在代码开头添加options.add_experimental_option("detach", True)
    • 避免使用driver.quit()
  3. Headless模式卡顿

    options = webdriver.ChromeOptions()
    options.add_argument("--headless=new")
    options.add_argument("--disable-gpu")
    

六、最佳实践建议

  1. 使用Page Object模式(代码可维护性+10086)
  2. 搭配Pytest框架(测试报告美滋滋)
  3. 定期更新驱动(每月检查一次)
  4. 使用隐式等待+显式等待组合拳
  5. 重要操作添加屏幕截图(出问题时救命用)

(超级实用)我的项目结构通常这样组织:

├── config/         # 配置文件
├── pages/          # 页面对象类
├── testcases/      # 测试用例
├── utils/          # 工具函数
└── reports/        # 测试报告

七、总结

Selenium就像一把瑞士军刀,功能强大但需要正确使用。记住:好的自动化测试不是写最复杂的代码,而是写最容易维护的代码!遇到问题多查官方文档([Selenium官网]),少走弯路。

(最后叮嘱)千万别在正式环境跑测试脚本!曾经有同事误操作清空了生产数据库…(别问我是怎么知道的)
pan>七、总结

Selenium就像一把瑞士军刀,功能强大但需要正确使用。记住:好的自动化测试不是写最复杂的代码,而是写最容易维护的代码!遇到问题多查官方文档([Selenium官网]),少走弯路。

(最后叮嘱)千万别在正式环境跑测试脚本!曾经有同事误操作清空了生产数据库…(别问我是怎么知道的)

本文是转载文章,点击查看原文
如有侵权,请联系 lx@jishuguiji.net 删除。