目录

  1. Selenium 简介
  2. Selenium 体系结构
  3. Selenium 与浏览器的交互机制
  4. WebDriver 工作流程
  5. Selenium 支持的浏览器驱动
  6. 小结

1️⃣ Selenium 简介

  • Selenium 是一个流行的开源自动化测试框架,主要用于Web应用的自动化测试。
  • 它支持多种编程语言(Java、Python、C#等),以及多种浏览器(Chrome、Firefox、Edge等)。
  • 通过模拟用户操作,实现网页的自动化交互。

2️⃣ Selenium 体系结构

Selenium 主要分为以下几个组件:

组件作用
Selenium IDE浏览器插件,录制和回放测试脚本
Selenium RC旧版远程控制服务器,已逐渐淘汰
Selenium WebDriver最新主流,直接与浏览器驱动通信进行自动化
Selenium Grid用于分布式测试,支持多浏览器并行执行

3️⃣ Selenium 与浏览器的交互机制

  • 核心思想是通过浏览器厂商提供的**浏览器驱动(Browser Driver)**来控制浏览器。
  • 浏览器驱动是一个独立的可执行文件,负责将WebDriver的命令转换成浏览器能够理解的原生操作。
  • Selenium WebDriver通过**JSON Wire Protocol(旧版)W3C WebDriver标准协议(新版)**与驱动通信。
  • 驱动再通过浏览器的内部接口执行具体操作,比如点击、输入、导航等。

4️⃣ WebDriver 工作流程

  1. 测试脚本调用WebDriver API(如 driver.get()driver.findElement())。
  2. WebDriver 客户端库将API调用封装成HTTP请求,发送给对应浏览器驱动(例如 ChromeDriver)。
  3. 浏览器驱动解析请求,将其转换为浏览器能执行的命令。
  4. 浏览器执行命令,如加载页面、点击元素、输入文本等。
  5. 浏览器驱动将执行结果封装成HTTP响应,返回给WebDriver客户端。
  6. 测试脚本接收结果,继续下一步操作或断言。

5️⃣ Selenium 支持的浏览器驱动

浏览器驱动名称说明
Google ChromeChromeDriver官方支持,需与浏览器版本匹配
Mozilla FirefoxGeckoDriver适配 Firefox 浏览器
Microsoft EdgeEdgeDriver适配新版基于 Chromium 的 Edge
SafariSafariDrivermacOS 自带,需开启远程自动化

6️⃣ 小结

  • Selenium 工作原理基于客户端API调用与浏览器驱动的通信,驱动控制浏览器实现自动化。
  • 采用标准协议保证跨浏览器和语言的兼容性。
  • 通过浏览器厂商驱动桥接,Selenium 能够稳定高效地驱动主流浏览器完成自动化任务。

好的!这里给你一个用Python写的简单Selenium自动化示例,帮你快速理解它的使用流程和工作原理。


Selenium Python 示例:打开网页并搜索关键词

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

# 1. 初始化浏览器驱动(以Chrome为例,需下载chromedriver并配置好环境变量)
driver = webdriver.Chrome()

try:
    # 2. 打开网页
    driver.get("https://www.google.com")

    # 3. 找到搜索输入框元素
    search_box = driver.find_element(By.NAME, "q")

    # 4. 输入关键词并按回车
    search_box.send_keys("Selenium 工作原理")
    search_box.send_keys(Keys.RETURN)

    # 5. 等待搜索结果加载
    time.sleep(3)

    # 6. 获取搜索结果标题(示例获取第一个结果标题)
    first_result = driver.find_element(By.CSS_SELECTOR, "h3")
    print("第一个搜索结果标题是:", first_result.text)

finally:
    # 7. 关闭浏览器
    driver.quit()

说明

  • **webdriver.Chrome()**启动Chrome浏览器实例,实际上是调用了chromedriver
  • 代码通过driver.get()加载网页,模拟浏览器访问。
  • find_element定位元素,send_keys模拟键盘输入,Keys.RETURN模拟回车。
  • time.sleep()用于等待网页加载(实际项目中建议用显式等待)。
  • 最后调用driver.quit()关闭浏览器释放资源。