初识 Selenium4 及使用

简介

Selenium 是一个广泛使用的自动化测试工具,主要用于 Web 应用程序的自动化测试。它支持多种编程语言(如 Java、Python、C#、Ruby、JavaScript 等),允许用户通过代码控制浏览器执行自动化任务,例如点击按钮、填写表单、验证页面内容等。

Selenium 可以在多种浏览器(如 Chrome、Firefox、Edge、Safari 等)和操作系统(Windows、macOS、Linux)上运行。

备注:本文档主要介绍在 Python 环境下使用 Selenium 4 的相关知识。

官方文档:Selenium 官方文档


特点

  • 跨浏览器支持:支持 Chrome、Firefox、Safari、Edge 等多种主流浏览器,可在不同浏览器上执行相同的测试脚本。
  • 多语言支持:支持 Python、Java、C#、Ruby、JavaScript 等编程语言,开发者可以用自己熟悉的语言编写脚本。
  • 灵活性:可与 TestNG、JUnit、PyTest 等测试框架结合,提供丰富的测试功能。
  • 与 CI/CD 集成:能与 Jenkins 等持续集成工具集成,实现自动化测试和持续交付。
  • 自动化 Web 交互:可模拟真实用户操作,如点击、滚动、键盘输入等,实现 Web 自动化(即使在浏览器窗口无焦点状态下也能执行)。

组成部分

Selenium 由多个组件构成,各组件用途如下:

  • Selenium WebDriver:核心组件,直接与浏览器交互。提供丰富的 API,允许开发者通过代码控制浏览器行为(打开网页、点击按钮、填写表单等)。
  • Selenium IDE:浏览器插件,用于录制和回放用户操作。适合初学者快速创建简单测试脚本,但不支持复杂逻辑和条件判断。
  • Selenium Grid:用于并行执行测试的工具。可在多个浏览器和操作系统上同时运行测试,加快测试速度,提高测试覆盖率。

应用场景

  • 自动化测试:Web 应用程序的功能测试、回归测试、兼容性测试等;模拟用户操作,验证页面功能。
  • 网页抓取:从网页中提取数据(如商品信息、新闻内容等),尤其适合处理动态加载的内容(如通过 JavaScript 加载的数据)。
  • 自动化任务:执行重复性网页操作,如自动填写表单、自动登录等。
  • 跨浏览器测试:验证 Web 应用程序在不同浏览器和操作系统上的兼容性。

局限性

  • 无法处理非浏览器操作:Selenium 只能控制浏览器,无法直接操作桌面应用程序或移动应用程序。
  • 动态内容处理复杂:对于高度动态的网页(如单页应用),可能需要额外的等待机制或执行 JavaScript 来确保元素加载完成。
  • 性能开销:启动浏览器实例会消耗较多资源,执行速度相对较慢。

Selenium 4 新特性

  1. executable_path 已弃用
    使用 Service 对象来代替旧的 executable_path 参数。
  2. 自动资源回收
    Selenium 4 可以自动关闭浏览器并回收资源,不再需要手动调用 driver.quit()(但为了确保资源释放,建议仍显式调用)。
  3. 新的定位方法
    引入 By 类,替代之前的 find_element_by_* 系列方法,统一使用 find_element(By.ID, "id") 形式。
  4. 放弃 PhantomJS
    不再支持 PhantomJS 无头浏览器,推荐使用 Chrome 或 Firefox 的无头模式。

注意:Selenium 4 要求 Python 版本为 3.7 或更高。


环境准备

安装 Selenium

  1. 使用pip安装

    # 通过pip安装
    pip install selenium
    # 如果系统中同时安装了 Python 2 和 Python 3,可能需要使用 pip3
    pip3 install selenium
    
  2. 验证安装

    pip show selenium
    

下载浏览器驱动

Selenium 需要通过浏览器驱动来控制浏览器,不同浏览器需要不同的驱动。请根据你使用的浏览器下载对应的驱动,并确保驱动版本与浏览器版本匹配。

驱动放置方式

  • 方式一:将驱动可执行文件(如 chromedriver.exe)放在 Python 解释器所在目录(如 python.exe 同级目录),或在系统 PATH 环境变量中包含驱动所在路径。

    image-20250609162613071
  • 方式二:在代码中通过 Service 对象指定驱动路径(推荐,避免污染系统环境)。


快速启动示例

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()  # 假设驱动已在 PATH 中
try:
    # 打开百度
    driver.get("https://www.baidu.com")
    # 输入关键词并搜索
    search_box = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "chat-textarea"))
    )
    search_box.send_keys("克峰同学")

    # 等待提交按钮可点击并点击
    submit_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.ID, "chat-submit-button"))
    )
    submit_btn.click()

    # 等待搜索结果加载
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "div.result"))
    )
    print("页面标题:", driver.title)
    # 保持浏览器打开,只关闭驱动连接
    input("\n按Enter键关闭驱动连接(浏览器保持打开):")
finally:
    driver.quit()

注意事项

  • 驱动版本必须与浏览器版本匹配,否则会报错。可查看浏览器版本(如 Chrome 的“关于 Chrome”),然后到驱动下载页选择对应版本。
  • 若不想将驱动放入系统 PATH,始终使用 Service 指定路径,这样更灵活。
  • 建议显式调用 driver.quit(),尽管 Selenium 4 有一定自动回收能力,但显式关闭可确保资源及时释放。
  • 处理动态内容:推荐使用显式等待(WebDriverWait)而非 time.sleep(),以提高脚本稳定性和执行效率。
posted @ 2025-06-13 16:15  克峰同学  阅读(163)  评论(0)    收藏  举报