使用 Python 和 Selenium 进行浏览器自动化测试
1. 概述
Selenium 是一个用于自动化浏览器操作的工具,它可以模拟用户在浏览器中的行为。例如:点击、输入文字、选择下拉框等。它支持多种编程语言(如 Python, Java, C# 等)和多种浏览器(Chrome, Firefox, Edge, Safari 等)。
如何使用 Python 结合 Selenium 库进行浏览器自动化测试。内容涵盖环境搭建、驱动配置、常用 API 操作(如点击、输入)、现代定位方式以及显式等待策略。通过示例代码演示了打开网页、搜索交互及页面元素验证的全过程,旨在帮助开发者快速掌握 Web 自动化测试的基础实现方法。

Selenium 是一个用于自动化浏览器操作的工具,它可以模拟用户在浏览器中的行为。例如:点击、输入文字、选择下拉框等。它支持多种编程语言(如 Python, Java, C# 等)和多种浏览器(Chrome, Firefox, Edge, Safari 等)。
在 Web 自动化测试中,Selenium 是业界标准工具之一,能够帮助开发者快速验证网页功能、回归测试以及执行跨浏览器的兼容性测试。
要使用 Selenium 进行自动化测试,首先需要搭建一个测试环境。
Selenium 是 Python 库,因此需要安装 Python。可以从 Python 官网下载并安装 Python,确保安装时勾选 "Add Python to PATH"。
在 Python 环境中使用 Selenium,需要安装 Selenium 库。可以使用 pip 命令来安装:
pip install selenium
查看已安装的版本号:
pip show selenium
Selenium 需要与浏览器交互,因此需要安装对应浏览器的驱动程序(Driver)。
以 Chrome 浏览器为例,需要下载并安装 ChromeDriver 驱动程序。下载地址通常可在 ChromeDriver 官网获取。根据浏览器版本,下载对应的驱动,解压后 exe 文件放在 Python 安装目录下面,或者将其路径添加到系统环境变量 PATH 中。
注意: 新版本的 Chrome 浏览器(80+)通常不再需要单独下载 ChromeDriver,因为 Chrome 内置了 DevTools Protocol,但为了兼容性和稳定性,建议显式配置 Driver 路径或使用 webdriver-manager 库自动管理。
使用 Selenium 时,需要创建 WebDriver 对象来启动浏览器。以下代码创建一个 Chrome 浏览器对象:
from selenium import webdriver
# 创建 Chrome 浏览器对象
driver = webdriver.Chrome()
Selenium 提供了多种方式来查找页面元素。旧版 API 如 find_element_by_id 已被弃用,新版推荐使用 By 类配合 find_element 方法。
常用的定位策略包括:
By.IDBy.CLASS_NAMEBy.TAG_NAMEBy.LINK_TEXTBy.XPATHBy.CSS_SELECTOR示例代码:
from selenium.webdriver.common.by import By
# 按 ID 查找元素
element = driver.find_element(By.ID, 'element-id')
# 按类名查找元素
element = driver.find_element(By.CLASS_NAME, 'class-name')
# 按标签名查找元素
element = driver.find_element(By.TAG_NAME, 'tag-name')
# 按链接文本查找元素
element = driver.find_element(By.LINK_TEXT, 'link-text')
# 使用 XPath 查找
element = driver.find_element(By.XPATH, '//div[@id="main"]')
Selenium 提供了丰富的 API 来模拟用户操作:
# 切换到指定的窗口
driver.switch_to.window(window_handle)
# 切换到指定的 frame
driver.switch_to.frame(frame)
# 切换到 alert
driver.switch_to.alert
from selenium.webdriver.common.action_chains import ActionChains
# 鼠标移动到指定的元素上
element = driver.find_element(By.ID, 'target-element')
ActionChains(driver).move_to_element(element).perform()
# 拖拽元素到指定的位置
target = driver.find_element(By.ID, 'target-id')
ActionChains(driver).drag_and_drop(element, target).perform()
以下是一个完整的自动化测试脚本示例,演示如何打开百度、搜索关键词并关闭浏览器。
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
# 设置等待时间
sleep_time = 1
# 创建 Chrome 浏览器对象
driver = webdriver.Chrome()
try:
# 打开百度首页
driver.get('https://www.baidu.com')
# 找到搜索框并输入关键字
search_box = driver.find_element(By.ID, 'kw')
search_box.send_keys('Python 自动化测试')
# 找到搜索按钮并点击
search_button = driver.find_element(By.ID, 'su')
search_button.click()
# 等待搜索结果加载
sleep(5)
# 打印当前 URL 验证跳转
print(f"Current URL: {driver.current_url}")
finally:
# 无论是否出错,都关闭浏览器
driver.quit()
在实际测试中,页面加载速度不一,直接使用 sleep() 会导致效率低下或不稳定。推荐使用显式等待(Explicit Wait)。
使用 WebDriverWait 配合 expected_conditions,直到条件满足或超时。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待元素出现并可以点击
wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, 'submit-btn')))
element.click()
捕获常见的 Selenium 异常,如 NoSuchElementException, TimeoutException 等,以便调试。
from selenium.common.exceptions import NoSuchElementException, TimeoutException
try:
element = driver.find_element(By.ID, 'non-existent')
except NoSuchElementException:
print("元素未找到")
except TimeoutException:
print("等待超时")
time.sleep()。driver.quit() 释放资源。本文介绍了如何使用 Python 结合 Selenium 库进行浏览器自动化测试。内容涵盖环境搭建、驱动配置、常用 API 操作、现代定位方式以及显式等待策略。通过示例代码演示了打开网页、搜索交互及页面元素验证的全过程。掌握这些基础技能,可以帮助开发者构建稳定的 Web 自动化测试框架,提升软件交付质量。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online