Web自动化测试从零到一:Selenium元素定位、等待机制、鼠标键盘操作全攻略

手工点点点效率太低?回归测试每次都要重复执行?Web自动化测试正是解决这些痛点的利器。本文带你系统掌握Selenium WebDriver的核心知识:浏览器启动、8大元素定位、隐式/显式等待、表单/鼠标/键盘操作、JavaScript执行等


目录

Web自动化测试从零到一:Selenium元素定位、等待机制、鼠标键盘操作全攻略

1. ⭐ 写在前头,行业趋势

Playwright(微软出品)

2. 🌐 Web自动化测试概述

常用工具

3. 🧩 Selenium WebDriver基础

引入Selenium(Python示例)

4. 🎯 元素定位方法(返回 WebElement 对象)

5. ⏱️ 元素等待机制

隐式等待

显式等待

常用等待条件

6. 🖥️ 浏览器操作

窗口管理

页面滚动(执行JavaScript)

浏览器导航

表单操作

下拉菜单处理(Select类)

键盘操作(Keys类)

鼠标操作(ActionChains类)

元素状态判断

7. ⚡ 执行JavaScript

弹窗处理

8. 📖 总结与实践

🔮 系列内容

✨ 写在最后


1. ⭐ 写在前头,行业趋势

虽然Selenium是现在主流必学,但2026年的行业现状——Playwright的采用率已经超过了Selenium,加上AI辅助测试五花八门,让基础薄弱的可以快速上手。

Playwright(微软出品)

无需手动配置驱动 自带浏览器驱动,不用再管 ChromeDriver、GeckoDriver
自动智能等待 自动处理异步加载、弹窗、iframe,无需写 WebDriverWait
执行更快 速度比 Selenium 快 3~5 倍,稳定性更高
多场景开箱即用 多标签、多浏览器、移动端模拟、视频录制、网络拦截一键搞定
对前端 JS 更友好 原生支持 page.evaluate() 执行复杂 JS,可直接监听网络、控制浏览器底层行为,语法更贴近前端开发习惯

2. 🌐 Web自动化测试概述

Web自动化测试 是通过模拟用户操作对Web应用程序进行自动化验证的过程,主要目的:提高测试效率、保证回归测试质量

常用工具(官网链接)


3. 🧩 Selenium WebDriver基础

WebDriver架构

通过浏览器驱动与不同浏览器进行通信,支持 Chrome、Firefox、Edge 等主流浏览器。

浏览器启动与管理

通过 WebDriver 类启动和管理浏览器会话,可设置浏览器窗口大小、位置等参数。

页面导航

  • get() 方法打开指定 URL

  • forward()back()refresh() 方法实现页面前进、后退和刷新

引入Selenium(Python示例)

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
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import Select

4. 🎯 元素定位方法(返回 WebElement 对象)

Selenium 提供 8种基本元素定位方式,通过 By 类实现:

driver = webdriver.Chrome()

driver.find_element(By.ID, "id值")                     # id定位
driver.find_element(By.NAME, "name值")                 # name定位
driver.find_element(By.CLASS_NAME, "class值")          # class值定位
driver.find_element(By.CSS_SELECTOR, "css选择器")      # css选择器定位
driver.find_element(By.TAG_NAME, "标签名")             # 标签名定位
driver.find_element(By.LINK_TEXT, "链接文本")          # 链接文本定位
driver.find_element(By.PARTIAL_LINK_TEXT, "部分链接文本") # 部分链接文本定位
driver.find_element(By.XPATH, "xpath表达式")           # [XPath]定位

💡 提示:优先使用 ID、NAME 等稳定属性,XPATH灵活但维护成本较高。


5. ⏱️ 元素等待机制

隐式等待

设置全局等待时间,在查找元素时如果未立即找到会持续等待直到超时。

driver.implicitly_wait(10)   # 等待10秒

显式等待

针对特定元素设置等待条件,更加灵活精准。

from selenium.webdriver.support import expected_conditions as EC

WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, "element_id"))
)

常用等待条件

条件 说明
element_to_be_clickable 元素可点击
presence_of_element_located 元素存在于DOM
visibility_of_element_located 元素可见
element_to_be_selected 元素被选中

6. 🖥️ 浏览器操作

窗口管理

driver.current_window_handle          # 获取当前窗口句柄
driver.switch_to.window(handle)       # 切换窗口
driver.maximize_window()              # 最大化窗口

页面滚动(执行JavaScript)

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

浏览器导航

driver.get("https://www.baidu.com")   # 访问页面
title = driver.title                  # 获取页面标题
url = driver.current_url              # 获取当前URL
driver.forward()                      # 前进
driver.back()                         # 后退
driver.refresh()                      # 刷新

表单操作

element.clear()                       # 清空输入框
element.send_keys("文本内容")          # 输入文本
element.submit()                      # 直接提交表单
element.send_keys(Keys.ENTER)         # 模拟回车键

下拉菜单处理(Select类)

from selenium.webdriver.support.ui import Select

select = Select(driver.find_element(By.ID, "dropdown"))
select.select_by_index(1)             # 通过索引选择
select.select_by_value("value")       # 通过值选择
select.select_by_visible_text("文本") # 通过可见文本选择

键盘操作(Keys类)

element.send_keys(Keys.CONTROL + 'a')  # 全选
element.send_keys(Keys.TAB)            # 切换焦点

鼠标操作(ActionChains类)

from selenium.webdriver.common.action_chains import ActionChains

actions = ActionChains(driver)
actions.move_to_element(element).perform()   # 鼠标悬停
actions.double_click(element).perform()      # 双击
actions.context_click(element).perform()     # 右键点击
actions.drag_and_drop(source, target).perform()  # 拖放

元素状态判断

方法 说明
element.is_displayed() 是否可见
element.is_selected() 是否被选中(用于单选/复选框)
element.is_enabled() 是否可用
find_elements(By.xxx, "value") 列表长度判断

7. ⚡ 执行JavaScript

driver.execute_script("arguments[0].click();", element)   # 通过JS点击元素
driver.execute_script("return document.title;")           # 获取页面标

弹窗处理

alert = driver.switch_to.alert   # 获取弹窗
alert.accept()                    # 确认
alert.dismiss()                   # 取消

8. 📖 总结与实践

知识点 关键要点
元素定位 优先ID/NAME,XPATH作为补充
等待机制 隐式等待设置全局超时,显式等待针对特定条件
表单操作 clear()、send_keys()、Select类处理下拉框
鼠标键盘 ActionChains + Keys 模拟复杂交互
JavaScript 用于滚动、点击隐藏元素等原生方法无法完成的场景

案例需求:

1、打开在百度搜索主页(https://www.baidu.com/)

2、鼠标指向设置按钮,选择高级搜索

3、在高级搜索上的文档格式选项中选择PDF,在搜索结果包含全部关键词中输入“测试”,点击高级搜索按钮

代码实现:


🔮 系列内容

系列文章链接(持续更新中)

  • 上一篇 白盒测试
  • 下一篇 接口测试(python版)
  • 还有更多…

关注我,第一时间获取更新


✨ 写在最后

如果本文对你有帮助,欢迎点赞收藏评论转载引用请私信作者本人(╹ڡ╹ )~

更多推荐